google-services.json은 실제로 무엇을합니까?


120

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

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

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

답변:


197

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 { 

2
훨씬 더 나은 대답. 그러나 권장 된 접근 방식 ( developers.google.com/analytics/devguides/collection/android/v4 ) 을 따르려고 할 때 문제가있는 것 같습니다. 결정 ...
axd

7
게시 한 이후 변경되었을 수 있으므로 이에 대한 후속 메모입니다. Google 서비스 Gradle을 플러그인 가이드는 플러그인의 제 2 기능을 말한다. 또한 "활성화 한 서비스에 필요한 기본 라이브러리"에 대한 일부 종속성을 추가하고 버전 혼합에서 종속성 충돌을 확인합니다. 소스를 파헤 쳤고 "컴파일 com.google.android.gms : play-services-measurement"를 삽입하는 것처럼 보입니다. 누군가가 팝업을보고 그 이유를 확신 할 수없는 경우를 대비하여 참고하십시오.
Android3000 2016-04-05

3
파일에 몇 개의 키가 포함되어 있다는 점을 고려할 때 버전 관리에 추가해도 안전합니까? 내가 알 수있는 한 그것은 지문 일 뿐이므로 안전하다고 생각합니다. 그러나 나는 완전히 확신하지 못합니다.
exhuma

1
제 개인적인 의견으로는 @exhuma입니다. 개인 또는 회사 내부 프로젝트에서 작업하는 경우 버전 관리에 확인하는 것이 좋습니다. 반면에 오픈 소스 프로젝트의 버전 제어에 json 파일을 확인하지 않을 것입니다.
arne.jans

1
@ arne.jans senderId를 동적으로 설정할 수 있습니까, 아니면 values.xml에 하드 코딩 했습니까? FCM에 등록하는 것보다 서버에서 동적으로 senderId를 가져와야합니다.
Bresiu

37

이 파일의 실제 용도 :

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

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

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

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


3
답변 주셔서 감사합니다. 당신이 기꺼이 도울 수 있는지 궁금하지만 질문이 있습니다. 귀하의 링크가 로그인 서비스에 게시되는 것을 보았습니다. 하지만 내 앱에서 Google Analytics 및 GCM 서비스 만 사용하고 로그인 할 필요가없는 경우에도이 파일을 유지해야합니까? 감사!
Arthur Wang

3
예, 분석 또는 GCM의 경우이 구성 파일도 필요합니다. 문서의 2 단계에서 GET A CONFIGURATION FILE 링크 로 이동해야했습니다 . GCM 또는 분석을 위해이 conf 파일을 사용하는지 선택해야합니다. 이 파일은 (API 키, 개발 PC의 SHA1 해시 등과 같은) 개발자 신원 포함
모하마드 아르 멘

2
@androidGuy 응답이 늦어서 죄송합니다. 최신 릴리스 SHA1 키 해시로 새 구성 google-services.json 파일을 만들어야한다고 생각합니다. 그렇지 않으면 일부 기능은 Play 스토어에 게시 한 후 작동하지 않을 수 있습니다. 이전에 혼란을 드려 죄송합니다. 누군가 잘못된 방향으로 이동할 수 있으므로 이전 댓글을 삭제하겠습니다.
Mohammad Arman 2015 년

1
다른 사람의 단어를 복사하는 경우 해당 단어를 적절하게 인용 하고 전체 속성을 제공 해야 합니다. 나는 이것이 아래 답변의 표절이라고 생각하기 때문에 귀하의 편집을 롤백했습니다.
Brad Larson

6
보안은 어떻습니까? google-services.json을 다시 만들고 apk에서 읽을 수 있습니까? 내부에 개발자 및 API 키가 있습니다. 다른 사람에게 알려지기
싫어요

4

모듈에 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 문서 에 모든 문자열과 추가 정보가 포함 된 목록이 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.