mle*_*mos 7 firebase flutter google-cloud-firestore
尝试从 Firestore 获取文档时,如果设备通过 Wifi 连接,则连接失败并显示以下错误消息:
\nW/Firestore( 4903): (21.4.3) [OnlineStateTracker]: Could not reach Cloud Firestore backend. Backend didn\'t respond within 10 seconds\nW/Firestore( 4903): 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.\nRun Code Online (Sandbox Code Playgroud)\n重现
\n通常,在物理设备中运行时会发生错误。\n我创建了一个小应用程序,以便能够在对其余代码的干扰最小的情况下重现错误。请参阅下面的代码。
\n当您在调试器上点击运行(我正在使用 VSCode),然后单击 (+) 按钮向 Firestore 发出请求时,它会尝试几秒钟(您将看到进度指示器,没有测试应用程序),然后调用snapshot = await docRef.get()失败并显示以下错误消息:
PlatformException(Error performing get, Failed to get document because the client is offline., null)\nRun Code Online (Sandbox Code Playgroud)\n
然后,如果您关闭 wifi,该请求就会完美运行。从 Firestore 检索到的文档内容显示在屏幕中:
\n
现在,如果你再次打开 wifi,请求就会生效。有时从服务器检索数据,有时从缓存检索数据。
\nimport \'package:cloud_firestore/cloud_firestore.dart\';\nimport \'package:flutter/material.dart\';\n\nvoid main() {\n runApp(MyApp());\n}\n\nclass MyApp extends StatelessWidget {\n @override\n Widget build(BuildContext context) {\n return MaterialApp(\n title: \'Firestore Network Bug\',\n theme: ThemeData(\n primarySwatch: Colors.blue,\n visualDensity: VisualDensity.adaptivePlatformDensity,\n ),\n home: MyHomePage(),\n );\n }\n}\n\nclass MyHomePage extends StatefulWidget {\n @override\n _MyHomePageState createState() => _MyHomePageState();\n}\n\nclass _MyHomePageState extends State<MyHomePage> {\n bool _loading = false;\n Map<String, dynamic> _firebaseDocument;\n String _firebaseError;\n String _source;\n\n @override\n Widget build(BuildContext context) {\n return Scaffold(\n appBar: AppBar(\n title: Text("Firestore Network Bug"),\n ),\n body: Padding(\n padding: const EdgeInsets.all(24),\n child: Column(\n mainAxisAlignment: MainAxisAlignment.start,\n children: <Widget>[\n Text(\'Tap the (+) button to try to read from Firestore...\',\n style: TextStyle(fontSize: 20)),\n _showProgress(),\n _showResults(),\n _showErrors(),\n ],\n ),\n ),\n floatingActionButton: FloatingActionButton(\n onPressed: _readFromFirebase,\n tooltip: \'Increment\',\n child: Icon(Icons.add),\n ), // This trailing comma makes auto-formatting nicer for build methods.\n );\n }\n\n Widget _showProgress() {\n return Padding(\n padding: const EdgeInsets.only(top: 12.0),\n child: Container(\n height: 6.0,\n child: (_loading) ? LinearProgressIndicator() : Container(),\n ),\n );\n }\n\n Widget _showResults() {\n return Column(\n crossAxisAlignment: CrossAxisAlignment.start,\n children: [\n SizedBox(height: 12.0),\n Text("Result:"),\n Container(\n height: 150,\n padding: const EdgeInsets.all(16),\n color: Colors.blue[100],\n child: (_firebaseDocument != null)\n ? Text("From $_source: \\n\\n" + _firebaseDocument?.toString(),\n style: TextStyle(fontSize: 16))\n : Container(),\n ),\n ],\n );\n }\n\n Widget _showErrors() {\n return Column(\n crossAxisAlignment: CrossAxisAlignment.start,\n children: [\n SizedBox(height: 12.0),\n Text("Errors:"),\n Container(\n height: 150,\n padding: const EdgeInsets.all(16),\n color: Colors.red[100],\n child: (_firebaseError != null)\n ? Text(_firebaseError?.toString(), style: TextStyle(fontSize: 16))\n : Container(),\n ),\n ],\n );\n }\n\n void _readFromFirebase() async {\n setState(() {\n _loading = true;\n _firebaseDocument = null;\n _firebaseError = null;\n });\n DocumentReference docRef =\n Firestore.instance.document("myCollection/myDocument");\n\n DocumentSnapshot snapshot = await docRef.get().catchError(\n (onError) {\n setState(() {\n _loading = false;\n _firebaseDocument = null;\n _firebaseError = onError.toString();\n });\n },\n );\n if (_firebaseError != null) return;\n\n _source = (snapshot.metadata.isFromCache) ? "cache" : "server";\n\n if (snapshot.exists) {\n setState(() {\n _loading = false;\n _firebaseDocument = snapshot.data;\n });\n print("Document found!");\n print("- ${_firebaseDocument.toString()}");\n } else {\n print("Document not found!");\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n预期行为\n由于设备通过 WiFi 具有完美的连接,因此请求工作正常并且从服务器检索了文档。
\n其他上下文\n在模拟器上,一切都运行良好。\n我在以下模拟器配置中进行了测试:Pixel 4 API 29、Pixel 5 API 25、Pixel 3 API 29。
\n我用来测试的物理设备(均失败)其中:Pixel 4XL(Android 10 QQ3Q.200605.001)和Pixel 3XL(Android 10 QQ2A.200305.002)。
\n扑医生
\n[\xe2\x9c\x93] Flutter (Channel stable, v1.17.3, on Mac OS X 10.15.4 19E287, locale en-US)\n \xe2\x80\xa2 Flutter version 1.17.3 at /Users/mlemos/Documents/flutter\n \xe2\x80\xa2 Framework revision b041144f83 (8 days ago), 2020-06-04 09:26:11 -0700\n \xe2\x80\xa2 Engine revision ee76268252\n \xe2\x80\xa2 Dart version 2.8.4\n\n \n[\xe2\x9c\x93] Android toolchain - develop for Android devices (Android SDK version 29.0.2)\n \xe2\x80\xa2 Android SDK at /Users/mlemos/Library/Android/sdk\n \xe2\x80\xa2 Platform android-30, build-tools 29.0.2\n \xe2\x80\xa2 Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java\n \xe2\x80\xa2 Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)\n \xe2\x80\xa2 All Android licenses accepted.\n\n[\xe2\x9c\x93] Xcode - develop for iOS and macOS (Xcode 11.5)\n \xe2\x80\xa2 Xcode at /Applications/Xcode.app/Contents/Developer\n \xe2\x80\xa2 Xcode 11.5, Build version 11E608c\n \xe2\x80\xa2 CocoaPods version 1.9.1\n\n[!] Android Studio (version 4.0)\n \xe2\x80\xa2 Android Studio at /Applications/Android Studio.app/Contents\n \xe2\x9c\x97 Flutter plugin not installed; this adds Flutter specific functionality.\n \xe2\x9c\x97 Dart plugin not installed; this adds Dart specific functionality.\n \xe2\x80\xa2 Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)\n\n[\xe2\x9c\x93] VS Code (version 1.46.0)\n \xe2\x80\xa2 VS Code at /Applications/Visual Studio Code.app/Contents\n \xe2\x80\xa2 Flutter extension version 3.11.0\n\n[\xe2\x9c\x93] Connected device (2 available)\n \xe2\x80\xa2 Pixel 4 XL \xe2\x80\xa2 99201FFBA000KF \xe2\x80\xa2 android-arm64 \xe2\x80\xa2 Android 10 (API 29)\n \xe2\x80\xa2 Android SDK built for x86 \xe2\x80\xa2 emulator-5554 \xe2\x80\xa2 android-x86 \xe2\x80\xa2 Android 7.1.1 (API 25) (emulator)\n\n! Doctor found issues in 1 category.\nRun Code Online (Sandbox Code Playgroud)\npubspec.yaml
\nname: firestore_network_bug\ndescription: A new Flutter project.\npublish_to: \'none\' \nversion: 1.0.0+1\nenvironment:\n sdk: ">=2.7.0 <3.0.0"\ndependencies:\n flutter:\n sdk: flutter\n cupertino_icons: ^0.1.3\n firebase_analytics: ^5.0.14\n cloud_firestore: ^0.13.6\ndev_dependencies:\n flutter_test:\n sdk: flutter\nflutter:\n uses-material-design: true\nRun Code Online (Sandbox Code Playgroud)\n/build.gradle
\nbuildscript {\n ext.kotlin_version = \'1.3.50\'\n repositories {\n google()\n jcenter()\n }\n\n dependencies {\n classpath \'com.android.tools.build:gradle:3.5.0\'\n classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"\n // Application specific configuration (dependencies)\n classpath \'com.google.gms:google-services:4.3.3\'\n classpath \'com.google.firebase:firebase-crashlytics-gradle:2.1.1\'\n }\n}\n\nallprojects {\n repositories {\n google()\n jcenter()\n }\n}\n\nrootProject.buildDir = \'../build\'\nsubprojects {\n project.buildDir = "${rootProject.buildDir}/${project.name}"\n}\nsubprojects {\n project.evaluationDependsOn(\':app\')\n}\n\ntask clean(type: Delete) {\n delete rootProject.buildDir\n}\nRun Code Online (Sandbox Code Playgroud)\n/app/build.gradle
\ndef localProperties = new Properties()\ndef localPropertiesFile = rootProject.file(\'local.properties\')\nif (localPropertiesFile.exists()) {\n localPropertiesFile.withReader(\'UTF-8\') { reader ->\n localProperties.load(reader)\n }\n}\n\ndef flutterRoot = localProperties.getProperty(\'flutter.sdk\')\nif (flutterRoot == null) {\n throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")\n}\n\ndef flutterVersionCode = localProperties.getProperty(\'flutter.versionCode\')\nif (flutterVersionCode == null) {\n flutterVersionCode = \'1\'\n}\n\ndef flutterVersionName = localProperties.getProperty(\'flutter.versionName\')\nif (flutterVersionName == null) {\n flutterVersionName = \'1.0\'\n}\n\napply plugin: \'com.android.application\'\napply plugin: \'kotlin-android\'\napply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"\n// Application specific configuration (plugins)\napply plugin: \'com.google.gms.google-services\'\napply plugin: \'com.google.firebase.crashlytics\'\n\n\nandroid {\n compileSdkVersion 28\n\n sourceSets {\n main.java.srcDirs += \'src/main/kotlin\'\n }\n\n lintOptions {\n disable \'InvalidPackage\'\n }\n\n defaultConfig {\n applicationId "com.example.firestore_network_bug"\n minSdkVersion 16\n targetSdkVersion 28\n versionCode flutterVersionCode.toInteger()\n versionName flutterVersionName\n // Application specific configuration (multidex)\n multiDexEnabled true\n\n }\n\n buildTypes {\n release {\n signingConfig signingConfigs.debug\n }\n }\n}\n\nflutter {\n source \'../..\'\n}\n\ndependencies {\n implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"\n\n // Application specific configuration (dependencies)\n implementation \'com.android.support:multidex:1.0.3\'\n implementation \'com.google.firebase:firebase-analytics:17.2.2\'\n implementation \'com.google.firebase:firebase-crashlytics:17.0.0\'\n implementation \'com.google.firebase:firebase-firestore:21.4.3\'\n}\nRun Code Online (Sandbox Code Playgroud)\n这是调试控制台输出:
\n通过 Wifi - 发生错误时
\n\n\n请注意,通过 Wifi,Crashlytics 也会失败。
\n
Launching lib/main.dart on Pixel 4 XL in debug mode...\n\xe2\x9c\x93 Built build/app/outputs/apk/debug/app-debug.apk.\nConnecting to VM Service at ws://127.0.0.1:54122/cahgKkWqnBU=/ws\nE/FirebaseCrashlytics(22411): Settings request failed.\nE/FirebaseCrashlytics(22411): java.io.InterruptedIOException: timeout\nE/FirebaseCrashlytics(22411): at okhttp3.RealCall.timeoutExit(RealCall.java:107)\nE/FirebaseCrashlytics(22411): at okhttp3.RealCall.execute(RealCall.java:96)\nE/FirebaseCrashlytics(22411): at com.google.firebase.crashlytics.internal.network.HttpRequest.execute(com.google.firebase:firebase-crashlytics@@17.0.0:129)\nE/FirebaseCrashlytics(22411): at com.google.firebase.crashlytics.internal.settings.network.DefaultSettingsSpiCall.invoke(com.google.firebase:firebase-crashlytics@@17.0.0:86)\nE/FirebaseCrashlytics(22411): at com.google.firebase.crashlytics.internal.settings.SettingsController$1.then(com.google.firebase:firebase-crashlytics@@17.0.0:200)\nE/FirebaseCrashlytics(22411): at com.google.firebase.crashlytics.internal.settings.SettingsController$1.then(com.google.firebase:firebase-crashlytics@@17.0.0:193)\nE/FirebaseCrashlytics(22411): at com.google.android.gms.tasks.zzp.run(Unknown Source:2)\nE/FirebaseCrashlytics(22411): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)\nE/FirebaseCrashlytics(22411): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)\nE/FirebaseCrashlytics(22411): at com.google.firebase.crashlytics.internal.common.ExecutorUtils$1$1.onRun(com.google.firebase:firebase-crashlytics@@17.0.0:60)\nE/FirebaseCrashlytics(22411): at com.google.firebase.crashlytics.internal.common.BackgroundPriorityRunnable.run(com.google.firebase:firebase-crashlytics@@17.0.0:27)\nE/FirebaseCrashlytics(22411): at java.lang.Thread.run(Thread.java:919)\nE/FirebaseCrashlytics(22411): Caused by: java.io.IOException: Canceled\nE/FirebaseCrashlytics(22411): at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120)\nE/FirebaseCrashlytics(22411): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)\nE/FirebaseCrashlytics(22411): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)\nE/FirebaseCrashlytics(22411): at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:254)\nE/FirebaseCrashlytics(22411): at okhttp3.RealCall.execute(RealCall.java:92)\nE/FirebaseCrashlytics(22411): ... 10 more\nW/DynamiteModule(22411): Local module descriptor class for providerinstaller not found.\nI/DynamiteModule(22411): Considering local module providerinstaller:0 and remote module providerinstaller:0\nW/ProviderInstaller(22411): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.\nI/ore_network_bu(22411): The ClassLoaderContext is a special shared library.\nI/chatty (22411): uid=10227(com.example.firestore_network_bug) AsyncTask #1 identical 1 line\nI/ore_network_bu(22411): The ClassLoaderContext is a special shared library.\nW/ore_network_bu(22411): Accessing hidden method Lsun/misc/Unsafe;->getLong(Ljava/lang/Object;J)J (greylist,core-platform-api, linking, allowed)\nW/ore_network_bu(22411): Accessing hidden method Lsun/misc/Unsafe;->arrayBaseOffset(Ljava/lang/Class;)I (greylist,core-platform-api, linking, allowed)\nW/ore_network_bu(22411): Accessing hidden method Lsun/misc/Unsafe;->copyMemory(JJJ)V (greylist, linking, allowed)\nW/ore_network_bu(22411): Accessing hidden method Lsun/misc/Unsafe;->objectFieldOffset(Ljava/lang/reflect/Field;)J (greylist,core-platform-api, linking, allowed)\nW/ore_network_bu(22411): Accessing hidden method Lsun/misc/Unsafe;->getByte(J)B (greylist,core-platform-api, linking, allowed)\nW/ore_network_bu(22411): Accessing hidden method Lsun/misc/Unsafe;->getByte(Ljava/lang/Object;J)B (greylist,core-platform-api, linking, allowed)\nW/ore_network_bu(22411): Accessing hidden method Lsun/misc/Unsafe;->getLong(J)J (greylist,core-platform-api, linking, allowed)\nW/ore_network_bu(22411): Accessing hidden method Lsun/misc/Unsafe;->putByte(JB)V (greylist,core-platform-api, linking, allowed)\nW/ore_network_bu(22411): Accessing hidden method Lsun/misc/Unsafe;->putByte(Ljava/lang/Object;JB)V (greylist,core-platform-api, linking, allowed)\nW/ore_network_bu(22411): Accessing hidden method Lsun/misc/Unsafe;->getLong(Ljava/lang/Object;J)J (greylist,core-platform-api, reflection, allowed)\nW/ore_network_bu(22411): Accessing hidden method Lsun/misc/Unsafe;->getLong(Ljava/lang/Object;J)J (greylist,core-platform-api, reflection, allowed)\nW/ore_network_bu(22411): Accessing hidden field Ljava/nio/Buffer;->address:J (greylist, reflection, allowed)\nV/NativeCrypto(22411): Registering com/google/android/gms/org/conscrypt/NativeCrypto\'s 286 native methods...\nW/ore_network_bu(22411): Accessing hidden method Ljava/security/spec/ECParameterSpec;->getCurveName()Ljava/lang/String; (greylist, reflection, allowed)\nI/ProviderInstaller(22411): Installed default security provider GmsCore_OpenSSL\nW/Firestore(22411): (21.4.3) [OnlineStateTracker]: Could not reach Cloud Firestore backend. Backend didn\'t respond within 10 seconds\nW/Firestore(22411):\nW/Firestore(22411): 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.\nW/DynamiteModule(22411): Local module descriptor class for providerinstaller not found.\nI/DynamiteModule(22411): Considering local module providerinstaller:0 and remote module providerinstaller:0\nW/ProviderInstaller(22411): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.\nW/DynamiteModule(22411): Local module descriptor class for providerinstaller not found.\nI/DynamiteModule(22411): Considering local module providerinstaller:0 and remote module providerinstaller:0\nW/ProviderInstaller(22411): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.\nW/DynamiteModule(22411): Local module descriptor class for providerinstaller not found.\nI/DynamiteModule(22411): Considering local module providerinstaller:0 and remote module providerinstaller:0\nW/ProviderInstaller(22411): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.\nW/DynamiteModule(22411): Local module descriptor class for providerinstaller not found.\nI/DynamiteModule(22411): Considering local module providerinstaller:0 and remote module providerinstaller:0\nW/ProviderInstaller(22411): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.\nW/DynamiteModule(22411): Local module descriptor class for providerinstaller not found.\nI/DynamiteModule(22411): Considering local module providerinstaller:0 and remote module providerinstaller:0\nW/ProviderInstaller(22411): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.\nW/DynamiteModule(22411): Local module descriptor class for providerinstaller not found.\nI/DynamiteModule(22411): Considering local module providerinstaller:0 and remote module providerinstaller:0\nW/ProviderInstaller(22411): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.\nRun Code Online (Sandbox Code Playgroud)\n通过 LTE - 当一切正常时
\nLaunching lib/main.dart on Pixel 4 XL in debug mode...\n\xe2\x9c\x93 Built build/app/outputs/apk/debug/app-debug.apk.\nConnecting to VM Service at ws://127.0.0.1:54345/egB1v0JRe6c=/ws\nW/DynamiteModule(23529): Local module descriptor class for providerinstaller not found.\nI/DynamiteModule(23529): Considering local module providerinstaller:0 and remote module providerinstaller:0\nW/ProviderInstaller(23529): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.\nI/ore_network_bu(23529): The ClassLoaderContext is a special shared library.\nI/chatty (23529): uid=10227(com.example.firestore_network_bug) AsyncTask #1 identical 1 line\nI/ore_network_bu(23529): The ClassLoaderContext is a special shared library.\nW/ore_network_bu(23529): Accessing hidden method Lsun/misc/Unsafe;->getLong(Ljava/lang/Object;J)J (greylist,core-platform-api, linking, allowed)\nW/ore_network_bu(23529): Accessing hidden method Lsun/misc/Unsafe;->arrayBaseOffset(Ljava/lang/Class;)I (greylist,core-platform-api, linking, allowed)\nW/ore_network_bu(23529): Accessing hidden method Lsun/misc/Unsafe;->copyMemory(JJJ)V (greylist, linking, allowed)\nW/ore_network_bu(23529): Accessing hidden method Lsun/misc/Unsafe;->objectFieldOffset(Ljava/lang/reflect/Field;)J (greylist,core-platform-api, linking, allowed)\nW/ore_network_bu(23529): Accessing hidden method Lsun/misc/Unsafe;->getByt
如果通过 wifi 连接的两个物理设备无法连接到 Firebase Cloud Firestore,但可以使用移动网络工作,则可能是 wifi 中的某些配置或 ISP 阻止了 Firebase。您可以通过终端 ping Firebase 端点来测试这一点,以验证您的请求是否得到响应。
Firestore REST API 端点以此 URL 开头。您可以尝试使用终端对其进行 ping 操作。
ping firestore.googleapis.com
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1295 次 |
| 最近记录: |