Google Maps v2授权失败.不同的SHA1



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

谷歌地图API v2是启用和API密钥是否正确

我只是在"新项目"中选择了GoogleMapsActivity,然后创建了一个键。jks,创建sha1的keytool,创建公共api访问密钥,把我的api密钥在manifest.

我尝试:clean-rebuild-unistall app-install
多次更新API密钥
使用新密钥创建一个新项目。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

UPDATE:我在google dev. console和日志中有不同的SHA1指纹,如何处理?

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

从Android Studio调试/运行,你需要使用Android Studio用来签名apk的SHA1指纹。

请注意,您可以使用命令行获得这个SHA1指纹:

对于Mac或Linux:

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

keytool -list -v -keystore C:UserYourUser.androiddebug.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 Key中。

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

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

在manifest中添加以下内容:

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

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

最新更新