谷歌地图API密钥无法使用 V2

4

我有一个使用谷歌地图的安卓应用程序。 我按照说明进行操作并使用调试密钥使应用程序在调试模式下运行。 我已从此处找到的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

每当我通过在测试手机上从eclipse运行应用程序来使用系留调试时,地图都能正常显示(该手机运行android 2.3.6)。

然而,在完成应用程序后,在发布的应用程序中地图未能显示。只有灰色瓷砖可见。

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

因此,我创建了一个新的密钥(和一个带有新密钥的apk),并使用它从google控制台生成了一个新的API密钥。我删除了使用旧ApiKey生成的apk,并将新的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--谷歌使用了不同的方法使用片段。

  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”中的空格,尝试将其删除。 - Thibault D.
这是一个打字错误,现在已经被纠正了。 - tony9099
2个回答

8
您正在为Google Maps V2生成ApiKey,但是您正在使用v1 MapView com.google.android.maps.MapView。 在Android Maps V2 API中,密钥放置在清单上,并且您使用com.google.android.gms.maps.MapView显示地图,使用Google Play服务库。
我建议阅读这里的概述部分,以了解如何使用Google Play服务库设置项目,并查看新的API参考这里

1
仅适用于仍使用V1 ApiKey的旧应用程序。您正在使用v2 ApiKey,因此必须将代码更改为V2版本,包括正确的MapView / Markers / Overlays等。 - Marcelo
1
如果您使用发布密钥库生成了V1 ApiKey,则仍然可以使用该密钥运行旧代码。不幸的是,现在没有办法生成V1 ApiKey,因此如果您没有旧密钥,则需要更新代码。 - Marcelo

5
如果您正在开发Google Maps API,那么您需要拥有两个不同的地图API密钥。一个地图API密钥是通过使用您的调试密钥库中的SHA1指纹生成的,该地图API密钥用于在Eclipse中调试和运行应用程序时使用。另一个地图API密钥是通过使用来自官方或生产密钥库的SHA1指纹生成的,当您签名或发布您的应用程序时使用该地图API密钥。
我认为您遇到了密钥不匹配的问题,因为清单上的地图API密钥来自调试密钥库,而您已经使用官方密钥库对应用程序进行了签名。
此外,我认为您正在开发MapView。现在建议使用MapFragments。这里有一些链接可能会有所帮助。
快速入门指南:https://docs.google.com/document/d/1dFzZT0C782BxLkDIUEb711rmsbMmYPURFV_2Cdb36so/edit?usp=sharing 如果遇到MapFragment或Google Play服务库的问题,请参考以下解决方案:Unable instantiate android.gms.maps.MapFragment 此外,我在这里回答了关于如何/在声明Google Play服务组件时出错的问题,这可能会有所帮助。

“mismatch” 是什么意思?你能详细解释一下吗?如果可能的话,能给一个例子吗? - tony9099
1
@tony9099 当你直接从eclipse运行你的应用程序时,实际上你安装的是使用debug.keystore签名的apk包,由于你的应用程序使用了基于debug.keystore生成的SHA1的地图API密钥,所以它能够正常工作。现在,如果你要发布这个apk包,你需要使用自己的密钥库进行签名,但此时地图将不再显示,因为你的地图API密钥来自debug.keystore。因此,你需要使用自己的密钥库生成地图API密钥,并在发布或签署应用程序时使用该密钥。 - Ariel Magbanua
我更新了我的回答,并添加了额外的信息和链接。希望这能帮到你。 :) - Ariel Magbanua
感谢您的帖子,我忘记了一个生产/调试工具。 - Jacob Waller

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