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

Flutter安卓真机运行cloud_firestore报错服务不可用 模拟器正常

排查解决步骤
  • 首先检查安卓主清单文件网络权限
    打开android/app/src/main/AndroidManifest.xml,确认在<manifest>标签下添加了网络权限配置:

    <uses-permission android:name="android.permission.INTERNET" />
    

    模拟器debug模式默认会附带临时网络权限,真机打包/运行release版本时如果未配置该权限就会出现网络请求失败问题。

  • 检查真机网络环境
    Firebase服务在中国大陆地区未合规落地,需要真机网络可以正常访问Google服务才能连接Firestore,确认真机当前网络是否和模拟器所在网络一致、是否配置了可用的代理。可以直接在真机浏览器打开Firebase控制台验证网络连通性。

  • 检查签名哈希配置
    登录Firebase控制台进入当前项目的安卓应用设置,确认已经添加了你当前打包所用签名文件的SHA-1、SHA-256哈希值。不管是debug模式默认的debug.keystore还是release版本的自定义签名文件,对应的哈希都需要添加到Firebase控制台,配置完成后重新下载google-services.json放到android/app目录下,再重新打包运行。

  • 检查混淆配置
    如果打包时开启了代码压缩混淆(即android/app/build.gradle中minifyEnabled true、shrinkResources true),需要在android/app/proguard-rules.pro中添加Firebase相关白名单规则:

    -keep class com.google.firebase.** { *; }
    -keep class com.google.cloud.firestore.** { *; }
    -keepnames class com.google.protobuf.** { *; }
    
  • 优化代码请求逻辑
    你当前把Firestore请求的future直接写在build方法中,每次页面重绘都会触发新的请求,容易引发异常。建议在initState中初始化请求并存为状态变量,再传给FutureBuilder:

    late Future<DocumentSnapshot> userFuture;
    
    @override
    void initState() {
      super.initState();
      userFuture = FirebaseFirestore.instance
          .collection("users")
          .doc(FirebaseAuth.instance.currentUser!.uid)
          .get();
    }
    
    // build方法里直接传future: userFuture
    

    也可以给get()方法添加请求参数,指定请求策略:

    .get(GetOptions(source: Source.serverAndCache))
    
  • 版本兼容验证
    你当前使用的是beta版Flutter,可尝试将cloud_firestore降级到3.0.x的稳定版,或者将Flutter切换到稳定分支后重新运行验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:06:04