谷歌地图 V2:授权失败

34

授权失败。请查看https://developers.google.com/maps/documentation/android/start了解如何正确设置地图。

确保以下内容与API控制台中的内容相对应:包名:com.company.app,API密钥:AIzaSyC***OsTeo,证书指纹:4E5285***6BF53ED3 无法联系Google服务器。当连接建立时将尝试另一个尝试。

加载地图失败。错误联系Google服务器。这可能是身份验证问题(但也可能是由于网络错误)。


我知道有关此主题的问题已经足够多了。 但我似乎无法让地图视图正常工作。结果是一个空的地图视图(带有缩放按钮)。

我做了什么:
- 下载/安装google-play-services
- 将google-play-services.jar添加到libs/
- 在code.google.com/apis/console中启用Google Maps API v2
- 设置正确的权限

这是我的清单文件的样子:

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<permission
    android:name="com.company.app.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />

<uses-permission android:name="com.company.app.permission.MAPS_RECEIVE" />

<application ...>
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="AIzaSyC***OsTeo" />
</application>

Google APIs控制台API访问看起来像这样:

Key for Android apps (with certificates)
API key:        AIzaSyC***OsTeo
Android apps:   4E:52:85:***6B:F5:3E:D3;com.company.app
Activated on:   Jun 18, 2013 11:07 PM
Activated by:   my@email.com – you

以下是一些代码(我不明白为什么会导致授权错误):

FragmentManager fragmentManager = super.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
SupportMapFragment fragment = new SupportMapFragment();
fragmentTransaction.replace(R.id.mapContainer, fragment);
fragmentTransaction.commit();

你可以看到我收到了一个错误,说包名、API密钥和证书指纹与谷歌服务器不对应。但正如我上面写的那样,这些值是匹配的...


2
你应该激活Google Maps Android API v2吗?您可能需要从设备/模拟器中删除该应用程序,清理项目并重新安装它。 - user
你在API控制台中启用了Android的Google地图,并且你是如何引用库项目的? - Raghunandan
@Luksprog:该死,太明显了。我只启用了 Google Maps API v2 而没有启用 Google Maps Android API v2。现在它完美地工作了。谢谢!(你能把你的评论粘贴成答案吗?这样我就可以接受它了吗?) - basvk
10个回答

84

Google API 控制台 中激活 Google Maps Android API v2 服务。同时,在更改后,对设备/模拟器进行完全重新安装。


45
需要注意的重要事项是,在重新构建后,务必在设备上进行干净安装。 - Robot
3
非常感谢 @Robot ... 我花了数小时来解决这个问题,从未想过解决方案会这么简单! - Zeba
非常感谢...我一直在苦苦思索我的API密钥有问题,后来发现了你的。 - arshad kr
7
这是我第二次遇到这个问题,也是我第二次感到困惑。当你觉得你已经做了一切...记得重新安装应用程序! - nana
我不得不多次卸载并重新安装才能使其生效。 - IgorGanapolsky
1
这是一个很好的观点,大多数在线教程都教授如何生成密钥,但没有一个指定您还必须启用此服务(默认情况下未启用且没有任何通知)。 - Murtuza Kabul

15

如果你需要帮助,这里提供一个简单的方法:

当你使用Android Studio工作时,你会在文件google_maps_api.xml中编写你的Google API密钥。但是,Android Studio只在Project Manager中显示(debug)版本的关键文件。因此,你需要将你的密钥放置在

\app\src\release\res\values\google_maps_api.xml

文件中(就像你在

\app\src\debug\res\values\google_maps_api.xml

中放置密钥一样)。


我花了很多时间才弄清楚google_maps_api.xml只在debug文件夹中! - Swati Pardeshi

9
当您设置API密钥时,包名称是您manifestpackage属性的值,而不是应用程序名称。
这是一个例子(com.foo):
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.foo"

不是这个 (com.foo.MyApplication):

<application
    android:name="com.foo.MyApplication"

5
我遇到了同样的问题,但我已经激活了正确的API。问题在于在获取SHA1时,我使用了错误的密钥库文件。我使用了发布密钥库,而实际上我需要使用:
keytool -list -v -keystore debug.keystore

在这个文件中(Mac OS X位置):

~/.android/debug.keystore

这给了我另一个SHA1值,我在谷歌控制台中输入它,现在它可以工作了。


5
请确保您在Google开发者控制台/凭据/包名中正确输入了包名。它必须是您应用程序的顶级包名,例如com.company.appname,而不是com.company.appname.ui.activity.maps。我按照https://developers.google.com/maps/documentation/android/start的说明进行操作,但在嵌套包中创建了Activity。Google网页输入了嵌套包名,导致我遇到了这个错误。

4
确保以下事项:

https://code.google.com/apis/console/?noredirect
Click on Services(Left side panel) -> Enable Google Maps Android API v2

为了获得您的SHA1密钥,您可以使用以下命令:这个命令将生成密钥库。
keytool -genkey -v -keystore GoogleMapV2.keystore -alias GoogleMapV2 -keyalg RSA -    keysize 2048 -validity 10000

这个命令会提供SHA1密钥和其他信息。
keytool -list -v -keystore ~/path/to/GoogleMapV2.keystore -alias GoogleMapV2 -storepass any-password -keypass any-password i.e :

68:1C:74:24:7B:1F:9C:71:76:DD:69:4F:F2:8F

:您的密钥位于<application> </application>标签内

<meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="YOUR KEY" />
<meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

在顶部,<application> </application>标签之外的权限。
<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <!--
     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" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

注意: 不要使用Eclipse或模拟器运行应用程序,通过创建apk并在真实设备上运行,而不是使用Eclipse,否则会使用错误的调试密钥。
VkJ

2
让它清楚明白。如果在Android SDK上调试应用程序时,地图活动没有显示错误,但在安装apk时什么也没有显示并出现了以下错误:
07-02 03:18:36.467 25914-26028/? E/Google Maps Android API: Authorization failure. Please see https://developers.google.com/maps/documentation/android-api/start for how to correctly set up the map. 07-02 03:18:36.470 25914-26028/? E/Google Maps Android API: In the Google Developer Console (https://console.developers.google.com) Ensure that the "Google Maps Android API v2" is enabled. Ensure that the following Android Key exists: API Key: YOUR_KEY_HERE Android Application (;):
解决方案是:将您的密钥放置在:\app\src\release\res\values\google_maps_api.xml中,就像在\app\src\debug\res\values\google_maps_api.xml中所做的一样。
如下所述:这里

2

除了我的观察结果以外,我没有其他证据,但是看起来API密钥设置完成后可能需要几分钟才能生效。

稍微耐心一点似乎对我有用!


1
我向Google地图支持团队提出了问题后,他们给了我以下答复:
  1. 生成发布密钥,您可以在这里找到详细的操作步骤 Google Cloud Console
  2. 将您的应用上传到Google Play(已签名的APK文件)。
  3. 应用提交后,在Google Play Console中选择您的应用。
  4. 转到“开发工具”->“发布管理”->“应用签名”。
  5. 复制Google Play上传应用后颁发的SHA-1证书。
  6. 进入Google控制台并选择您的项目。
  7. 选择您的API密钥,限制您的密钥,并在包名称后粘贴SHA-1。
  8. 点击保存。

1

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