谷歌地图API V2 - 总是收到身份验证错误

3

我发现很多关于这个问题的问题 - 我自己几乎感到羞愧地提问。

但是无论我多么努力,我根本不能使Maps API正常运行

不管是在演示项目com.example.mapdemo中还是在我的自己的项目中。

我确定我的debug.keystore SHA1指纹已经注册了,现在为我的应用程序和com.example注册了 - 我也尝试了浏览器API密钥,每个人都说那也可以工作。

但是不行。

我总是得到:

06-16 11:21:29.860: E/Google Maps Android API(2382): Authorization failure.  Please see https://developers.google.com/maps/documentation/android/start for how to correctly set up the map.

我对此非常生气。怎么可能不完整地描述这个问题,以至于那些本来能够编写Android应用程序的人也无法理解和成功呢?
怎么会这样?
请问有人可以告诉我还有什么可能出错吗?
补充:我按照规格设置了一切,从debug.keystore中获得了我的密钥,在maps demo中尝试了com.example,使用我的应用程序包自己尝试了,但都不起作用。
另外,那个愚蠢的空窗口。这到底该怎么办…… :-(

抱歉,打错字了... :-) - Zordid
今天我遇到了同样的问题。我的应用程序中已经工作的地图没有显示出来,让我很担心。后来我发现是因为我的机器当前的SHA与开发者网站上的地图不一致,所以我把SHA改成了开发者网站上的SHA(可能是因为我更新了Android Studio,而SHA依赖于debug.keystore),这样问题就解决了。 - Nitesh
你是否仍然遇到了你在问题中提到的错误?因为这个问题是很久以前问的。 - Nitesh
7个回答

6

假设:

  • 您正在尝试在具有Google Play服务访问权限的设备上进行此操作
  • 您已将项目链接到Google Play服务库
  • 您已设置必要的权限如下:

清单中的代码片段:

<!-- Specify the correct minSDK and targetSDK versions. -->
<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<!-- Google Maps related permissions -->
<permission
    android:name="com.ecs.google.maps.v2.actionbarsherlock.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />

<uses-permission android:name="com.example.mapdemo.permission.MAPS_RECEIVE" />

<!-- Network connectivity permissions -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

<!-- Access Google based webservices -->
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

<!-- External storage for caching. -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<!-- My Location -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<!-- Maps API needs OpenGL ES 2.0. -->
<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />

您已经像这样设置了地图密钥:

输入图像描述

  • you have put the meta-data tag inside the application tag

    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="AIzaSyA_u1faIXRhx_Q7NafFbrhQJEerl6UUbPY" />
    
  • you made sure that you are building the APK with the correct keystore (corresponding to the one defined in the API console).

  • you removed and redeployed your application completely after checking / updating these steps you should be good to go.

根据我的经验,我能够按照Google Maps Android API v2 入门指南上的说明进行操作,但我记得在尝试 API 密钥/权限后必须 完全卸载并重新部署应用程序

您使用的是哪种设备?


是的,你所有的假设都是正确的。我在我的HTC One上尝试了它。真的不知道Google想要什么,以及那应该如何工作。甚至地图演示应用程序也无法工作,在那里我首先尝试了一些人谈论的“浏览器”密钥,然后尝试了我的自己的密钥。我从debug.keystore中获取了它,从Eclipse部署了应用程序。我已经完全删除了它好几次。没有机会。它根本不起作用。我想知道为什么Google会做出如此奇怪的事情!这条消息根本没有帮助。 - Zordid
2
我已经为此奋斗了好几天,多次尝试教程。最终解决方法竟然是将应用从手机上卸载,然后重新安装。当时我的表情... :) - telkins
1
@trevor-e 我也注意到有时需要重新安装应用程序(如我的答案中所述)。好像有时会缓存旧的或无效的 API 密钥,而简单的应用部署并不能刷新它。卸载和重新安装应用程序通常会有所帮助。 - ddewaele
我和ddewaele遇到了同样的问题。一切都是正确的,但我必须进入手机的应用程序管理器,先删除现有的安装。 - Allan

2

我也遇到了同样的问题,现在我知道导致这个问题的原因了(但是还没有解决方法)。

试着在除了你的HTC One手机之外的其他手机上运行你的应用程序。因为我在我的HTC One上遇到了这个问题,但是当我在我的S3上运行它时,它完美地运行。

请尝试并让我知道结果。

编辑

我解决了这个问题,但不确定确切的解决方法,以下是我所做的步骤: 1- 在手机设置中显示开发人员选项,在4.2操作系统中点击7次 2- 允许模拟位置 3- 在“选择调试应用程序”中选择我的应用程序 4- 卸载我的应用程序 5- 重新安装它 6- 运行它并等待30秒,然后地图就会显示出来。

希望这可以帮助你。


2

我曾经面临同样的问题,后来发现是自己犯了一个简单的错误,请检查您是否已在Google API控制台的服务类别中启用了“Google Maps Android API v2”。我曾经开错了API,导致它无法正常工作,但现在它可以了,希望这可以帮到你。 https://code.google.com/apis/console


2

我曾经也遇到过同样的问题,但是我只是从设置中卸载了这个应用,重新安装它,然后神奇地它就能正常工作了。


1
我曾经遇到同样的问题。在反复检查ddewaele的答案的步骤20次之后,在Google的API控制台中开启Maps V2 android,我重启了手机,等待约15秒以下载数据,现在一切都完美解决了。卸载应用程序并不能让它工作。这里留个信息给其他使用地图的开发者们。

0

我有同样的问题,花了两个星期才找到解决方案,最终我解决了。 只需从 res/values/google_maps_api.c 中删除 key 并替换为新的 key, 按照以下步骤,您将获得一个新的 key。

1> Find SHA1 by Using that command in command prompt:

keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

2> Get Package name from android manifest and use finger print of SHA1 for create an new api key 


3> copy created key and past it in res/values/google_maps_api.xml and also past in android manifest 

<string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">Paste Here New Api</string>
</resources>

<meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="Paste Key Here" />

0

我知道这是一个旧的帖子,但它在几个月前被编辑过,而我刚好遇到了同样的问题。由于我的问题版本有点不同,所以我会在这里添加一些内容。我已经检查过所有之前引用的条件都是正确的,但仍然出现相同的错误。

经过几个小时的随机尝试,我最终发现Android Studio的xml字符串翻译管理器创建了一个新的字符串,其标识符与Google API密钥相同(默认情况下存储在与其他字符串不同的xml文件中)。这个新的字符串资源确实是空的,并且与真正的密钥冲突。只需删除它即可解决问题。


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