FlutterJNI重复调用及Firebase通知点击空指针问题求助
针对Firebase Messaging相关问题的解决方案
问题1:FlutterJNI.loadLibrary和FlutterJNI.init被多次调用提示
可能原因
- Flutter端重复调用
Firebase.initializeApp(),比如在多页面/组件中重复触发初始化 - Android端Application类中存在重复初始化Flutter引擎或Firebase的逻辑
- 依赖缓存异常,导致相关库被重复加载
解决步骤
确保Firebase初始化仅执行一次:
在main函数中通过async/await完成初始化,避免多处调用:void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(const MyApp()); }若需在其他场景判断初始化状态,可通过
Firebase.apps.isNotEmpty检查是否已完成初始化。检查Android端配置:
打开android/app/src/main/java/[包名]/MainApplication.java,确保没有重复初始化FlutterEngine或Firebase的代码,保持初始化逻辑唯一。清理依赖缓存:
执行以下命令清理并重新获取依赖:flutter clean flutter pub get cd android && ./gradlew clean
问题2:应用终止状态下点击通知触发空值检查错误
可能原因
- 终止状态下应用启动时,Firebase尚未完成初始化就尝试读取通知数据,导致数据读取为空
- 直接使用
!空检查运算符强制解析可能为空的通知数据,忽略了初始化未完成的场景 - Android端通知跳转的Intent配置不正确,导致数据未正确传递到Flutter端
解决步骤
安全处理终止状态的通知数据:
使用FirebaseMessaging.instance.getInitialMessage()获取启动时的通知数据,且必须在Firebase初始化完成后调用,同时避免直接使用!,改用null安全判断:void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); // 处理终止状态下的通知点击 RemoteMessage? initialMessage = await FirebaseMessaging.instance.getInitialMessage(); if (initialMessage != null) { handleNotificationData(initialMessage.data); } runApp(const MyApp()); } void handleNotificationData(Map<String, dynamic> data) { String? targetPage = data['target_page']; if (targetPage != null) { // 执行页面跳转或数据处理逻辑 } }检查AndroidManifest配置:
确保MainActivity的intent-filter包含正确的action,允许通知跳转启动应用:<activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <intent-filter> <action android:name="FLUTTER_NOTIFICATION_CLICK" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>检查通知数据格式:
确保推送的通知携带data字段(而非仅notification字段),终止状态下notification字段可能无法被正确解析,示例推送数据结构:{ "data": { "target_page": "detail", "id": "123" }, "notification": { "title": "新通知", "body": "点击查看详情" } }
内容的提问来源于stack exchange,提问作者ashish rajbanshi
相关产品推荐
相关产品推荐

