繁体   English   中英

Android:Google Maps Android API:授权失败

[英]Android: Google Maps Android API: Authorization failure

当我的应用尝试使用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的高级支持帐户,但到目前为止无法与他们联系。 有谁知道为什么我会遇到此授权失败?

几个小时后,我想出了答案,还有一个非常重要的陷阱!

情况

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

我继承了这个项目,所以它的历史是未知的。 该程序最初使用的是Google Maps的免费版本,该版本运行良好。 由于这是一家大公司,因此他们继续为完整的高级订阅服务付费。 程序员添加了新的库,并对使用这些库的代码进行了一些修改。

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

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

因此,我所做的任何更改似乎都无效。 更改代码中的密钥会导致身份验证错误(请参阅相关问题)。

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

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

陷阱#1

文档DID NOT WORK中列出的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密钥,身份验证,证书和任何类似内容时,请每次卸载! :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM