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_

