使用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