Flutter集成Google Maps与Firebase遇SecurityException问题求助
解决Flutter集成Google Maps与Firebase时的SecurityException错误
使用Flutter 3.27.1、Java 17开发项目,集成Google Maps与Firebase时遇到如下错误:
E/GoogleApiManager( 9509): Failed to get service from broker. E/GoogleApiManager( 9509): java.lang.SecurityException: Unknown calling package name 'com.google.android.gms'. E/GoogleApiManager( 9509): at android.os.Parcel.createExceptionOrNull(Parcel.java:3011) E/GoogleApiManager( 9509): at android.os.Parcel.createException(Parcel.java:2995) E/GoogleApiManager( 9509): at android.os.Parcel.readException(Parcel.java:2978) E/GoogleApiManager( 9509): at android.os.Parcel.readException(Parcel.java:2920) E/GoogleApiManager( 9509): at apef.a(:com.google.android.gms@245034029@24.50.34 (190400-713002902):36) E/GoogleApiManager( 9509): at apcm.z(:com.google.android.gms@245034029@24.50.34 (190400-713002902):143) E/GoogleApiManager( 9509): at aokj.run(:com.google.android.gms@245034029@24.50.34 (190400-713002902):54) E/GoogleApiManager( 9509): at android.os.Handler.handleCallback(Handler.java:942) E/GoogleApiManager( 9509): at android.os.Handler.dispatchMessage(Handler.java:99) E/GoogleApiManager( 9509): at bvmf.my(:com.google.android.gms@245034029@24.50.34 (190400-713002902):1) E/GoogleApiManager( 9509): at bvmf.dispatchMessage(:com.google.android.gms@245034029@24.50.34 (190400-713002902):5) E/GoogleApiManager( 9509): at android.os.Looper.loopOnce(Looper.java:201) E/GoogleApiManager( 9509): at android.os.Looper.loop(Looper.java:288) E/GoogleApiManager( 9509): at android.os.HandlerThread.run(HandlerThread.java:67)
已尝试的方案:
- 生成新的Google Maps API密钥并更新至AndroidManifest.xml文件
- 通过Android Studio SDK管理器安装Google Repository和Google Play Services
可行解决思路
1. 对齐Google Play Services版本
- 在
android/app/build.gradle中指定com.google.android.gms:play-services-maps的具体版本,避免自动适配引发的版本冲突,比如:implementation 'com.google.android.gms:play-services-maps:18.2.0' - 若用模拟器,切换到带Google Play标识的系统镜像,确保镜像内置的Google Play Services为最新版。
2. 校验Firebase配置
- 确认
google-services.json文件正确放在android/app目录下,且文件内的包名与项目applicationId完全一致。 - 登录Firebase控制台,检查是否已为当前项目启用Maps SDK for Android,且API密钥已关联到该项目。
3. 检查AndroidManifest.xml配置细节
- 确保API密钥的meta-data标签在
application标签内部,格式正确:<meta-data android:name="com.google.android.geo.API_KEY" android:value="你的API密钥"/> - 登录Google Cloud控制台,检查API密钥的限制条件,确认当前应用的包名、SHA-1指纹已被添加到允许列表中。
4. 清理缓存后重新构建
- 执行
flutter clean清理Flutter缓存,删除android/.gradle目录,再依次运行flutter pub get和flutter run。 - 在Android Studio中执行
File > Invalidate Caches... > Invalidate and Restart,清除IDE缓存后重新编译项目。
5. 检查设备端Google Play Services状态
- 真机上进入
设置 > 应用 > Google Play Services,检查是否有更新提示,确保升级到最新版本。 - 若设备无法更新服务,更换其他测试设备或模拟器重试。
内容的提问来源于stack exchange,提问作者Karthikeyan L
相关产品推荐
相关产品推荐

