Flutter Firebase Messaging权限AssertionError报错排查求助
Firebase Messaging AssertionError问题分析
问题描述
已按官方文档配置Firebase及通知权限:在main函数初始化Firebase并请求Firebase Messaging权限,在政策页面请求存储、通知、相机权限,但仍触发Java AssertionError报错,需分析堆栈信息并指出遗漏配置。
堆栈跟踪信息
E/AndroidRuntime(26033): java.lang.AssertionError E/AndroidRuntime(26033): at io.flutter.plugins.firebase.messaging.FlutterFirebasePermissionManager.onRequestPermissionsResult(FlutterFirebasePermissionManager.java:33) E/AndroidRuntime(26033): at io.flutter.embedding.engine.FlutterEngineConnectionRegistry$FlutterEngineActivityPluginBinding.onRequestPermissionsResult(FlutterEngineConnectionRegistry.java:777) E/AndroidRuntime(26033): at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.onRequestPermissionsResult(FlutterEngineConnectionRegistry.java:409) E/AndroidRuntime(26033): at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onRequestPermissionsResult(FlutterActivityAndFragmentDelegate.java:752) E/AndroidRuntime(26033): at io.flutter.embedding.android.FlutterActivity.onRequestPermissionsResult(FlutterActivity.java:748) E/AndroidRuntime(26033): at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:8421) E/AndroidRuntime(26033): at android.app.Activity.dispatchActivityResult(Activity.java:8266) E/AndroidRuntime(26033): at android.app.ActivityThread.deliverResults(ActivityThread.java:4931) E/AndroidRuntime(26033): at android.app.ActivityThread.handleSendResult(ActivityThread.java:4979) E/AndroidRuntime(26033): at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51) E/AndroidRuntime(26033): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) E/AndroidRuntime(26033): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) E/AndroidRuntime(26033): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2044) E/AndroidRuntime(26033): at android.os.Handler.dispatchMessage(Handler.java:107) E/AndroidRuntime(26033): at android.os.Looper.loop(Looper.java:223) E/AndroidRuntime(26033): at android.app.ActivityThread.main(ActivityThread.java:7562) E/AndroidRuntime(26033): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(26033): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) E/AndroidRuntime(26033): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) I/Process (26033): Sending signal. PID: 26033 SIG: 9 Lost connection to device.
相关代码
main函数代码
void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); FirebaseMessaging messaging = FirebaseMessaging.instance; NotificationSettings settings = await messaging.requestPermission( alert: true, announcement: false, badge: true, carPlay: false, criticalAlert: false, provisional: false, sound: true, ); print('User granted permission: ${settings.authorizationStatus}'); FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler); await FirebaseMessaging.instance.setForegroundNotificationPresentationOptions( alert: true, badge: true, sound: true); DatabaseBinding().dependencies(); runApp(MyApp()); } Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async { await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); }
政策页面权限处理代码
Map<Permission, PermissionStatus> statuses = await [ Permission.storage, Permission.notification, Permission.camera ].request(); if (!statuses.containsValue(PermissionStatus.denied)) { showGeneralDialog( context: context, useRootNavigator: false,......so_on
错误分析与解决方案
堆栈信息含义
该AssertionError来自FlutterFire Messaging插件的FlutterFirebasePermissionManager类,是权限请求结果回调时触发的断言失败——插件内部预期的状态未满足,通常是权限请求的逻辑或结果出现冲突。
可能遗漏的配置/问题点
重复请求通知权限冲突
你在两处请求了通知权限:main函数的FirebaseMessaging.requestPermission(),以及政策页面的Permission.notification.request()。重复请求会导致插件权限管理器处理结果时状态不一致,触发断言。AndroidManifest配置缺失
- 需确认Android 13+设备的Manifest中已添加:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> - 检查
google-services.json是否正确放置在android/app目录,且android/build.gradle中已添加apply plugin: 'com.google.gms.google-services'
- 需确认Android 13+设备的Manifest中已添加:
插件版本兼容性问题
旧版Firebase Messaging插件存在权限回调处理bug,需升级到最新稳定版。权限请求时机问题
确保政策页面的权限请求在Firebase初始化完成后执行,避免异步顺序导致的状态异常。
修复步骤
- 移除重复的通知权限请求,保留
FirebaseMessaging.requestPermission()即可,该方法会针对不同平台适配权限逻辑 - 补全AndroidManifest中缺失的通知权限配置
- 执行
flutter pub upgrade firebase_messaging升级插件版本 - 统一权限请求时机,确保所有权限请求在Firebase初始化完成后触发
内容的提问来源于stack exchange,提问作者50_Seconds _Of_Coding
相关产品推荐
相关产品推荐

