Play商店中发布的应用无法与Google Maps API和Facebook API进行通信

时间:2017-06-21 09:16:42

标签: android google-maps google-play facebook-login android-keystore

我使用Android Studio创建了一个已签名的APK,我添加到Google Developer控制台和Facebook控制我的SHA1指纹和我的应用中的相对api键。如果我通过usb上传我签名的apk,一切都运行良好,安装后地图api和facebook api运行良好。如果我将相同的apk上传到Play商店,当我尝试使用Facebook登录时,它会说"无效的密钥哈希。密钥哈希blablabla与任何存储的"都不匹配。 因此,如果我没有Facebook登录,我甚至无法获得我的谷歌地图;这让我认为在Play商店中加载的apk会改变他的指纹或类似的东西。 我检查了Android开发者和Stackoverflow上的所有内容,但我无法使其正常工作,因为这个签名版本的apk很有效,直到我在Play商店加载它。

6 个答案:

答案 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后显示地图。这些是步骤:

  1. 将您的应用上传到Google Play(已签名的APK文件)
  2. 在提交并批准应用后,从Google Play Console
  3. 中选择您的应用
  4. 转到开发工具 - > 发布管理 - > 应用程序签名
  5. App Signing in Google Play Console

    1. 复制上传应用后Google Play发布的第一张SHA-1证书。
    2. 转到Google Console并选择您的项目。
    3. 选择您的API密钥,限制您的密钥,并在程序包名称后粘贴SHA-1。
    4. Paste SHA-1 into Google Console

      1. 保存,等待几分钟。并且您的应用应该显示Google地图。

答案 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 enter image description here添加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开发者控制台中并继续前进

希望它有所帮助:)