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

Flutter获取Firebase设备Token真机运行报错如何解决

问题场景

Flutter开发中通过以下代码获取Firebase设备Token:

FirebaseMessaging.instance.getToken().then((value) => print("token is $value"));

模拟器运行时代码可正常执行并打印Token,切换到真机运行时抛出如下错误:

java.util.concurrent.ExecutionException: com.google.firebase.installations.FirebaseInstallationsException: Firebase Installations Service is unavailable. Please try again later.
排查修复步骤
  • 优先排查真机网络连通性:Firebase服务在国内无特殊网络配置的环境下无法正常访问,若模拟器配置了全局代理、真机未配置可用代理,就会出现模拟器正常、真机报错的典型现象,给真机配置全局可用的代理后重试即可。
  • 校验配置文件一致性:确认android/app目录下的google-services.json文件,和Firebase控制台中对应应用包名的配置文件完全匹配,没有错用其他项目/其他包名的配置。如果近期在Firebase控制台调整过应用配置,重新下载最新的配置文件替换本地文件,执行flutter clean清理构建缓存后重新编译运行。
  • 检查Android端构建配置:
    1. 确认android/build.gradle中依赖的com.google.gms:google-services插件版本,和当前使用的Firebase SDK版本适配,不要使用过旧版本的插件
    2. 确认android/app/build.gradle文件底部已经正确添加插件应用配置:apply plugin: 'com.google.gms.google-services'
    3. 确认真机已安装可用的Google Play服务框架,部分国行安卓机型默认阉割Google服务组件,会导致Firebase相关服务无法正常通信,安装完整Google服务框架后重试。
  • 检查应用权限声明:确认AndroidManifest.xml中已添加必要的网络相关权限:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
    部分定制ROM会拦截未声明网络权限应用的联网请求,即使设备本身网络正常也会抛出服务不可用错误。
  • 校验初始化流程:如果使用的是6.x以上版本的firebase_messaging插件,确认在调用getToken()之前已经完成Firebase初始化,参考代码如下:
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
    // 初始化完成后再调用getToken
    FirebaseMessaging.instance.getToken().then((value) => print("token is $value"));
    
    未完成初始化就调用接口,也可能偶发服务不可用的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:36:08