Play商店中的已发布应用无法与Google Maps API和Facebook API进行通信
我使用Android Studio创build了一个已签名的APK,并且在我的应用程序中添加了Google Developer Console和Facebook控制台中的SHA1指纹和相关的api键。 一切工作正常,如果我通过USB上传我签名的apk,在安装地图API和Facebook API后效果很好。 如果我将相同的apk上传到Play商店,当我尝试使用Facebooklogin时,它会显示“无效的密钥哈希,密钥哈希blablabla与任何存储的不匹配”。 所以如果我login没有脸谱,我甚至不能得到我的谷歌地图; 这导致我认为在游戏商店上加载的apk更改了他的指纹或类似的东西。 我检查了所有的Android开发人员和Stackoverflow的东西,但我不能让它的工作,因为平板的事情是,这签署释放apk很好,直到我加载它的Play商店。
这是为什么你不能看到谷歌地图的答案。
我最近在Google Play商店上传了APK,在检查Play Console后我遇到了同样的问题,我find了解决这个问题的方法。
他们是没有问题的关键,但问题是与您的SHA-1。 你用你的SHA-1签了你的APK,那很好,然后上传APK也很好。
但是,按照使用SHA-1签名APK的Play控制台的最新更新,并上传APK时,只能由您签名,但根据最新更新,它还会由Google Play签名以提高安全性。 在这里看看Google Play部分的一部分:
使用Google Play应用签名:您可以使用上传密钥对应用进行签名。 然后,Google会validation并删除上传密钥签名。 最后,Google会使用您提供的原始应用签名密钥重新对应用进行签名,并将您的应用交付给用户。
您可以在这里参考文档。
现在,您的问题的答案是成功上传APK后,您可以看到,在两个SHA-1的部分中, 第一个SHA-1是Google自己创build的, 第二个SHA-1是您的 。
因此,只需复制Google SHA-1并将其粘贴到您生成Google Map API密钥的控制台即可。
从@Andy开发人员的灵感来看,我的应用上传到Google Play后,我可以显示地图。 这些步骤是:
- 将您的应用上传到Google Play(已签名APK文件)
- 应用程序提交并获得批准后,从Google Play控制台中select您的应用程序
- 转到开发工具 – > 发布pipe理 – > 应用程序签名
- 上传应用后,复制Google Play发布的第一个SHA-1证书。
- 转到Google控制台并select您的项目。
- select您的API密钥,限制您的密钥,并在包名称后面粘贴SHA-1。
- 按保存 ,等待几分钟。 你的应用程序应该显示Google地图。
您的应用程序的debugging版本和版本生成types使用两个不同的密钥进行签名。
您需要在Google地图和Facebook上注册这两个密钥才能访问他们的服务
是的,显然地图不会在已签名的APK中加载。
解:
在Google API控制台中生成API密钥时,您需要使用SHA密钥来限制密钥
但是在生成签名的APk之后,您需要采用释放模式的SHA密钥并添加到该API的API控制台中
我已经附上了图片,看看
希望它有帮助。
对于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开发者控制台中粘贴相同的代码并继续前进
希望它有助于:)
我终于解决了,问题可能是由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指纹,一个debugging,另一个由Google Play控制台(不是上传证书,而是另一个由Google生成)提供。
非常感谢Zuhad和Andy Developer的灵感。