使用Google Services 3.0.0和build.gradle中的Maps API密钥丢失api_key /当前密钥

我的问题与使用Google Services 3.0.0丢失api_key / current密钥非常相似,但是具有更高的复杂性。

我今天上午更新了我的应用程序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'的执行失败。 >缺lessapi_key / current_key对象

这似乎是由于google-services.json文件中缺lessAPI密钥(所以我被告知)。 我从https://developers.google.com/cloud-messaging/android/client#get-config获得了新的API密钥,并在其中find以下字段。

  "api_key": [], 

我想我应该把我的Google Maps API键放在那里,但是这里出现了我遇到的双重问题:

1-如果我试图把钥匙放在那个领域里面,那不行。 我尝试了两个

  "api_key": [{ "current_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-AE" }], 

  "api_key": ["XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-AE"], 

错误保持不变。

我一直在使用gradle来使用dynamicbuild筑。 我把下面的模块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" /> 

现在,我一直在工作,直到我更新到谷歌服务3.0.0,我不明白为什么现在不工作。 不应该从编译的build.gradle文件中获取正确的API密钥,并将其放在清单中?

所以我的双重问题是:为什么dynamicAPI密钥获取工作了? 我该如何解决这个问题?

谢谢

你有没有试过把一个空的“current_key”如下所示:

 "api_key": [{ "current_key": "" }] 

看看那是怎么回事

我用这些在这里没有回答的步骤解决了这个问题。 这个答案是不启用云消息传递,它只是检索其服务器密钥。 (澄清,因为我的答案被删除,因为是“重复”,当它不是)。

首先,请转到Firebase控制台,然后转到“项目设置”,然后单击“Cloud Messaging”选项卡。 看看它说的“服务器密钥”,如果没有长键显示(不是“发件人ID”号码)点击“重新生成密钥”,现在应该显示一个长键。 复制该密钥并将其放置在您的google-services.json文件中: "api_key": [ {"current_key" : "key goes here"} ]

这种方法帮助我,而其他人都没有工作,所以希望这可以帮助别人。

在使用新的构build工具classpath 'com.google.gms:google-services:3.0.0' ,您将面临的这个问题

只需重新创build您的“google-services.json”。 希望能够解决。

如果意外删除了密钥,或者无法取回密钥,请在此创build一个新的api凭据,并将其命名为“Android密钥(由Google服务自动创build)”。 这将获得您的凭据回到谷歌服务JSON。

在Android Studio中 ,有构buildtypes和风味的概念,你可以使用这些来获得你所需要的。 构buildtypes是应用程序的不同版本,function相同,但debugging代码可能不同。 默认情况下,所有Android Gradle项目都具有debugging版本和发布版本types。

另外,您可以将Google地图活动添加到您的项目中,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,你可以根据你的构buildtypes来设置值。

您也可以检查这个清单占位符: http : //tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support

即使您不使用Cloud Messaging并生成新的json文件,也必须启用Cloud Messaging。 当您启用云消息传递时,您将获得API密钥。

也许你需要任何其他服务,请参阅: https : //stackoverflow.com/a/37358432/4408810