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

Flutter集成FCM调用FirebaseMessaging.instance.getToken()报未知错误

Flutter FCM getToken() 触发 [firebase_messaging/unknown] 错误(权限已授权)

问题描述

在Flutter应用中集成Firebase Cloud Messaging(FCM)实现推送通知,权限请求已成功授权,但调用FirebaseMessaging.instance.getToken()时触发[firebase_messaging/unknown]未知错误。

代码示例

void _setupPushNotifications() async {
    try {
      
      final fcm = FirebaseMessaging.instance;
      final settings = await fcm.requestPermission();
      print(settings.authorizationStatus);
      final token = await fcm.getToken();
      print('token is: $token');
 
    } catch (e, stackTrace) {
      print('Error setting up push notifications: $e');
      print(stackTrace);
    }
  }
 
  @override
  void initState() {
    _setupPushNotifications();
    super.initState();
  }

调试输出

Restarted application in 308ms.
flutter: AuthorizationStatus.authorized
flutter: Error setting up push notifications: [firebase_messaging/unknown] An unknown error has occurred.
flutter: #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:648:7)
#1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:334:18) platform_channel.dart:334
<asynchronous suspension>
#2 MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:534:43) platform_channel.dart:534
<asynchronous suspension>
#3 MethodChannelFirebaseMessaging.getToken (package:firebase_messaging_platform_interface/src/method_channel/method_channel_messaging.dart:248:11) method_channel_messaging.dart:248
<asynchronous suspension>
#4 _ChatScreenState._setupPushNotifications (package:chat_app/screens/chat.dart:20:21) chat.dart:20
<asynchronous suspension>

已尝试操作:

  • 在Google Cloud Console启用Firebase Cloud Messaging API并等待超5分钟
  • 重启应用、更换iOS模拟器
  • 执行flutter clean和flutter doctor

可能的解决方案

1. 检查iOS项目APNs配置

  • 确保在Apple开发者后台生成APNs认证密钥,并上传至Firebase控制台「项目设置>云消息传递>iOS应用配置」中。
  • 确认Xcode项目的Signing & Capabilities已添加Push Notifications能力,且启用Background Modes下的Remote notifications选项。
  • 检查Info.plist是否包含以下配置(自定义AppDelegate时需设置为false避免冲突):
    <key>FirebaseAppDelegateProxyEnabled</key>
    <false/>
    

2. 验证Firebase配置文件

  • 确认iOS项目中的GoogleService-Info.plist是从Firebase控制台最新下载的,且包名与Xcode项目的Bundle ID完全一致。
  • 检查GoogleService-Info.plist中的GCM_SENDER_ID和GOOGLE_APP_ID是否与Firebase项目匹配。

3. 升级FCM依赖版本

  • 查看pubspec.yaml中firebase_messaging的版本,升级至最新稳定版(旧版本可能存在平台通道兼容问题)。
  • 执行以下命令更新依赖:
    flutter pub upgrade firebase_messaging
    flutter clean
    flutter pub get
    

4. 使用真实iOS设备测试

iOS模拟器对FCM token的支持存在局限性,建议切换至真实iOS设备进行测试。

5. 强制刷新Token

修改代码,先调用deleteToken()再重新获取Token:

await fcm.deleteToken();
final token = await fcm.getToken();

6. 查看iOS原生日志

在Xcode中运行应用,查看控制台的原生错误日志。firebase_messaging/unknown通常由原生层抛出,原生日志能提供更具体的错误原因(如APNs认证失败、网络异常等)。


内容的提问来源于stack exchange,提问作者Peter Brink

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:50:06