web-dev-qa-db-ja.com

google-services.jsonは実際に何をしますか?

現在のアプリにGoogleアナリティクスとGCMサービスを追加しています。両方のサービス実装のガイドで、Googleは開発者にjsonファイルを生成するように依頼します:google-services.jsonとそれをアプリのルートディレクトリに配置します。

このjsonファイルをアプリから削除しても、サービスは機能することがわかりました。

確かに知りたいのですが、このファイルは本当に何のためですか?その使用方法とその仕組み

116
Arthur Wang

Google-servicesプラグインとjsonについて少し調べて、このプラグインのソースを見つけました。

まず最初に

クラスパスおよびapplyで参照されるgradle-plugin google-servicesは、ビルド時プラグインのみです!そのため、アプリのビルドプロセスにのみ影響し、ランタイムプロセスには影響しません!

このプラグインは、アプリにGoogleサービスを迅速に統合するためのクイックスタートヘルパーとしてのみ使用されます。明らかに、プロセスはやや複雑で文書化されていないため、Googleはこのプロセスが何をするのかを明確にすべきでした。

実際、プラグインバージョンcom.google.gms:google-services:1.4.0-beta3のソースコードを見つけましたが、appinvitesに関する特定の参照は見つかりませんでしたし、App Invites用のGoogle APIも見つかりませんでした! (ただし、プロジェクトIDを持つ汎用APIプロジェクトを使用しているだけかもしれませんが、私はこれを試しませんでした)

何をする

Google-services gradle-pluginは、app-moduleで上記の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リソースとして含まれます。

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

したがって、このプラグインとJSONファイルは、アプリの実行や公開に必須ではありません。特定のGoogle API機能を簡単に統合するための基本的なAndroidリソースファイルを生成するクイックスタートヘルパーにすぎません。

以下で参照するソースコードで、google-servicesプラグインは、app/build.gradleで定義されているすべてのアプリバリアントに対して常にAndroidリソースを生成することに注意してください。

そうしたくない場合は、生成したリソースを必要なアプリバリアントで使用し、他のリソースを削除する必要があります。 app/build.gradleから適用されるgoogle-servicesプラグインを削除することを忘れないでください。そうしないと、すべてのアプリバリアントに対して再生成されます。

しないこと

このプラグインとJSONファイルは、アプリのGoogle機能の内部動作に直接影響を与えません! developer.Android.comで、たとえば、統合方法に関する古いチュートリアルに従っている場合GCMまたはGoogle Analyticsの場合、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ファイルを抽出すると、2つのファイルが見つかります。

GoogleServicesPlugin.groovy
GoogleServicesTask.Java

gradle-pluginのプレーンソースコードが含まれています。

GoogleServicesPlugin.groovy

アプリバリアントの処理とパスなどの基本的な定義が含まれます。

GoogleServicesTask.Java

実際のタスク定義が含まれています。次のメソッドを探して、実際に何が行われるかを確認してください。

@TaskAction
public void action() throws IOException { 
187
arne.jans

このファイルの実際の目的:

google-services.jsonには、GoogleApiClientとの接続中に確認する必要がある開発者の資格情報と構成設定が含まれています。開発者アカウントを検出しているため、サービスはテストデバイスで正常に機能していますが、アプリを公開した後は、jsonファイルがないと機能しません。削除しないでください。

公式文書には次のように書かれています:

アプリケーションはGoogleApiClientを構築し、アプリケーションがアクセスするスコープとAPIを指定します。 GoogleApiClientが接続すると、ユーザーはサインインします。

仕組み セクションを参照してください。

37
Mohammad Arman

Google-services.jsonをモジュールに追加し、CLEAN and A REBUILDを実行します。プロジェクトのプロパティとともにxmlファイルがapp/build/generated/res/google-services/debug/values/values.xmlに生成され、通常のxml文字列のように簡単にアクセスできます。例:

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

google-service.json doc にすべての文字列とmomre情報のリストがあります

3
Beto Caldas