Firebase를 Android 프로젝트에 추가하는 과정에서 프로젝트에 Gradle 플러그인과 구성 파일을 추가해야 합니다.
Firebase Console, Management REST API 또는 Firebase CLI를 사용하여 Android 프로젝트에 Firebase를 추가하는 경우 Gradle 플러그인과 JSON 구성 파일을 프로젝트에 수동으로 추가해야 합니다. 하지만 Firebase Assistant for Android Studio를 사용하면 이러한 작업은 설정 과정에서 자동으로 수행됩니다.
Gradle 플러그인 추가
build.gradle 파일에 Google 서비스 Gradle 플러그인 ()을 추가합니다.
dependencies {
classpath 'com.google.gms:google-services:4.5.0'
// ...
}
Google 서비스 Gradle 플러그인에는 두 가지 주요 기능이 있습니다.
구성 파일을 처리하고 앱의 코드에서 사용할 수 있는 Android 리소스를 생성합니다.google-services.json 사용 설정한 서비스에 필요한 기본 라이브러리의 종속 항목을 추가합니다. 이 단계에서는 다음과 같이
app/build.gradle파일에 Google 서비스 Gradle 플러그인을 적용해야 합니다.
apply plugin: 'com.google.gms.google-services'./gradlew :app:dependencies를 실행하여 이 단계의 결과를 확인할 수 있습니다.
JSON 구성 파일 추가
구성 파일은 일반적으로 app/ 디렉터리 (Android 스튜디오 앱 모듈의 루트)에 배치됩니다. 버전 2.2.0부터 플러그인은 빌드 유형 및 제품 버전별 JSON 파일을 지원합니다. 다음 디렉터리 구조는 모두 유효합니다.
// dogfood and release are build types.
app/
google-services.json
src/dogfood/google-services.json
src/release/google-services.json
...
제품 버전이 사용 중인 경우 이러한 더 복잡한 디렉터리 구조도 유효합니다.
// free and paid are product flavors.
app/
google-services.json
src/dogfood/paid/google-services.json
src/release/free/google-services.json
...
JSON 구성 파일이 처리되는 방식
구성 파일의 기본 구조는 다음과 같습니다.
{
"project_info": {...},
"client": [...],
}
project_info 객체에는 프로젝트에 관한 일반 정보가 포함되어 있으며 client 배열의 각 구성원에는 프로젝트에 추가한 클라이언트(Android 앱)에 관한 정보가 포함되어 있습니다.
Android 앱의 JSON 파일을 처리할 때 플러그인은 다음 논리에 따라 패키지 이름 (현재 빌드 유형의 경우)과 일치하는 client 객체만 사용합니다.
플러그인은
client배열의 각 구성원에 대해client_info/android_client_info/package_name값을 확인합니다. 패키지 이름이 이 값과 일치하면 멤버 객체를 반환합니다.client의 어떤 멤버도 패키지 이름과 일치하지 않으면 플러그인이 예외를 발생시킵니다.
이 문서의 나머지 부분에서는 위에 설명된 논리에 따라 결정된 client 배열의 멤버를 참조하기 위해 YOUR_CLIENT을 사용합니다.
XML 파일 생성
JSON 처리의 주요 결과는 코드에서 Android 리소스로 참조할 수 있는 두 개의 XML 파일을 생성하는 것입니다. 각 파일의 예시는 다음과 같습니다.
app/build/generated/res/google-services/{build_type}/values/values.xml<?xml version="1.0" encoding="utf-8"?> <resources> <! -- Present in all applications --> <string name="google_app_id" translatable="false">1:1035469437089:android:73a4fb8297b2cd4f</string> <! -- Present in applications with the appropriate services configured --> <string name="gcm_defaultSenderId" translatable="false">1035469437089</string> <string name="default_web_client_id" translatable="false">337894902146-e4uksm38sne0bqrj6uvkbo4oiu4hvigl.apps.googleusercontent.com</string> <string name="ga_trackingId" translatable="false">UA-65557217-3</string> <string name="firebase_database_url" translatable="false">https://example-url.firebaseio.com</string> <string name="google_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string> <string name="google_crash_reporting_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string> <string name="project_id" translatable="false">mydemoapp</string> </resources>app/build/generated/res/google-services/{flavor}/{build_type}/xml/global_tracker.xml<?xml version="1.0" encoding="utf-8"?> <resources> <string name="ga_trackingId" translatable="false">UA-65557218-3</string> </resources>
XML 파일의 값
XML 파일의 모든 값은 아래에 나열된 위치의 구성 파일에 있습니다. Android 프로젝트에 Gradle 플러그인을 사용하지 못하도록 하는 구성이 있는 경우 이러한 값을 사용하여 XML 파일을 수동으로 안전하게 다시 만들 수 있습니다.
google_app_idYOUR_CLIENT/client_info/mobilesdk_app_idgcm_defaultSenderIdproject_info/project_numberdefault_web_client_idYOUR_CLIENT/oauth_client/client_id (client_type == 3)ga_trackingIdYOUR_CLIENT/services/analytics-service/analytics_property/tracking_idfirebase_database_urlproject_info/firebase_urlgoogle_api_keyYOUR_CLIENT/api_key/current_keygoogle_crash_reporting_api_keyYOUR_CLIENT/api_key/current_keyproject_idproject_info/project_id
문제 해결
빌드 시 File google-services.json is missing from module root folder. The Google Services Plugin cannot function without it 오류 메시지가 표시됩니다.
Firebase 콘솔을 사용하면 구성 파일을 다운로드할 수 있습니다.
구성 파일을 다운로드한 후 Android 스튜디오 프로젝트의 app/ 폴더에 복사하거나, 여러 빌드 유형을 사용하는 경우 app/src/{build_type} 폴더에 복사합니다.
R.string.gcm_defaultSenderId 또는 R.xml.global_tracker과 같은 기호를 찾을 수 없습니다.
build.gradle 파일의 패키지 이름이 google-services.json 파일을 만들 때 입력한 패키지 이름과 일치하는지 확인합니다. 잘 모르겠다면 시작 흐름을 다시 실행하고 새 JSON 파일을 가져오세요.