Flutter Firebase 在真实设备上运行,而不是在 Android 模拟器上运行

标签 flutter firebase google-cloud-firestore android-emulator

所以我写这篇文章是为了以防万一有人有任何想法。我无法让 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 组件的工作有很大的延迟。我必须安装早期的模拟器版本。该问题仅出现在我的旧笔记本电脑上,我的电脑不受影响。

https://developer.android.com/studio/emulator_archive

关于Flutter Firebase 在真实设备上运行,而不是在 Android 模拟器上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73534075/

相关文章:

dart - Flutter desktop/go-flutter-desktop Windows 平台打开Excel文件

sqlite - 在 Android 上后台获取 Flutter 访问数据库

javascript - Firebase 函数仅设置 Firebase 实时数据库中的第一个值

firebase - 仅获取 Firestore 中的文档名称

安卓 : Firestore component is not present

flutter - 我可以避免这个错误吗? E/InputMethodManager : Failed to get fallback IMM with expected . flutter.plugins.webviewflutter.InputAwareWebView

flutter - 如何删除为endDrawer自动添加的appbar中的尾随汉堡包

android - ListView 中的 Firebase 列表子项

ios - 使用 Firebase 和一些日期过滤器

firebase - Dart/Flutter Firestore 允许查询中的字段有多个值