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

调用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()获取用户授权。
  • 检查网络与环境

    • 确保测试设备有稳定的网络连接,获取令牌需要和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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:42:02