google-services.json은 실제로 무엇을합니까? 앱의 루트 디렉터리에 저장하도록 요청합니다. 내 앱에서이

현재 앱에 Google Analytics 및 GCM 서비스를 추가하는 작업을하고 있습니다. 두 서비스 구현 가이드에서 Google은 개발자에게 json 파일 인 google-services.json을 생성하여 앱의 루트 디렉터리에 저장하도록 요청합니다.

내 앱에서이 json 파일을 삭제해도 서비스가 계속 작동한다는 것을 알았습니다.

이 파일이 실제로 무엇을위한 것인지 확실히 알고 싶습니다. 사용법은 무엇이며 어떻게 작동합니까?



답변

google-services 플러그인과 json에 대해 조금 조사하고이 플러그인의 소스를 찾았습니다.

먼저 첫 번째 것들

classpath에 의해 참조되고 apply를 사용하는 gradle-plugin google-services는 빌드 타임 플러그인 전용입니다! 따라서 앱의 빌드 프로세스에만 영향을 미치고 런타임 프로세스에는 영향을 미치지 않습니다!

이 플러그인은 앱에서 Google 서비스를 빠르게 통합하기위한 빠른 시작 도우미로만 사용됩니다. 분명히 프로세스는 다소 복잡하고 문서화되지 않았으므로 Google은이 프로세스가 수행하는 작업을 명확히해야했습니다.

실제로 플러그인 버전 com.google.gms : google-services : 1.4.0-beta3의 소스 코드를 찾았고 앱 초대와 관련된 특정 참조를 찾지 못했고 앱 초대 용 Google API도 찾지 못했습니다! (하지만 아마도 프로젝트 ID가있는 일반 API 프로젝트를 사용하는 것일 수도 있습니다. 시도하지 않았습니다.)

그것이하는 일

google-services gradle-plugin은 앱 모듈에서 언급 된 google-services.json 파일을 찾습니다. 그런 다음 Google API 개발자 콘솔에서 google-services.json 파일로 생성 한 project-id 및 tracking-id와 같은 구성된 설정을 찾습니다. 찾은 설정에서 Android 리소스 값이 다음 경로에 생성됩니다.

$project.buildDir/generated/res/google-services/$variant.dirName/values/values.xml

예를 들어 앱의 디버그 빌드의 경우 :

app/build/generated/res/google-services/debug/values/values.xml

예를 들어 GCM 가이드를 따랐다면 JSON 파일에는 API 프로젝트의 ID가 다음 android-resource로 포함됩니다.

<string name="gcm_defaultSenderId">project-id</string>

따라서이 플러그인과 JSON 파일은 앱을 실행하거나 게시하는 데 필수적인 것은 아닙니다. 특정 Google API 기능을보다 쉽게 ​​통합하기 위해 몇 가지 기본 Android 리소스 파일을 생성하는 것은 빠른 시작 도우미 일뿐입니다.

아래 참조 된 소스 코드에서 google-services 플러그인은 항상 app / build.gradle에 정의 된 모든 앱 변형에 대해 이러한 android-resources를 생성합니다.

원하지 않는 경우 생성 된 리소스를 원하는 앱 변형에서 사용하고 나머지는 삭제해야합니다. app / build.gradle에서 google-services 플러그인 적용을 제거하는 것을 잊지 마십시오. 그렇지 않으면 모든 앱 변형에 대해 다시 생성됩니다.

하지 않는 것

이 플러그인과 JSON 파일은 앱의 Google 기능의 내부 작동에 직접적인 영향을주지 않습니다. GCM 또는 Google Analytics와 같은 통합 방법에 대한 developer.android.com의 이전 자습서를 이미 따랐다면 gradle-plugin google-services 또는 google-services.json 파일을 통합 할 필요조차 없습니다!

출처를 찾은 위치에 대한 알림

google-services gradle-plugin을 통합 한 후 프로젝트를 동기화하면 Gradle은 google-services 종속성을 다음과 유사한 경로로 자동으로 다운로드합니다 (Windows에서는 Linux 용 home / .gradle을 조사해야 할 수 있음).

C:\Users\user\.gradle\caches\modules-2\files-2.1\com.google.gms\google-services\1.4.0-beta3\f1580f62e3be313eba041ce19b64fd3f44cf8951\google-services-1.4.0-beta3-sources.jar

이 jar 파일을 추출하면 두 개의 파일이 있습니다.

GoogleServicesPlugin.groovy
GoogleServicesTask.java

gradle-plugin의 일반 소스 코드를 포함합니다.

GoogleServicesPlugin.groovy

앱 변형 처리 및 경로의 기본 정의 등이 포함됩니다.

GoogleServicesTask.java

실제 작업 정의가 포함되어 있으므로 실제로 수행하는 작업을 보려면 다음 방법을 찾으십시오.

@TaskAction
public void action() throws IOException { 

답변

이 파일의 실제 용도 :

google-services.json 에는 GoogleApiClient와 연결하는 동안 확인하는 데 필요한 개발자 자격 증명 및 구성 설정이 포함되어 있습니다. 개발자 계정을 감지하기 때문에 서비스가 테스트 장치에서 제대로 작동하지만 앱을 공개적으로 출시 한 후에는 json 파일 없이는 작동하지 않습니다. 따라서 삭제하지 마십시오.

공식 문서는 다음과 같이 말합니다.

애플리케이션은 GoogleApiClient를 빌드하여 애플리케이션이 액세스 할 범위와 API를 지정합니다. GoogleApiClient가 연결되면 사용자가 로그인됩니다.

작동 원리 섹션을 참조하십시오 .


답변

모듈에 google-services.json을 추가하고 CLEAN 및 A REBUILD를 수행합니다. 프로젝트 속성과 함께 app / build / generated / res / google-services / debug / values ​​/ values.xml에 xml 파일이 생성되며 일반 xml 문자열처럼 쉽게 액세스 할 수 있습니다. 예:

String serverClientId = getString(R.string.default_web_client_id);

google-service.json 문서 에 모든 문자열과 추가 정보가 포함 된 목록이 있습니다 .