安卓:谷歌地图安卓API:授权失败

3
当我的应用程序尝试使用Google Maps API时,只要我尝试访问Google地图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

这是 Google 开发者支持控制台的指纹和 API 密钥截图(是的,它们匹配!)。我已经等待了谷歌服务器更新(根据文档需要等待 5 分钟,但我已经等了几个小时)。

enter image description here

以下是我项目的主要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>

我在谷歌拥有高级支持账户,但一直无法联系他们。有人知道为什么会出现授权失败的情况吗?


你是在手机上加载已签名的apk版本还是调试版本? - gareoke
使用调试版本。 - SMBiggs
调试密钥库可以在~/.android/debug.keystore找到,这是您正在使用的SHA1吗? - gareoke
您还需要将API密钥放入“google_maps_api.xml”文件中。 - gerardnimo
在与谷歌支持人员交谈后,他认为问题在于我们一开始使用的是免费版本,然后开始使用高级版本,但没有更新我们的代码(这需要一个全新的库)。如果这个方法有效,我会尽快更新。 - SMBiggs
在某些情况下,问题可能是Google控制台上的SHA:https://dev59.com/questions/go3da4cB1Zd3GeqP0HNr - HotFudgeSunday
1个回答

10

经过多个小时的努力,我终于找到了答案,还发现了一个非常重要的问题。

情况

我需要重新解释一些细节,因为我不知道其中一些细节实际上是至关重要的。

这个项目是我接手的,所以它的历史是未知的。最初,该程序使用了 Google Maps 的免费版本,运行良好。由于这是一家大型公司,他们选择了付费使用全套订阅服务。程序员添加了新库并进行了少量代码修改,以使用这些库。

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

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

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

解决方案

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

在清单中放置新的身份验证密钥后,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

但是在测试时,我仍然遇到了各种错误。为什么?因为安卓设备会维护认证密钥的缓存。清除数据(或者更好的方法是卸载应用)可以清空这些缓存。现在一切都正常啦。

教训:当处理 API 密钥、认证、证书和 任何 类似的内容时,每一次都要卸载应用程序! :)


3
收到,Gotcha 1 让我上了当。谢谢你的帖子! - eGlu
1
第一个问题是...为什么谷歌还在提供一个不起作用的模板?! - Nadav96
1
兄弟,你救了我!我已经苦思冥想了一整天。 - Kartiikeya
超级棒..第一个解决方案帮了我。 - Venki WAR
1
你真是个救命恩人 :) - Stavro Xhardha
1
哇,我在2.5年前发布了这个帖子,Google仍然没有修复他们的文档!我很惊讶这个答案仍然相关。 - SMBiggs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接