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后,我可以显示地图。 这些步骤是:

  1. 将您的应用上传到Google Play(已签名APK文件)
  2. 应用程序提交并获得批准后,从Google Play控制台中select您的应用程序
  3. 转到开发工具 – > 发布pipe理 – > 应用程序签名

应用登录Google Play控制台

  1. 上传应用后,复制Google Play发布的第一个SHA-1证书。
  2. 转到Google控制台并select您的项目。
  3. select您的API密钥,限制您的密钥,并在包名称后面粘贴SHA-1。

将SHA-1粘贴到Google Console中

  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的灵感。