Flutter中使用Firebase通知订阅主题报错SERVICE_NOT_AVAILABLE如何解决?
FCM订阅主题SERVICE_NOT_AVAILABLE报错解决方案
你遇到的报错:
Topic operation failed: SERVICE_NOT_AVAILABLE. Will retry Topic operation.
该报错是FCM服务无法与Firebase后台建立有效连接导致,和你现有订阅代码的逻辑无关,可按照以下步骤排查解决:
- 基础环境校验
- 安卓设备必须安装并启用符合版本要求的Google Play服务,国内无预置GMS的设备会直接触发该报错
- 确认当前网络可正常访问Firebase服务,网络限制、代理配置错误都会导致连接失败
- 确认安卓端
google-services.json、iOS端GoogleService-Info.plist已正确放置到项目对应目录,包名、Firebase项目ID等配置完全匹配
- 调整订阅执行时机
不要直接在initState中调用订阅方法,FCM初始化、token生成需要一定耗时,建议监听token生成状态后再执行订阅:@override void initState() { super.initState(); // 监听token刷新时重新订阅 FirebaseMessaging.instance.onTokenRefresh.listen((token) { subscribeToTopic(); }); // 首次启动获取到token后执行订阅 FirebaseMessaging.instance.getToken().then((token) { if (token != null) subscribeToTopic(); }); } void subscribeToTopic() async { try { await FirebaseMessaging.instance.subscribeToTopic('Notifications'); print('subscribed to topic'); } catch (e) { print('error is $e'); } } - 依赖版本校验
确认firebase_messaging版本与项目内其他Firebase相关依赖版本兼容,安卓端build.gradle建议使用统一的Firebase BOM版本,避免版本冲突导致的服务调用失败 - 增加重试逻辑
可以给订阅方法增加指数退避重试机制,避免临时网络波动导致的单次订阅失效。
内容的提问来源于stack exchange,提问作者Omar Abdelazeem
相关产品推荐
相关产品推荐

