Play 商店上发布的应用无法与 Google 地图 API 和 Facebook API 通信

Published App on Play Store can't communicate with Google Maps API and Facebook API

我使用 Android Studio 创建了一个已签名的 APK,并将我的 SHA1 指纹和相关 api 密钥添加到 Google 开发者控制台和 Facebook 控制台。如果我通过 USB 上传我签名的 apk,一切正常,安装后映射 API 和 facebook api 运行良好。如果我将相同的 apk 上传到 Play 商店,当我尝试使用 Facebook 登录时,它会显示 "invalid key hash. The key hash blablabla doesn't match with any stored.."。 因此,如果我不使用 facebook 登录,我什至无法获得 google 地图;这让我认为 play 商店上加载的 apk 改变了他的指纹或类似的东西。 我检查了 Android Developers 和 Whosebug 上的所有内容,但我无法让它工作,因为奇怪的是这个签名版本的 apk 在我将它加载到 Play 商店之前运行良好。

您的应用程序的调试和发布构建类型使用两个不同的密钥进行签名。

您需要在 Google 地图和 Facebook 中注册这两个密钥,以便他们允许访问他们的服务

是的,显然地图不会在已签名的 APK 中加载。

解决方案:

当您在 Google API 控制台中生成 API 密钥时,您需要使用 SHA 密钥限制该密钥

但是在生成 Signed 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 开发者控制台并继续

希望对您有所帮助:)

这是您为什么看不到 Google 地图的答案。

我最近在 Google Play 商店上传了 APK,我在查看 Play 控制台后遇到了同样的问题,我找到了解决这个问题的方法。

他们的密钥没有问题,但问题出在您的 SHA-1 上。您使用 SHA-1 为您的 APK 签名并没有问题,然后上传 APK 也没有问题。

但根据 Play 控制台的新更新,当您使用 SHA-1 签署 APK 并上传 APK 时,它仅由您签署,但根据新更新,它也由 Google Play for更安全。在这里查看 Google 播放部分的一部分:

With Google Play App Signing: You sign your app with your upload key. Then, Google verifies and removes the upload key signature. Finally, Google re-signs the app with the original app signing key you provided and delivers your app to the user.

可以参考Documentation here.

现在,您的问题的答案是成功上传 APK 后,您可以看到在带有两个 SHA-1 的部分中,第一个 SHA-1 已 Google 创建 它自己的 2nd SHA-1 是你的.

所以只需复制 Google SHA-1 并将其粘贴到您生成 Google 映射 API 密钥的控制台。

我终于解决了,问题可能是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}" />

参考:

然后我注册了 2 个不同的密钥,每个密钥都有正确的 sha1 指纹,一个是调试密钥,另一个是 Google Play console 提供的(不是上传证书,而是 Google 生成的另一个) .

非常非常感谢 Zuhad 和 Andy Developer 的启发。

在@Andy Developer 的启发下,我可以在我的应用程序上传到 Google Play 后显示地图。这些是步骤:

  1. 将您的应用上传到 Google Play(签名的 APK 文件)
  2. 应用提交并获得批准后,select 您的应用来自 Google Play Console
  3. 转到开发工具 -> 发布管理 -> 应用签名

  1. 复制 Google Play 在上传应用程序后颁发的第一个 SHA-1 证书。
  2. 转到 Google Console 和 select 你的项目。
  3. Select 您的 API-key,限制您的密钥,并在包名称后粘贴 SHA-1。

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