即使在 Flutter 中使用正确的 SHA1 密钥,Google 地图也无法在发布版本中工作

Posted

技术标签:

【中文标题】即使在 Flutter 中使用正确的 SHA1 密钥,Google 地图也无法在发布版本中工作【英文标题】:Google Maps not working in release build even with correct SHA1 key in Flutter 【发布时间】:2021-02-27 13:34:49 【问题描述】:

我正在使用 google_maps_flutter 1.0.6 插件在我的颤振应用中显示地图。该地图在调试版本中完美显示,但在发布版本中未显示。我在限制中输入了发布版本的 SHA1 密钥,并多次检查它是正确的。我也尝试过触发 onMapsCreated 方法。它在调试版本中触发,但它不在发布版本中运行。 有人可以解释我可以做些什么来使 Google 地图在发布版本中工作。

这里是关于我正在使用的 Flutter 版本的信息:

Flutter 1.22.3 • 通道稳定 • https://github.com/flutter/flutter.git

框架 • 修订版 8874f21e79(3 周前) • 2020-10-29 14:14:35 -0700

引擎 • 修订版 a1440ca392

工具• Dart 2.10.3

【问题讨论】:

IDE日志有错误吗? 不,IDE 日志中没有错误,但我发现了问题。我猜这与 Expanded 小部件有关。它在调试版本中运行良好,但在发布版本中运行良好。我会发布答案。 【参考方案1】:

就我而言,它与 SHA1 有关。

我按照本教程进行了生成密钥库的发布。

https://medium.com/@psyanite/how-to-sign-and-release-your-flutter-app-ed5e9531c2ac

一旦我在我的计算机中生成了.jks.keystore 文件。

我让 SHA1 运行 keytool -v -list -keystore nutella.jks

并将SHA1添加到https://console.cloud.google.com/google/maps-apis/credentials中的android密钥

然后我运行 flutter build apk --release,Google 地图在这个新 APK 中运行良好。


此外,如果它可以帮助任何人。这些是我项目中的一些配置:

dependencies:
  google_maps_flutter: ^1.1.1
    dependencies 
        classpath 'com.android.tools.build:gradle:3.6.3'
        classpath 'com.google.gms:google-services:4.3.10'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    
android 
    compileSdkVersion 30


    defaultConfig 
        minSdkVersion 18
        targetSdkVersion 30
        multiDexEnabled true
    

    buildTypes 
        release 
            signingConfig signingConfigs.release
            shrinkResources false
            minifyEnabled false
        
    
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip

【讨论】:

【参考方案2】:

问题出在小部件上,而不是 Maps API 和 SHA1 密钥。我用 Container 包装了 GoogleMap 小部件,然后用 Expanded 小部件包装了容器。这个小部件树在调试版本中运行良好,并在屏幕上显示地图,但在发布版本中不知何故它没有显示地图。

我刚刚删除了包装 GoogleMap 小部件的 Container 和 Expanded 小部件。它在发布版本中出人意料地发挥了作用。

【讨论】:

以上是关于即使在 Flutter 中使用正确的 SHA1 密钥,Google 地图也无法在发布版本中工作的主要内容,如果未能解决你的问题,请参考以下文章

flutter 获取 sha1

在flutter中使用高德地图

如何使用 Flutter 在 Firebase 中正确登录和注册?

Flutter Firebase 身份验证与 Google 应用程序崩溃

Flutter Web:保持用户登录/记住我功能的正确方法

MD5与SHA1 HASH这些东西,有啥相同点与不同点?