【问题标题】:Google Maps v2 Authorization failure. Different SHA1Google Maps v2 授权失败。不同的SHA1
【发布时间】:2015-07-27 14:57:11
【问题描述】:

我已经阅读了所有类似的问题,并做了其中描述的所有事情,但没有帮助。

Google Maps API v2 已启用且 API 密钥正确

我只是在“新建项目”中选择了 GoogleMapsActivity,然后创建了一个 key.jks,通过 keytool 创建了 sha1,创建了公共 api 访问密钥,将我的 API 密钥放入清单中。

我试过了: 清理重建卸载应用程序安装
多次更新 a​​pi 密钥
使用新的 key.jks 创建一个新项目(然后重新开始)
删除并创建 api 密钥

这是我的清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dandewine.user.thinkmobiletest" >

<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" />
<!--

不需要 ACCESS_COARSE/FINE_LOCATION 权限即可使用 Google Maps Android API v2,但推荐使用。 -->

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="AIza**************************" />

    <activity
        android:name=".ActivityMain"
        android:label="@string/title_activity_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

这是我的活动:

public class ActivityMain extends FragmentActivity implements OnMapReadyCallback {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_map);

    SupportMapFragment mapFragment = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}

@Override
public void onMapReady(GoogleMap googleMap) {
    googleMap.addMarker(new MarkerOptions()
            .position(new LatLng(0, 0))
            .title("Marker"));
}

Logcat:

E/Google Maps Android API﹕ Authorization failure.  Please see            https://developers.google.com/maps/documentation/android/start for how to correctly set up the map.
07-27 14:52:37.551  25002-25035/com.dandewine.user.thinkmobiletest 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: AIza****************************
Android Application (<cert_fingerprint>;<package_name>): 8C:2B:4C:F7:CF:FB:EC:D5:DC:D7:D0:5D:6E:30:49:74:97:18:57:88;com.dandewine.user.thinkmobiletest

更新:我在 google dev 中有不同的 SHA1 指纹。控制台和日志中,如何处理?

任何人都可以提供建议。

【问题讨论】:

  • 你有什么异常吗?
  • @Aakash 哦,是的,抱歉忘记发帖,看看更新
  • 您的指纹/包裹是否与您的日志中显示的完全相同?此外,您不应发布您的 API 密钥或完整指纹。
  • @DanielNugent,谢谢!错了,SHA1 指纹不一样,但我不知道哪里出错了
  • @DanielNugent,你能告诉我应该用不同的 sha1 做什么,从哪里 IDE 会过时 sha1

标签: android google-maps


【解决方案1】:

听起来您正在使用密钥库中的 SHA1 指纹来生成签名的 apk。

为了从 Android Studio 调试/运行,您需要使用 Android Studio 用来签署 apk 的 SHA1 指纹。

请注意,您可以使用命令行获取此 SHA1 指纹:

对于 Mac 或 Linux:

keytool -list -v -keystore ~/.android/debug.keystore

对于 Windows:

keytool -list -v -keystore C:\User\YourUser\.android\debug.keystore

使用密码“android”。

但是,由于您的日志中已经有了正确的值, 只需从您的日志中复制此内容(我在此处对其进行了修改,请勿从此处复制):

8C:2B:4C:F7:CF:FB:EC:D5:DC:D7:D0:5D:6E:30:49:xx:xx:xx:xx:xx;com.dandewine.user.thinkmobiletest

然后将其粘贴到开发者控制台中的 API 密钥中。

您可以为每个 API 密钥添加多个指纹/包值,每行一个(您也可以在编辑 API 密钥时的说明中看到这一点)。

您还可以为调试和发布配置不同的 API 密钥,如果您这样做,请查看 this answer

【讨论】:

  • 现在 sha1 是相同的(api 密钥也是)但应用程序仍然崩溃
  • @DenisZinkovskiy 你的日志现在有什么错误?
  • @原来一样,现在没关系了。谢谢丹尼尔,你的时间,你的回答对我很有帮助。
【解决方案2】:

在清单中添加以下内容:

<permission
    android:name="com.dandewine.user.thinkmobiletest.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="com.tp.lib.tp.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

还有:

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

【讨论】:

  • 你在哪里尝试?模拟器还是设备?我用的是bluestacks模拟器,但是没有出现地图,建议你使用设备
  • 我没有安卓设备,我用模拟器genymotion,我移植了谷歌播放服务。 SHA1 指纹不同
  • 最好在设备中尝试
【解决方案3】:

检查您是否在调试和发布模式中包含了您的签名密钥,请阅读:http://developer.android.com/tools/publishing/app-signing.html#cert

【讨论】:

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