调用Firebase Messaging获取设备令牌返回null问题求助
解决Firebase Messaging令牌返回null的问题
以下是几个排查和解决Firebase Messaging令牌返回null的常用方法:
核对Firebase配置文件
确保Android项目根目录下的google-services.json和iOS项目中的GoogleService-Info.plist是从Firebase控制台下载的最新版本,并且文件里的包名/ Bundle ID和项目的实际配置完全一致。同时确认pubspec.yaml中已经添加了firebase_messaging依赖,并且执行过flutter pub get更新依赖。申请推送权限
- Android 13及以上系统需要主动申请POST_NOTIFICATIONS权限,先在
AndroidManifest.xml里添加权限声明:
然后在代码里请求权限:<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />await FirebaseMessaging.instance.requestPermission(); - iOS需要在
Info.plist中添加权限描述:
同样要在代码里调用<key>NSUserNotificationUsageDescription</key> <string>需要推送权限接收消息通知</string> <key>NSRemoteNotificationUsageDescription</key> <string>需要远程推送权限接收服务消息</string>requestPermission()获取用户授权。
- Android 13及以上系统需要主动申请POST_NOTIFICATIONS权限,先在
检查网络与环境
- 确保测试设备有稳定的网络连接,获取令牌需要和Firebase服务器通信,网络不通会导致返回null。
- 模拟器可能存在兼容性问题:Android模拟器尽量使用带Google Play服务的镜像;iOS模拟器要确保推送功能正常,必要时登录Apple ID测试,优先用真机排查问题。
调整代码执行时机
不要在应用启动的同步代码中直接调用getToken(),建议在initState等应用初始化完成后的异步方法中执行:@override void initState() { super.initState(); _fetchToken(); } Future<void> _fetchToken() async { // 先请求权限 await FirebaseMessaging.instance.requestPermission(); String? token = await FirebaseMessaging.instance.getToken(); print(token); }检查Firebase控制台设置
确认Firebase项目已启用Cloud Messaging服务,服务器密钥配置正常,没有针对目标设备的限制规则。
内容的提问来源于stack exchange,提问作者Ibtissam
相关产品推荐
相关产品推荐

