Flutter Web获取FCM Token失败,启动卡在闪屏页求助
FCM Token获取导致应用卡闪屏且try/catch无法捕获错误的排查方案
以下是针对该问题的具体排查方向和解决办法:
1. 异步初始化阻塞主线程
main函数中过多的await操作(尤其是FCM相关初始化)可能导致主线程一直等待Future完成,从而卡住闪屏页。即使getToken包裹了try/catch,前面的初始化步骤如果存在pending的Future,也会导致应用无法启动。
解决办法:将非必要的初始化逻辑移到runApp之后执行,让应用先完成启动:
void main() async { WidgetsFlutterBinding.ensureInitialized(); if (!kIsWeb) { SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]); } // 仅保留核心初始化步骤 await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); setupDioLocator(); await setupLocalLocator(); await getIt<LocalRepository>().getPreferredLanguage(); // 优先启动应用,避免卡闪屏 runApp(Stop(key: stopKey)); // 应用启动后异步处理FCM逻辑 Future(() async { try { final fcmToken = kIsWeb ? await FirebaseMessaging.instance.getToken(vapidKey: Keys.FCM_WEB_PUBLIC_KEY) : await FirebaseMessaging.instance.getToken(); print("FCM TOKEN: $fcmToken"); await FirebaseMessagingConfiguration().initializeNotifications(); } catch(error) { print('Token error: $error'); } }); }
2. 多平台调用时错误传递VapidKey
VapidKey仅Web平台需要,Android/iOS平台调用getToken时传入该参数可能触发底层静默异常,且不会抛到Dart层的try/catch中。
解决办法:根据平台判断是否传递VapidKey:
final fcmToken = kIsWeb ? await FirebaseMessaging.instance.getToken(vapidKey: Keys.FCM_WEB_PUBLIC_KEY) : await FirebaseMessaging.instance.getToken();
3. 平台配置缺失或错误
Firebase配置文件(Android的google-services.json、iOS的GoogleService-Info.plist)缺失、包名/bundle ID与Firebase控制台不匹配,会导致FCM底层初始化失败,进而阻塞应用。这类错误通常不会抛出到Dart层。
解决办法:
- 检查平台配置文件是否正确放置在对应目录,配置文件中的包名/bundle ID与项目一致。
- 确认
firebase_messaging依赖版本与其他Firebase依赖版本兼容。 - Android端检查
AndroidManifest.xml中是否添加了FCM所需的权限和服务配置;iOS端检查Info.plist中是否配置了推送权限相关条目。
4. iOS推送权限未请求
iOS平台必须先请求用户推送权限,否则getToken可能静默失败或卡住,且不会抛出异常。
解决办法:在获取Token前先请求权限:
if (!kIsWeb) { NotificationSettings settings = await FirebaseMessaging.instance.requestPermission( alert: true, badge: true, sound: true, ); if (settings.authorizationStatus != AuthorizationStatus.authorized) { print('用户未授权推送,无法获取FCM Token'); return; } }
内容的提问来源于stack exchange,提问作者Haya Hesham Abdel-azim
相关产品推荐
相关产品推荐

