You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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类,是权限请求结果回调时触发的断言失败——插件内部预期的状态未满足,通常是权限请求的逻辑或结果出现冲突。

可能遗漏的配置/问题点

  1. 重复请求通知权限冲突
    你在两处请求了通知权限:main函数的FirebaseMessaging.requestPermission(),以及政策页面的Permission.notification.request()。重复请求会导致插件权限管理器处理结果时状态不一致,触发断言。

  2. 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'
  3. 插件版本兼容性问题
    旧版Firebase Messaging插件存在权限回调处理bug,需升级到最新稳定版。

  4. 权限请求时机问题
    确保政策页面的权限请求在Firebase初始化完成后执行,避免异步顺序导致的状态异常。

修复步骤

  • 移除重复的通知权限请求,保留FirebaseMessaging.requestPermission()即可,该方法会针对不同平台适配权限逻辑
  • 补全AndroidManifest中缺失的通知权限配置
  • 执行flutter pub upgrade firebase_messaging升级插件版本
  • 统一权限请求时机,确保所有权限请求在Firebase初始化完成后触发

内容的提问来源于stack exchange,提问作者50_Seconds _Of_Coding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 07:24:18