在build.gradle中缺少使用Google Services 3.0.0和Maps API密钥的api_key /当前密钥

Mar*_*tti 35 android google-maps google-play-services android-gradle-plugin

我的问题非常类似于使用Google Services 3.0.0丢失api_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'
Run Code Online (Sandbox Code Playgroud)

现在我得到了臭名昭着的错误

错误:任务':hotelsclick:processDebugGoogleServices'的执行失败.>缺少api_key/current_key对象

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

  "api_key": [],
Run Code Online (Sandbox Code Playgroud)

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

1-如果我尝试将密钥放在该字段内,则不起作用.我试过两个

  "api_key": [{ "current_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-AE" }],
Run Code Online (Sandbox Code Playgroud)

  "api_key": ["XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-AE"],
Run Code Online (Sandbox Code Playgroud)

错误保持不变.

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'
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的Androidmanifest.xml文件中

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_maps_api_key" />
Run Code Online (Sandbox Code Playgroud)

现在,它一直在工作,直到我更新到Google Services 3.0.0,我不明白为什么它现在不起作用.它不应该从已编译的build.gradle文件中获取正确的API密钥并将其放入清单中吗?

所以我的双重问题是:为什么动态API密钥取出不再起作用?我该如何解决这个问题?

谢谢

Nit*_*dbz 72

您是否尝试过如下所示的空"current_key":

"api_key": [{ "current_key": "" }]
Run Code Online (Sandbox Code Playgroud)

看看情况如何.

编辑:您应该用"api_key"替换"api_key":[](位于"客户端"):[{"current_key":""}]


Dav*_*uez 9

我能够通过这里没有回答的这些步骤来解决这个问题.这个答案不是启用云消息传递,它只检索其服务器密钥.(澄清是因为我的答案在完全没有时被删除为'重复').

首先,转到Firebase控制台,然后转到"项目设置",然后单击"云消息传递"选项卡.查看"服务器密钥"所在的位置,如果没有长密钥显示(不是"发件人ID"编号),请单击"重新生成密钥",现在应显示一个长密钥.复制钥匙,并将其放置在你的谷歌,services.json文件在:"api_key": [ {"current_key" : "key goes here"} ].

这种方法帮助了我,而其他人都没有工作,所以希望这有助于某人.