【问题标题】:Published App on Play Store can't communicate with Google Maps API and Facebook APIPlay Store 上发布的应用程序无法与 Google Maps API 和 Facebook API 通信
【发布时间】:2017-11-24 02:27:56
【问题描述】:

我使用 Android Studio 创建了一个签名的 APK,并将我的 SHA1 指纹和我的应用程序中的相关 api 密钥添加到 Google 开发者控制台和 Facebook 控制台。如果我通过 USB 上传我签名的 apk,一切正常,在安装它之后,地图 API 和 facebook api 运行良好。如果我将相同的 apk 上传到 Play 商店,当我尝试使用 Facebook 登录时,它会显示“无效的密钥哈希。密钥哈希 blablabla 与任何存储的..都不匹配”。 因此,如果我在没有 facebook 的情况下登录,我什至无法获取我的谷歌地图;这让我认为 Play 商店中加载的 apk 会改变他的指纹或类似的东西。 我检查了 Android Developers 和 Stackoverflow 上的所有内容,但我无法让它工作,因为奇怪的是,这个签名的发布 apk 在我将它加载到 Play 商店之前运行良好。

【问题讨论】:

  • 对于 Facebook,您需要一个开发者密钥哈希和一个发布密钥哈希。看看这个链接:developers.facebook.com/docs/android/…
  • 看看我对谷歌地图的回答。您需要更改由 Google Play 生成的 SHA-1,请在您的游戏控制台中找到新的 SHA-1 并将其上传到您的谷歌地图 api 中,它就像一个魅力。
  • 你在使用 Firebase 吗?

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


【解决方案1】:

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

  1. 将您的应用上传到 Google Play(签名的 APK 文件)
  2. 应用提交并通过后,从Google Play Console中选择您的应用
  3. 转到开发工具 -> 发布管理 -> 应用签名

  1. 上传应用后复制 Google Play 颁发的第一个 SHA-1 证书。
  2. 转到Google Console 并选择您的项目。
  3. 选择您的 API 密钥,限制您的密钥,并将 SHA-1 粘贴到包名称之后。

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

【讨论】:

    【解决方案2】:

    这是您看不到 Google 地图的原因的答案。

    我最近在 Google Play 商店上传了 APK,在检查 Play Console 后我遇到了同样的问题,我找到了解决此问题的方法。

    他们的密钥没有问题,但问题在于您的 SHA-1。您使用 SHA-1 签署了您的 APK,这很好,然后上传 APK 也很好。

    但是,当您使用 SHA-1 签署 APK 并上传仅由您签署的 APK 时,根据 Play Console 的新更新,但根据新更新,它也由 Google Play 签署以提高安全性。在此处查看 Google Play 部分的某些部分:

    使用 Google Play 应用签名:您使用上传密钥对应用进行签名。 然后,Google 会验证并删除上传密钥签名。最后, Google 使用您提供的原始应用签名密钥对应用重新签名 并将您的应用交付给用户。

    您可以参考Documentation here.

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

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

    【讨论】:

    • 谢谢你!我花了 3 天的时间试图弄清楚这一点。尽管有很多答案要求更改 sha1 键,但这是清晰明了的。感谢您的帮助。
    • @AndyDeveloper 谢谢伙计……你真的救了我。我已经从 Firebase 和 Google Console 中删除了我的项目并重新创建并再次配置它,但这没有任何区别。热火朝天你的答案。
    • @AndyDeveloper 这对我有很大帮助,谢谢。
    • 我必须说,你救了我的命:D
    • 你是我的英雄 :)
    【解决方案3】:

    终于解决了,问题可能是release中没有加载api提供的文件google_maps_api.xml,所以i

    我确实是这样的:

    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

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 我就是这么做的。我还从 Play 商店控制台下载了部署证书,并执行了以下命令 cat deployment_cert.der |openssl sha1 -binary | openssl base64,它为我提供了现在可以使用的 Facebook 登录 api 密钥,但我无法使地图工作。在 /app/src/release/res/values/google_maps_api.xml 下的文件中,我添加了 Maps 控制台提供的密钥,其中我还从我自己的证书(从 android studio 生成)注册了 sha1 指纹,并从玩商店控制台,但它不起作用
      • 您的调试版本是否使用与发布版本不同的 applicationId/package?根据这一点,您可能必须在 Google 地图 API 密钥配置中添加另一个条目
      • 正在生成调试 api 密钥,它正在工作。当我集成签名 API 密钥以发布它也不工作时,请帮助我。生成签名 apk 并再次生成带有签名密钥库文件和别名的签名谷歌地图 api 密钥。
      【解决方案5】:

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

      解决方案:

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

      但是在生成签名 APk 后,您需要获取发布模式 SHA 密钥并在 API 控制台中添加 API

      我已附上图片,看看

      希望对你有帮助。

      【讨论】:

      • 问题是debug和release的api键不一样,其实我写在gradle文件buildTypes { debug { manifestPlaceholders = [google_map_key: "AIzaSyB8o9KzQ5YN8U8AFSxbTJLheFiubF****"] } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' manifestPlaceholders = [google_map_key: "AIzaSyApLacqgkdIR7uEpcf7EDuGvsQlgh*****"] signingConfig signingConfigs.config }
      • 即使我像你说的那样为每个键添加调试 sha1 和发布 sha1 它也不起作用
      • 最好创建一个新的API密钥并尝试实现,我希望只有API密钥是解决方案
      【解决方案6】:

      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 开发者控制台并继续操作

      希望对你有帮助:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-30
        相关资源
        最近更新 更多