Android:Google 地图 Android API:授权失败
Android: Google Maps Android API: Authorization failure
当我的应用程序尝试使用 Google 地图 API 时,我在尝试访问 Google 地图 [=30] 时收到以下 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 密钥(是的,它们确实匹配!)。我还等待 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 地图,效果很好。由于这是一家大公司,他们继续为全额高级订阅服务付费。程序员添加了新库并进行了一些代码修改以使用这些库。
但他们仍然使用原始的(免费的)授权密钥。这导致 Google 的服务器继续将数据视为免费版本。
没有人注意到这一点,因为免费的 Goole Maps API 仅在一天内调用 API 一些次数(2500?)后才会出现问题。我们的流量最近才变得足够高,以至于这成为一个问题。 (限制后,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
但是在测试的时候,还是报了各种错误。为什么?因为 android 设备维护身份验证密钥的缓存。清除数据(或者更好的做法是卸载)清除了这些缓存。 现在一切正常,耶。
道德:在处理 API 密钥、身份验证、证书和 任何东西 时,请务必卸载! :)
当我的应用程序尝试使用 Google 地图 API 时,我在尝试访问 Google 地图 [=30] 时收到以下 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 密钥(是的,它们确实匹配!)。我还等待 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 地图,效果很好。由于这是一家大公司,他们继续为全额高级订阅服务付费。程序员添加了新库并进行了一些代码修改以使用这些库。
但他们仍然使用原始的(免费的)授权密钥。这导致 Google 的服务器继续将数据视为免费版本。
没有人注意到这一点,因为免费的 Goole Maps API 仅在一天内调用 API 一些次数(2500?)后才会出现问题。我们的流量最近才变得足够高,以至于这成为一个问题。 (限制后,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
但是在测试的时候,还是报了各种错误。为什么?因为 android 设备维护身份验证密钥的缓存。清除数据(或者更好的做法是卸载)清除了这些缓存。 现在一切正常,耶。
道德:在处理 API 密钥、身份验证、证书和 任何东西 时,请务必卸载! :)