适用于 Android 的 Android 地图 SDK 在发行版中不工作

Posted

技术标签:

【中文标题】适用于 Android 的 Android 地图 SDK 在发行版中不工作【英文标题】:Android Maps SDK for Android Not Working in Release 【发布时间】:2021-09-16 10:34:20 【问题描述】:

我的 android 应用已经在 Play 商店上架了几年。我最近为其添加了 Google 地图功能。

如果我不限制应用程序,则映射 sdk 和活动可以正常工作。我将 Google Cloud Platform (console.cloud.google.com) 生成的 API Key 放入我的应用中,一切正常。

但将此密钥仅限于我的应用程序似乎是合理的。这需要为您的应用生成 SHA-1 证书并将其与您的包名称一起保存到 Google Cloud Platform。

在 Android Studio 终端窗口中,我执行以下命令:

keytool -list -v -keystore your_keystore_name -alias your_alias_name

使用我的 build.gradle (app) 文件中指定的“your_keystore_name”。

奇怪的是,无论我是否指定“-alias your_alias_name”,它似乎都会生成相同的 SHA-1 证书。这听起来对吗?

回到谷歌云平台,我点击Restrict to Android App并添加SHA-1和我的包名,然后点击保存。

当我以这种方式进行限制时,我的应用程序上的地图视图将停止工作并显示空白/灰色屏幕。当我解除限制后,它又开始工作了。

AndroidManifest.xml

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

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

    <application
        ...>

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="@string/google_maps_key" />

build.gradle(应用程序)

apply plugin: 'com.android.application'

android 
    signingConfigs 
        debug 
            storeFile file(var)
            storePassword '...'
            keyAlias = '...'
            keyPassword '...'
        
        release 
            storeFile file(var)
            storePassword '...'
            keyAlias = '...'
            keyPassword '...'
        
    
dependencies 
    :    :
    implementation 'com.google.android.gms:play-services-location:18.0.0'
    implementation 'androidx.navigation:navigation-fragment:2.3.5'
    implementation 'androidx.navigation:navigation-ui:2.3.5'
    implementation 'com.google.android.gms:play-services-maps:17.0.1'
    :    :

activity_maps.xml

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_
    android:layout_
    tools:context=".MapsActivity" />

【问题讨论】:

【参考方案1】:

我与 Google Cloud Platform 支持部门就这个问题合作了几天。在与一个低级别的支持人员毫无进展后,我要求升级。这很快就完成了,没有消极情绪。 Google 支持万岁。

升级级别支持很快解决了这个问题。我最初(2 年前)使用“Google Play 应用签名”在 Play 商店中设置了我的应用。

因此,如果您使用 Google Play 应用签名进行发布,您可以从 Google Play 控制台的发布 > 设置 > 应用完整性 页面获取您的 SHA-1。不是通过执行 keytool... 命令。

一旦我将此 SHA-1 应用于我在 Google Cloud Platform 上的应用程序限制,一切正常。

【讨论】:

以上是关于适用于 Android 的 Android 地图 SDK 在发行版中不工作的主要内容,如果未能解决你的问题,请参考以下文章

如何使用适用于 Android V2 的 Google Maps 处理地图移动端?

适用于 Android 的 Google 地图我的位置自定义按钮

适用于 android 的 Google 地图和 Places SDK 在发行版 APK 中不工作

Phonegap/Cordova Geolocation 不适用于 Android 4.0+,但适用于所有其他平台

电容器 - 地理定位不适用于 iOS,但适用于 Android

google 的 Map SDK 计费如何适用于 Android 和 iOS 应用程序?