[英]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中发布新版本。
文档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" />
但是在测试时,我仍然遇到各种错误。 为什么? 因为android设备会维护身份验证密钥的缓存。 清除数据(或者最好是卸载)会清除这些缓存。 现在一切正常,是的。
道德:处理API密钥,身份验证,证书和任何类似内容时,请每次卸载! :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.