私の問題は Googleサービス3.0.0でapi_key/current keyが見つからない に非常に似ていますが、さらに複雑です。
今朝、アプリをcom.google.gms:google-services:3.0.0とすべてのplay-services 9.0.0の依存関係に更新しました
compile 'com.google.Android.gms:play-services-analytics:9.0.0'
compile 'com.google.Android.gms:play-services-ads:9.0.0'
compile 'com.google.Android.gms:play-services-identity:9.0.0'
compile 'com.google.Android.gms:play-services-gcm:9.0.0'
今、私は悪名高いエラーを取得します
エラー:タスク ':hotelsclick:processDebugGoogleServices'の実行に失敗しました。 > api_key/current_keyオブジェクトがありません
これは、google-services.jsonファイルにAPIキーがないためと思われます(だから私は言われました)。 https://developers.google.com/cloud-messaging/Android/client#get-config から新しいAPIキーを取得し、その中に次のフィールドが見つかりました。
"api_key": [],
Google Maps APIキーをそこに置くべきだと思いますが、ここで私が経験している二重の問題があります:
1-キーをそのフィールド内に配置しようとしても、機能しません。私は両方で試しました
"api_key": [{ "current_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-AE" }],
そして
"api_key": ["XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-AE"],
エラーは同じままです。
2-ダイナミックビルディングを使用するためにgradleを使用しています。私は自分のモジュールbuild.gradleに以下を入れました:
buildTypes {
release {
minifyEnabled true
shrinkResources true
debuggable false
resValue "string", "google_maps_api_key", "ABCDEFGHILMNO... my maps release API key"
proguardFiles getDefaultProguardFile('proguard-Android.txt'),
'proguard-rules.pro'
zipAlignEnabled true
}
debug {
resValue "string", "google_maps_api_key", "ZNTMRNCDNR... my google maps debug API key"
debuggable true
proguardFiles getDefaultProguardFile('proguard-Android.txt'),
'proguard-rules.pro'
}
}
私が持っているAndroidmanifest.xmlファイル
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="@string/google_maps_api_key" />
現在、Googleサービス3.0.0に更新するまでは常に機能していますが、なぜ機能しないのかわかりません。コンパイルされたbuild.gradleファイルから適切なAPIキーを取得してマニフェストに入れるべきではありませんか?
私の二重の質問は次のとおりです。動的APIキーの取得が機能しないのはなぜですか。そして、どうすればこれを修正できますか?
ありがとうございました
次のように空の「current_key」を入れてみましたか?
"api_key": [{ "current_key": "" }]
それがどうなるかを見てください。
編集: "api_key":[]("client"にある)を "api_key":[{"current_key": ""}]に置き換える必要があります
ここで答えられていないこれらのステップで、この問題を解決することができました。この回答は、クラウドメッセージングを有効にするものではなく、サーバーキーを取得するだけです。 (答えがまったくないのに「重複」であるために私の回答が削除されたために明確化)。
まず、Firebase Consoleに移動し、次に[プロジェクト設定]に移動して、[クラウドメッセージング]タブをクリックします。 「サーバーキー」と表示されている場所を見て、(「送信者ID」番号ではなく)長いキーが表示されていない場合は、「キーの再生成」をクリックすると長いキーが表示されます。そのキーをコピーして、次のgoogle-services.jsonファイルに配置します:"api_key": [ {"current_key" : "key goes here"} ]
。
この方法は、他の誰も働いていなかったときに役立ちました。
新しいビルドツールを使用した後に直面するこの問題classpath 'com.google.gms:google-services:3.0.0'
、
「google-services.json」を再作成するだけです。うまくいけば解決します。
キーを誤って削除した場合、または元に戻せない場合は、新しいapi資格情報を作成します here に、「Androidキー(Googleサービスにより自動作成)」と正確に名前を付けます。これにより、資格情報がgoogle-services jsonに戻されます。
Android Studio には、ビルドタイプとフレーバーの概念があり、これらを使用して必要なものを取得できます。ビルドタイプはアプリの異なるバージョンであり、機能的には同じですが、デバッグコードが異なる場合があります。デフォルトでは、すべてのAndroid Gradleプロジェクトにはデバッグおよびリリースビルドタイプがあります。
さらに、プロジェクトに Google Mapsアクティビティ を追加し、Android Studioが必要なファイルを生成します。挿入する必要があるのは キー 。
Gradleを使用しているため、次のことができます。
build.gradle
Android {
.. .. ...
buildTypes {
debug {
resValue "string", "google_maps_api_key", "[YOUR DEV KEY]"
}
release {
resValue "string", "google_maps_api_key", "[YOUR PROD KEY]"
}
}
}
AndroidManifest.xml
meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="@string/google_maps_api_key"/>
この方法では、AndroidManifest.xmlが1つしかなく、ビルドタイプに基づいて値を設定します。
このマニフェストプレースホルダーを確認することもできます: http://tools.Android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support
クラウドメッセージングを使用せずに有効にして、新しいjsonファイルを生成する必要があります。クラウドメッセージングを有効にすると、必要なAPIキーが取得されます。
他のサービスが必要な場合は、これを参照してください: https://stackoverflow.com/a/37358432/440881