Flutter Android Studio无法连接Cloud Firestore后端问题求助
Flutter Cloud Firestore 无法连接问题
控制台报错信息
W/Firestore(26053): (24.2.2) [OnlineStateTracker]: Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds W/Firestore(26053): W/Firestore(26053): This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend. E/flutter (26053): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: [cloud_firestore/unavailable] The service is currently unavailable. This is a most likely a transient condition and may be corrected by retrying with a backoff. E/flutter (26053): #0 checkIfDocExists (package:crypto_app/Functions/firestorehelper.dart:29:5) E/flutter (26053): <asynchronous suspension> E/flutter (26053): #1 _MainPagesState._checkUsername (package:crypto_app/UI/mainpages.dart:63:21) E/flutter (26053): <asynchronous suspension> E/flutter (26053): W/Firestore(26053): (24.2.2) [WatchStream]: (a4a9ed6) Stream closed with status: Status{code=UNAVAILABLE, description=Channel shutdownNow invoked, cause=null}.
已尝试的解决方法
- 在3个AndroidManifest.xml文件中添加
<uses-permission android:name="android.permission.INTERNET" /> - 在主目录下的AndroidManifest.xml中添加
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> - 启用Multidex
- 更换WiFi网络
- 次日重试仍存在相同问题
- 最低SDK版本设置为21
- 将代码复制到全新项目中测试
Firebase初始化相关
主函数代码
Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( name: 'Retrospect', options: DefaultFirebaseOptions.currentPlatform, ); runApp(MyApp()); }
初始化时控制台警告
I/FirebaseApp(26053): Device unlocked: initializing all Firebase APIs for app Retrospect I/flutter (26053): Refreshing W/DynamiteModule(26053): Local module descriptor class for com.google.android.gms.providerinstaller.dynamite not found. I/DynamiteModule(26053): Considering local module com.google.android.gms.providerinstaller.dynamite:0 and remote module com.google.android.gms.providerinstaller.dynamite:0 W/ProviderInstaller(26053): Failed to load providerinstaller module: No acceptable module com.google.android.gms.providerinstaller.dynamite found. Local version is 0 and remote version is 0.
项目配置详情
pubspec.yaml 依赖
dependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 firebase_core: ^1.20.1 cloud_firestore: ^3.4.4 http: ^0.13.4 path_provider: ^2.0.11 get_storage: ^2.0.3
app/build.gradle 配置
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'com.google.gms.google-services' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "com.android.support:multidex:1.0.3" implementation 'com.google.android.material:material:1.6.1' implementation 'com.google.android.gms:play-services-ads:21.1.0' implementation platform('com.google.firebase:firebase-bom:30.3.2') implementation 'com.google.firebase:firebase-analytics-ktx' implementation 'com.google.firebase:firebase-storage-ktx' }
根目录 build.gradle 配置
buildscript { ext.kotlin_version = '1.6.10' repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:7.1.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.13' } } allprojects { repositories { google() mavenCentral() } }
google-services.json 文件位置

Firestore 规则(Python可正常读取,规则无问题)
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if request.time < timestamp.date(2022, 12, 12); } } }
调用Firestore的函数代码
import 'package:cloud_firestore/cloud_firestore.dart'; Future<bool> checkIfDocExists(String docId) async { try { // Get reference to Firestore collection var collectionRef = FirebaseFirestore.instance.collection('accounts'); var doc = await collectionRef.doc(docId).get(); return doc.exists; } catch (e) { throw e; } }
问题
完全无法通过Flutter访问Cloud Firestore,未发现Windows Defender或防火墙拦截,请问该错误的原因是什么?
内容的提问来源于stack exchange,提问作者Bill.xby
相关产品推荐
相关产品推荐

