【问题标题】:Google Play Services and version 2 of the Google Maps Android API, Authorization failureGoogle Play 服务和第 2 版 Google Maps Android API,授权失败
【发布时间】:2013-03-17 13:36:40
【问题描述】:

我正在尝试使用 Google Play 服务(第 5 版)和第 2 版 Google Maps Android API 构建 Android 应用程序。

我仔细阅读了以下文件:

http://developer.android.com/google/play-services/maps.html https://developers.google.com/maps/documentation/android/start#installing_the_google_maps_android_v2_api

为了确定,我刚刚从以下位置复制了示例应用程序: ~/android-sdk-linux/extras/google/google_play_services/samples

在这段代码中,我只是更改了清单中的 developerper 密钥和 targetSdkVersion (16 -> 17):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mapdemo"
    android:versionCode="2"
    android:versionName="2.1.0" >

<permission
    android:name="com.example.mapdemo.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />

<uses-permission android:name="com.example.mapdemo.permission.MAPS_RECEIVE" />
<!-- Copied from Google Maps Library/AndroidManifest.xml. -->
<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<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" />
<!-- Maps API needs OpenGL ES 2.0. -->
<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />
<!-- End of copy. -->
<application
    android:hardwareAccelerated="true"
    android:allowBackup="false"
    android:icon="@drawable/ic_launcher"
    android:label="@string/demo_title" >
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="XXXXXXXXXXXmyXkeyXXXXXXXXXXXXX" />

    <activity android:name=".MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".BasicMapActivity"
        android:label="@string/basic_map" />
    <activity
        android:name=".CameraDemoActivity"
        android:label="@string/camera_demo" />
    <activity
        android:name=".CircleDemoActivity"
        android:label="@string/circle_demo" />
    <activity
        android:name=".EventsDemoActivity"
        android:label="@string/events_demo" />
    <activity
        android:name=".GroundOverlayDemoActivity"
        android:label="@string/groundoverlay_demo" />
    <activity
        android:name=".LayersDemoActivity"
        android:label="@string/layers_demo" />
    <activity
        android:name=".LocationSourceDemoActivity"
        android:label="@string/locationsource_demo" />
    <activity
        android:name=".MarkerDemoActivity"
        android:label="@string/marker_demo" />
    <activity
        android:name=".OptionsDemoActivity"
        android:label="@string/options_demo" />
    <activity
        android:name=".PolygonDemoActivity"
        android:label="@string/polygon_demo" />
    <activity
        android:name=".PolylineDemoActivity"
        android:label="@string/polyline_demo" />
    <activity
        android:name=".ProgrammaticDemoActivity"
        android:label="@string/programmatic_demo" />
    <activity
        android:name=".TileOverlayDemoActivity"
        android:label="@string/tile_overlay_demo" />
    <activity
        android:name=".UiSettingsDemoActivity"
        android:label="@string/uisettings_demo" />
    <activity
        android:name=".RawMapViewDemoActivity"
        android:label="@string/raw_mapview_demo" />
    <activity
        android:name=".RetainMapActivity"
        android:label="@string/retain_map" />
    <activity
        android:name=".MultiMapDemoActivity"
        android:label="@string/multi_map_demo" />
</application>

在项目属性中正确设置了 Google Play 库项目。

我没有修改 proguard.cfg 标准文件。

在装有 android 4.1.2 的 Motorola Xoom 上启动“Google Maps API Demos”,然后单击“Basic Map”,会返回一个没有任何地图的空白屏幕。

我的 logcat 包含:

03-17 14:07:13.450: E/Google Maps Android API(17988): Authorization failure.

在我的 API 控制台中,“Google Maps Android API v2”已打开。

我为 Android 应用创建了一个密钥,我的控制台显示:

Key for Android apps (with certificates)
API key:    XXXXXXXXXXXmyXkeyXXXXXXXXXXXXX
Android apps:   XXXXXXXXXXXmyXSHA1XXXXXXXXXXXXX;com.example.mapdemo
Activated on:   Mar 17, 2013 4:28 AM
Activated by:    you

你明白哪里错了吗?

【问题讨论】:

  • 您是否检查了您允许的服务?转到服务并查看是否检查了 Google maps API v2 和其他几个。如果现在,请检查它们。
  • 在 Google Play Services API 控制台中,当您添加密钥的哈希时,您是否使用了正确的包名称? (那里的包名称必须与您尝试运行的应用程序的包名称匹配。)

标签: android google-maps


【解决方案1】:

我找到了答案:如果我以签名的 apk 导出我的应用程序,将其推送到平板电脑并安装它,我就能正确地看到地图。感谢您的回答。

要调试应用程序,您需要使用调试证书指纹生成密钥,如下所述: https://developers.google.com/maps/documentation/android/start#displaying_certificate_information

【讨论】:

    【解决方案2】:

    我刚遇到这个问题,已发布here。为了能够从 IDE 启动,请将调试/开发 SHA1 指纹与您从自己的密钥库创建的生产指纹一起添加到 API 控制台。

    只需从命令行keytool -list -v -keystore &lt;keystoreName&gt;.keystore 运行debug.keystore(在~/.android 目录中)和&lt;yourKeystore&gt;.keystore(在您签署.apks 时使用)

    这将为您提供两个 SHA1 指纹,将它们都添加到 Google Cloud Console 中的 Google Maps Android API v2,现在您有一个用于开发,一个用于实时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-21
      • 2023-03-25
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 2018-09-03
      相关资源
      最近更新 更多