【问题标题】:google maps api key not working v2谷歌地图 api 密钥不起作用 v2
【发布时间】:2013-02-23 13:47:16
【问题描述】:

我有一个使用谷歌地图的安卓应用程序。 我已按照说明使用调试键使应用程序在调试模式下工作。 我已从此处找到的 debug.keystore 检索到我的 SHA-1 密钥。

c:\Users\myself\.android\debug.keystore

使用

c:\Program Files\Java\jdk1.7.0_03\bin>keytool -list -v -keystore c:\debug.keystore

每当我通过在我的测试手机(运行 android 2.3.6)上运行 eclipse 中的应用程序使用系留调试时,地图显示良好。

但是,完成应用程序后,在已发布的应用程序中地图没有显示。可见的只有灰色瓷砖。

我知道这是 API 密钥的问题。

所以我创建了一个新密钥,(以及一个带有它的 apk)用它从谷歌的控制台生成一个新的 API 密钥。我删除了使用密钥生成的 apk,因为它有旧的 ApiKey,并在此处粘贴了新的 api 密钥。

<com.google.android.maps.MapView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:id="@+id/mymap"
android:apiKey="my_api_key"

然后我重新导出了我的项目,但这次使用的密钥与我之前创建的步骤相同,因为它们包含相同的 SHA-1。

但是,地图仍然没有显示,只出现灰色瓷砖。 我通过以下方式在 api 控制台中输入了我的 SHA-1 密钥。

18:3E:1D:8C:xx:xx:xx:xx:xx:xx:xx:xx:xx:x:xx:1D:E1:08:32:8E;com.mycompany.mapapp

我尝试恢复到我的调试密钥,但这次调试应用程序(从 eclipse 运行)也没有显示任何地图。

我的问题如下。

  1. 这仍然是正确的使用方法吗?因为在 --https://developers.google.com/maps/documentation/android/start#obtaining_an_api_key -- google 使用了不同的方法来使用片段。

  2. 我错过了什么?

  3. 此方法是否已弃用或应该有效?

【问题讨论】:

  • 向我们展示您的 AndroidManifest。我也想知道 "18:3E:1D:8C:xx:xx:xx:xx:xx:xx:xx:xx:xx:x:xx:1D:E1:08:32:8E; com 中的空间.mycompany.mapapp",尝试删除它。
  • 输入错误。现已更正。

标签: android eclipse google-maps


【解决方案1】:

您正在为 Google Maps V2 生成 ApiKey,但您使用的是 v1 MapView com.google.android.maps.MapView。 在 Android Maps V2 API 上,密钥放置在清单中,您可以使用 com.google.android.gms.maps.MapView 显示地图,使用 Google Play 服务库。

我建议阅读概述部分 here 以了解如何使用 Google Play 服务库设置您的项目,并查看新的 API 参考 here

【讨论】:

  • 仅适用于仍使用 V1 ApiKey 的旧应用程序。您使用的是 v2 ApiKey,因此您必须将代码更改为 V2 版本,包括正确的 MapView/Markers/Overlays/等。
  • 如果您使用发布密钥库生成了 V1 ApiKey,您仍然可以将旧代码与该密钥一起使用。不幸的是,现在无法生成 V1 ApiKey,所以如果您没有旧密钥,则需要更新代码
【解决方案2】:

如果您正在开发 google maps api。您需要有两组地图 api 密钥。使用调试密钥库中的 SHA1 指纹生成的一个映射 api 密钥,当您在 eclipse 中调试应用程序并从那里运行它时,将使用此映射 api 密钥。另一个地图 api 密钥是使用您在官方或生产密钥库中的 SHA1 指纹生成的,此地图 api 密钥用于您签署或发布您的应用程序。

我认为您的密钥不匹配,因为清单上的 map api 密钥来自调试密钥库,并且您已使用官方密钥库签署了您的应用程序。

我还认为您正在开发 MapView。现在建议现在使用 MapFragments。我这里有一些链接可能会对你有所帮助。

快速入门指南:https://docs.google.com/document/d/1dFzZT0C782BxLkDIUEb711rmsbMmYPURFV_2Cdb36so/edit?usp=sharing

如果您遇到 MapFragment 或 Google Play 服务库的问题,请排查问题: Unable instantiate android.gms.maps.MapFragment

我在How to/Error in declaring google-play-services-component 中也有可能对您有所帮助的答案。

【讨论】:

  • “不匹配”是什么意思?你能详细说明一下吗?如果可能的话,举个例子?
  • @tony9099 当你直接从 eclipse 运行你的应用程序时,你基本上是在安装用你的 debug.keystore 签名的 apk,现在因为你的应用程序正在使用你的 debug.keystore 的 SHA1 生成的 map api 密钥,它会工作正常。现在,如果您正在发布您使用自己的密钥库对其进行签名的 apk,则地图现在不会显示,因为您的地图 api 密钥来自 debug.keystore。您必须使用您自己的密钥库中的 SHA1 指纹生成地图 API 密钥,并在发布或签署您的应用程序时使用该地图 API 密钥。
  • 我用其他信息和链接更新了我的答案。我希望这会对你有所帮助。 :)
  • 感谢我忘记了生产/调试的帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多