所以我写这篇文章是为了以防万一有人有任何想法。我无法让 Firebase/Firestore 在我的 Android 模拟器上与我的 Flutter 项目一起工作。
此时,我要做的就是匿名登录,并通过在终端中打印某些内容来检查文档是否存在,以确认我的应用已连接到骨架应用中的 Firebase/Firestore。
firebase_auth: ^3.7.0
cloud_firestore: ^3.4.6
firebase_core: ^1.21.1
匿名登录。
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
await FirebaseAuth.instance.signInAnonymously();
runApp(const MyApp());
}
...
并调用此方法来告诉我该文档是否存在(确实存在)。
Future testFirebase() async {
await FirebaseFirestore.instance
.collection("fruit")
.doc("peach")
.get()
.then((document) {
if (document.exists) {
print("exists");
} else {
print("does not exist");
}
});
}
这样做会导致应用程序挂起。然后大约 5 分钟后,我收到大量错误消息
W/System (13182): Ignoring header X-Firebase-Locale because its value was null.
D/FirebaseAuth(13182): Notifying id token listeners about user ( fUMAwRpjESeaRik9ABkzTNE7bH92 ).
D/FirebaseAuth(13182): Notifying auth state listeners about user ( fUMAwRpjESeaRik9ABkzTNE7bH92 ).
W/DynamiteModule(13182): Local module descriptor class for com.google.android.gms.providerinstaller.dynamite not found.
I/DynamiteModule(13182): Considering local module com.google.android.gms.providerinstaller.dynamite:0 and remote module com.google.android.gms.providerinstaller.dynamite:0
W/ProviderInstaller(13182): Failed to load providerinstaller module: No acceptable module com.google.android.gms.providerinstaller.dynamite found. Local version is 0 and remote version is 0.
I/flutterconntes(13182): The ClassLoaderContext is a special shared library.
I/chatty (13182): uid=10156(com.example.flutterconntest) AsyncTask #1 identical 1 line
I/flutterconntes(13182): The ClassLoaderContext is a special shared library.
D/nativeloader(13182): classloader namespace configured for unbundled product apk. library_path=/product/priv-app/PrebuiltGmsCore/lib/x86:/product/priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk!/lib/x86:/product/lib:/system/product/lib
W/ProviderInstaller(13182): Failed to report request stats: com.google.android.gms.common.security.ProviderInstallerImpl.reportRequestStats [class android.content.Context, long, long]
W/flutterconntes(13182): Accessing hidden field Ldalvik/system/BaseDexClassLoader;->pathList:Ldalvik/system/DexPathList; (greylist, reflection, allowed)
W/flutterconntes(13182): Accessing hidden field Ldalvik/system/DexPathList;->nativeLibraryDirectories:Ljava/util/List; (greylist, reflection, allowed)
W/flutterconntes(13182): Accessing hidden field Ldalvik/system/DexPathList;->systemNativeLibraryDirectories:Ljava/util/List; (greylist, reflection, allowed)
W/flutterconntes(13182): Accessing hidden field Ldalvik/system/DexPathList;->nativeLibraryPathElements:[Ldalvik/system/DexPathList$NativeLibraryElement; (greylist, reflection, allowed)
W/flutterconntes(13182): Accessing hidden method Ldalvik/system/DexPathList;->makePathElements(Ljava/util/List;)[Ldalvik/system/DexPathList$NativeLibraryElement; (greylist, reflection, allowed)
V/NativeCrypto(13182): Registering com/google/android/gms/org/conscrypt/NativeCrypto's 286 native methods...
W/flutterconntes(13182): Accessing hidden method Ljava/security/spec/ECParameterSpec;->getCurveName()Ljava/lang/String; (greylist, reflection, allowed)
I/ProviderInstaller(13182): Installed default security provider GmsCore_OpenSSL
I/TetheringManager(13182): registerTetheringEventCallback:com.example.flutterconntest
W/Firestore(13182): (24.2.2) [OnlineStateTracker]: Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds
W/Firestore(13182):
W/Firestore(13182): 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.
W/Firestore(13182): (24.2.2) [WatchStream]: (9bc0685) Stream closed with status: Status{code=UNAVAILABLE, description=Channel shutdownNow invoked, cause=null}.
W/DynamiteModule(13182): Local module descriptor class for com.google.android.gms.providerinstaller.dynamite not found.
I/DynamiteModule(13182): Considering local module com.google.android.gms.providerinstaller.dynamite:0 and remote module com.google.android.gms.providerinstaller.dynamite:0
W/ProviderInstaller(13182): Failed to load providerinstaller module: No acceptable module com.google.android.gms.providerinstaller.dynamite found. Local version is 0 and remote version is 0.
W/ProviderInstaller(13182): Failed to report request stats: com.google.android.gms.common.security.ProviderInstallerImpl.reportRequestStats [class android.content.Context, long, long]
但是,在我运行 Android Go 和 Android 12 的物理设备上,它可以完美运行。
我有:
- 通过打开 Chrome/ map 等检查 Android 模拟器是否有互联网连接,并且它们都工作正常
- 已添加
<uses-permission android:name="android.permission.INTERNET"/>
和<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
到 AndroidManifest main & debug - 重新安装 Windows
- 仔细按照指南重新安装 Flutter、Android SDK、Android Studio、VSCode,以确保一切配置正确
- 设置
minSdkVersion 22
- 在不同的 Firebase 项目中尝试了不同的应用(它们在模拟器上均失败,但在真实设备上运行)
- 尝试了 Flutterfire CLI 和手动配置
- 使用各种硬件配置文件和 Android 版本(Play、非 Play、各种 API 级别)创建了各种模拟器
- 确保在 Firebase 中启用“匿名登录”
- 将 Firestore 规则设置为允许所有条件:
request.auth != null
- 检查了 Windows 中的网络设置以允许模拟器访问互联网,但模拟器与所有其他应用都能正常运行
- 尝试打开/关闭防火墙并允许 adb.exe 完全访问
- 将模拟器设置更改为信号良好、网络完整、充电、已插入等。
- 已添加
android:usesCleartextTraffic="true"
到AndroidManifest
请记住,物理设备从一开始就可以完美运行,而无需我做太多事情。但读了几天 Stack Overflow 后,我不知所措。
如果有人有任何我没有尝试过的想法,请告诉我:) 谢谢。
最佳答案
我也遇到了同样的问题。 Firebase 组件的工作有很大的延迟。我必须安装早期的模拟器版本。该问题仅出现在我的旧笔记本电脑上,我的电脑不受影响。
关于Flutter Firebase 在真实设备上运行,而不是在 Android 模拟器上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73534075/