谷歌地图v2:授权失败

时间:2013-06-19 06:55:37

标签: android google-maps-android-api-2

授权失败。有关如何正确设置地图的信息,请参阅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 API控制台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密钥和证书指纹与Google服务器不对应。但就像我上面写的那样,那些值确实匹配......

10 个答案:

答案 0 :(得分:78)

Google Maps Android API v2中激活Google API's console服务。此外,在进行更改后,请在设备/模拟器上完全重新安装应用程序。

答案 1 :(得分:10)

对我来说,帮助一下,如果简单: 当您在Android Studio中工作时,您可以在文件google_maps_api.xml中编写Google API密钥,但Android Studio仅在Project Manager中显示(调试)版本的密钥文件。您需要将密钥放在

  

\应用\ SRC \释放\水库\值\ google_maps_api.xml

文件(就像你把钥匙放在

中一样)
  

\应用\ SRC \调试\ RES \值\ google_maps_api.xml

答案 2 :(得分:8)

设置API密钥时,软件包名称是packagemanifest属性的值,而不是应用程序名称。

这(com.foo):

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.foo"

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

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

答案 3 :(得分:4)

我遇到了同样的问题,但是已经激活了正确的api。问题是我在获取SHA1时使用了错误的密钥库文件。我使用了发布密钥库,而不是我需要使用:

keytool -list -v -keystore debug.keystore

在这个文件上(mac osX位置):

~/.android/debug.keystore

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

答案 4 :(得分:3)

确保以下事项:

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或模拟器运行App,通过创建运行到真实设备     不使用eclipse的apk不会使用不正确的调试密钥。

VkJ

答案 5 :(得分:2)

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

答案 6 :(得分:1)

除了我的观察之外,我没有这方面的证据,但看起来API API在设置后可能需要几分钟才能激活。

有点耐心似乎对我有用!

答案 7 :(得分:1)

要弄清楚。如果在android sdk上调试您的应用时,地图活动未显示任何错误,但在您安装apk时却未显示任何错误并给出此错误:

  
    

07-02 03:18:36.467 25914-26028 /? E / Google Maps Android API:授权失败。请参阅     https://developers.google.com/maps/documentation/android-api/start的     如何正确设置地图。 07-02 03:18:36.470 25914-26028 /?     E / Google Maps Android API:在Google Developer Console中     (https://console.developers.google.com)         确保已启用“ Google Maps Android API v2”。         确保存在以下Android密钥:           API密钥:YOUR_KEY_HERE           Android应用程序(;):

  

解决方案将是: 将密钥放在:\ app \ src \ release \ res \ values \ google_maps_api.xml

您在以下位置的\ p \ src \ debug \ res \ values \ google_maps_api.xml

here

答案 8 :(得分:1)

如果您选择了制作API密钥的快速途径,请检查自动创建的软件包名称。我的软件包名称后附加了.function,这似乎是问题所在。 https://console.developers.google.com/apis/credentials/

答案 9 :(得分:1)

我在寻求解决方案后与他们取得了票证,我从Google Map支持团队得到了这个答案:

  1. 生成释放密钥,您可以在此处Google Cloud Console
  2. 中找到详细的操作方法。
  3. 将您的应用上传到Google Play(签名的APK文件)。
  4. 提交应用后,请从Google Play控制台中选择您的应用。
  5. 转到开发工具->版本管理->应用签名。
  6. 复制上传应用后Google Play颁发的SHA-1证书。
  7. 转到Google控制台并选择您的项目。
  8. 选择您的API密钥,限制您的密钥,并在软件包名称后粘贴SHA-1。
  9. 按保存。