【问题标题】:Android: Google Maps Android API: Authorization failureAndroid:谷歌地图 Android API:授权失败
【发布时间】:2016-05-11 22:24:50
【问题描述】:

当我的应用尝试使用 Google Maps API 时,我在尝试访问 Google Map API 数据时立即收到以下 logcat 错误(向右滚动查看好东西!):

02-02 15:39:35.329 23868-24511/com.somepackage.name E/Google Maps Android API: Authorization failure.  Please see https://developers.google.com/maps/documentation/android/start for how to correctly set up the map.
02-02 15:39:35.339 23868-24511/com.somepackage.name E/Google Maps Android API: Ensure that the following correspond to what is in the API Console:
                                                                                            API Key: AI~~~~~~~~~~~~~~~~~~~~~~~~~~ZwmI​
                                                                                            Package Name: com.somepackage.name
                                                                                            Certificate Fingerprint: 50:~~~~~~~~~~~~~~~~~~~~:D5

这是带有指纹和 API 密钥的 Google Developers Support Console 的图像(是的,它们确实匹配!)。我还等待 Google 服务器更新(根据 dox 的说法是 5 分钟;我已经等了几个小时)。

这是我项目的主要 AndroidManifest.xml(为简洁而编辑):

<?xml version="1.0" encoding="utf-8"?>
...
<!--
 The following two permissions are not required to use
 Google Maps Android API v2, but are recommended.
-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<application
    ...
    <!--The key to use Google's map API -->
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="AIz~~~~~~~~~~~~~~~~~~~~~~~~~~~~wmI​"/>

    <activity
    ...
    </activity>
    ...
</application>

我有一个 Google 高级支持帐户,但目前无法联系到他们。有谁知道为什么我会收到此授权失败?

【问题讨论】:

  • 你是在手机上加载签名版的apk还是调试版?
  • 使用调试版。
  • 调试密钥库可以在 ~/.android/debug.keystore 找到,这是您使用的 SHA1 吗?
  • 您还需要将API密钥放在google_maps_api.xml中。
  • 与谷歌支持人员交谈后,他认为问题在于我们使用的是免费版本,然后开始使用高级版本而没有更新我们的代码(这需要一个全新的库)。一旦我知道这是否有效,将立即更新。

标签: android api google-maps key authorization


【解决方案1】:

几个小时后,我找到了答案以及一个非常重要的gotcha!

情况

我需要重新解释一下,因为我不知道哪些细节实际上最重要。

我继承了这个项目,所以它的历史是未知的。最初,该程序使用免费版的谷歌地图,效果很好。由于这是一家大公司,他们继续支付了完整的高级订阅服务。程序员添加了新库并进行了少量代码修改以使用这些库。

但他们仍然使用原始(免费)授权密钥。这导致 Google 的服务器继续将数据视为免费版本。

没有人注意到这一点,因为免费的 Goole Maps API 只有在一天内调用一定数量(2500 次?)后才会出现问题。我们的流量最近才变得足够高,足以成为一个问题。 (超过限制后,Google API 会发送错误消息而不是数据。)

因此,我所做的任何更改似乎都没有效果。并且更改代码中的密钥会导致身份验证错误(参见问题)。

解决方案

我必须使用新的高级库和控制台制作新的身份验证密钥。这改变了谷歌服务器,这当然会导致所有已经存在的应用程序版本停止运行!

放置在清单中的新身份验证密钥被 Google API 识别,一切正常,耶!但我们仍然需要在 Google 商店中发布新版本。

问题 #1

文档中列出的 AndroidManifest.xml 命令不起作用

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="AI............................mI​"/>

这是真正有效的正确名称:

    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="AI............................mI​" />

问题 #2

但是在测试的时候,我还是遇到了各种各样的错误。为什么?因为 android 设备维护着认证密钥的缓存。清除数据(或者更好的是卸载)清除了这些缓存。 现在一切正常,耶。

道德:在处理 API 密钥、身份验证、证书和任何类似的东西时,每次都卸载! :)

【讨论】:

  • 抓住了我。感谢您的帖子!
  • 第一个陷阱人...为什么 Google 仍然提供不起作用的模板?!
  • 老兄,你在头裂 1 天后救了我。
  • 超级老兄..第一个解决方案帮助了我
  • 你是救生员 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
相关资源
最近更新 更多