TestFlight中Flutter Firebase Messaging获取FCM Token失败报错
检查签名与权限配置
确认TestFlight构建使用的Provisioning Profile是生产环境且包含Push Notifications权限,同时Xcode中对应Release构建配置的「Signing & Capabilities」里已勾选Push Notifications,关联的profile无误。验证APNs密钥有效性
核对Firebase控制台上传的APNs授权密钥:确保是生产环境密钥,Team ID与项目完全匹配,密钥已启用APNs权限且未过期。若有疑问,重新生成并上传新的APNs密钥到Firebase。确保Firebase初始化完成
调用FirebaseMessaging.instance.getToken()前,必须保证Firebase.initializeApp()已执行完成,建议在main函数中同步初始化:void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(const MyApp()); }可通过
print(Firebase.apps.isNotEmpty)确认初始化状态。确认通知权限已授权
TestFlight环境下需确保用户已授权通知权限,可主动请求并校验:NotificationSettings settings = await FirebaseMessaging.instance.requestPermission( alert: true, badge: true, sound: true, ); if (settings.authorizationStatus != AuthorizationStatus.authorized) { // 引导用户前往系统设置开启权限 return; }注意:权限弹窗仅首次出现,若用户拒绝过需手动引导开启。
查看设备控制台日志
用Xcode连接安装了TestFlight版本的设备,查看控制台中「APNs」「FirebaseMessaging」相关日志,日志会包含更具体的错误原因,比如APNs令牌获取失败、Firebase与APNs通信异常等,是定位问题的关键。核对Firebase应用配置
确认Firebase控制台中iOS应用的Bundle ID与TestFlight构建的Bundle ID完全一致,重新下载最新的GoogleService-Info.plist替换项目中的旧文件,确保配置为生产环境最新状态。
内容的提问来源于stack exchange,提问作者Andrii Ivaskevych

