我使用Android Studio创建了一个已签名的APK,我添加到Google Developer控制台和Facebook控制我的SHA1指纹和我的应用中的相对api键。如果我通过usb上传我签名的apk,一切都运行良好,安装后地图api和facebook api运行良好。如果我将相同的apk上传到Play商店,当我尝试使用Facebook登录时,它会说"无效的密钥哈希。密钥哈希blablabla与任何存储的"都不匹配。 因此,如果我没有Facebook登录,我甚至无法获得我的谷歌地图;这让我认为在Play商店中加载的apk会改变他的指纹或类似的东西。 我检查了Android开发者和Stackoverflow上的所有内容,但我无法使其正常工作,因为这个签名版本的apk很有效,直到我在Play商店加载它。
答案 0 :(得分:24)
以下是您无法查看Google地图的答案。
我最近在Google Play商店上传了APK,在查看Play控制台后我遇到了同样的问题我找到了解决此问题的方法。
他们的密钥没问题,但问题出在你的SHA-1上。您使用SHA-1对APK进行了签名,然后上传APK也很好。
但是,根据Play控制台的新更新,当您使用SHA-1签署APK并上传APK时,它仅由您签名,但根据新的更新,它也会由Google Play签名以获得更高的安全性。在这里查看Google Play部分的一部分:
使用Google Play应用程序签名:您使用上传密钥对应用进行签名。 然后,Google会验证并删除上传密钥签名。最后, Google会使用您提供的原始应用签名密钥重新签名该应用 并将您的应用程序交付给用户。
您可以参考Documentation here.
现在,您的问题的答案是成功上传APK后,您可以看到在带有两个SHA-1的部分中,第一个SHA-1是Google创建的是自己的第二个SHA-1是你的。
因此,只需复制Google SHA-1并将其粘贴到生成Google Map API密钥的控制台即可。
答案 1 :(得分:22)
借助@Andy Developer的灵感,我可以在将应用上传到Google Play后显示地图。这些是步骤:
答案 2 :(得分:3)
我终于解决了,问题可能是api提供的文件google_maps_api.xml没有在发布中加载,所以我
我确实喜欢这样:buildTypes {
debug {
manifestPlaceholders = [mapsKey: "AIzaSyB8o9KzQ5YN8U8AFS************"]
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
manifestPlaceholders = [mapsKey: "AIzaSyApLacqgkdIR7uEpcf*****************"]
}
}
然后在我的AndroidManifest
中<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="${mapsKey}" />
参考:https://stackoverflow.com/a/33917692/3235560
然后我注册了两个不同的密钥,每个密钥具有正确的sha1指纹,一个调试,另一个由Google Play控制台提供(不是上传证书,而是由Google生成的另一个)。
非常感谢Zuhad和Andy Developer的灵感。
答案 3 :(得分:0)
应用程序的调试和发布版本类型使用两个不同的密钥进行签名。
您需要在Google地图和Facebook中注册这两个密钥才能访问其服务
答案 4 :(得分:0)
是的,显然地图不会加载签名的APK。
解决方案:
在Google API控制台中生成API密钥时,您需要使用SHA密钥
来限制密钥但是在生成签名APk之后,您需要采用发布模式SHA密钥并为API 添加API控制台
我附上了图片,看看
希望它有所帮助。答案 5 :(得分:0)
对于Facebook生成哈希密钥,请使用以下代码:
try {
PackageInfo info = getPackageManager().getPackageInfo(
"YOUR PACKAGE NAME",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (PackageManager.NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
收到哈希码后,请将其粘贴在Facebook开发者控制台中并继续前进
希望它有所帮助:)