Flutter集成Firebase Messaging时出现Expecting binder but got null错误
问题排查与解决方案
日志条目分析与对应处理
1. E/SurfaceSyncer 和 W/Parcel 错误
这类错误属于Android系统层的Surface同步、Binder通信问题,和Firebase Messaging集成无直接关联:
- 重启测试设备/模拟器,清理App缓存后重试即可解决。
- 若使用模拟器,建议切换到Android 10及以上的系统镜像,旧版本镜像易出现这类兼容性问题。
2. WorkSource 隐藏方法访问警告
这些是Firebase SDK内部调用Android隐藏API触发的警告,无需开发者手动修复:
- 这类警告不影响Token获取、推送功能的正常运行,Firebase团队会在后续SDK版本中适配Android的API限制。
- 若想屏蔽这类日志,可在AndroidManifest.xml中添加:
<uses-library android:name="org.apache.http.legacy" android:required="false" />
同时在app/build.gradle的android块内补充:
android { // 其他配置保留 lintOptions { checkReleaseBuilds false abortOnError false ignoreWarnings true } }
3. FLTFireMsgReceiver 广播接收日志
这是正常日志,说明Firebase Messaging的广播接收器正在工作,属于预期行为,无需处理。
Token获取功能的关键配置检查
你的代码逻辑没问题,但需确认以下Firebase基础配置是否完成:
- 已将Firebase控制台下载的
google-services.json放置到Android项目的app/目录下。 - app/build.gradle中已正确配置Firebase依赖:
plugins { id 'com.android.application' id 'kotlin-android' id 'dev.flutter.flutter-gradle-plugin' id 'com.google.gms.google-services' // 必须添加 } dependencies { // 其他依赖保留 implementation platform('com.google.firebase:firebase-bom:32.7.0') // 使用最新BOM版本 implementation 'com.google.firebase:firebase-messaging' }
- Android 13及以上设备需主动请求通知权限,在
init方法中补充:
import 'package:permission_handler/permission_handler.dart'; // 插入到init函数内 await Permission.notification.request();
(需先在pubspec.yaml中添加permission_handler依赖)
代码优化建议
优化Token获取方法,增加异常捕获:
Future<String> getDeviceToken() async { try { FirebaseMessaging messaging = FirebaseMessaging.instance; // iOS需请求APNs令牌,Android可省略 await messaging.requestPermission(); String? deviceToken = await messaging.getToken(); return deviceToken ?? ""; } catch (e) { print("Token获取失败: $e"); return ""; } }
内容的提问来源于stack exchange,提问作者Dhrisya L
相关产品推荐
相关产品推荐

