【问题标题】:firebase emulators with flutter app on real android device在真正的 Android 设备上使用 Flutter 应用程序的 Firebase 模拟器
【发布时间】:2021-07-19 09:01:06
【问题描述】:

我有在真正的安卓设备上运行的颤振应用程序。我正在使用身份验证、firestore、存储、云功能。我正在尝试使用 firebase 模拟器,但没有运气。以下是我尝试过的事情:

在 Flutter 的主函数中,我调用了这个函数:

Future<void> useEmulators() async {
  // this is the ip of my mac on the router
  final ip = "192.168.1.133";
  await FirebaseAuth.instance.useAuthEmulator(ip, 9099);
  await FirebaseStorage.instance.useStorageEmulator(ip, 9199);
  FirebaseFirestore.instance.useFirestoreEmulator(ip, 8080, sslEnabled: false);
  FirebaseFunctions.instanceFor(region: 'us-east4')
       .useFunctionsEmulator(ip, 5001);
}

我从我的 main() 中调用这个函数,如下所示:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  // this is where the function is called
  await useEmulators();

  FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);

  final sharedPreferences = await SharedPreferences.getInstance();
  await preloadSVGs();
  final hiveDbService = HivedbService();
  await hiveDbService.init();
  return runApp(
    ProviderScope(
      // observers: [Logger()],
      overrides: [
        sharedPreferencesProvider.overrideWithValue(sharedPreferences),
        hiveDbServiceProvider.overrideWithValue(hiveDbService),
      ],
      child: App(),
    ),
  );
}

然后我像这样更新了 firebase.json:

{
  "firestore": {
    "rules": "firestore.rules",
    "indexes": "firestore.indexes.json"
  },
  "functions": {
    "predeploy": ["npm --prefix \"$RESOURCE_DIR\" run lint"],
    "source": "functions",
    "runtime": "nodejs12"
  },
  "storage": {
    "rules": "storage.rules"
  },
  "emulators": {
    "auth": {
      "host": "192.168.1.133",
      "port": 9099
    },
    "functions": {
      "host": "192.168.1.133",
      "port": 5001
    },
    "firestore": {
      "host": "192.168.1.133",
      "port": 8080
    },
    "ui": {
      "enabled": true,
      "port": 4000
    },
    "pubsub": {
      "host": "192.168.1.133",
      "port": 8085
    },
    "storage": {
      "host": "192.168.1.133",
      "port": 9199
    }
  }
}

我像这样更新了 AndroidManifest.xml:

    <application android:usesCleartextTraffic="true">

    </application>

我这样运行模拟器:

firebase emulators:start

当我尝试注册时,没有任何反应。
我希望创建一个新的身份验证记录或文档,但没有任何反应。该应用程序会等待一段时间,然后超时。

谁能告诉我我做错了什么??

提前致谢。

【问题讨论】:

    标签: firebase flutter firebase-tools


    【解决方案1】:

    我终于设法从我的 android 设备访问 firebase 模拟器。终于解脱了。我有两个问题。

    我修复了我的 firestore.json 中的 ip 地址,如下所示:

    {
      "firestore": {
        "rules": "firestore.rules",
        "indexes": "firestore.indexes.json"
      },
      "functions": {
        "predeploy": ["npm --prefix \"$RESOURCE_DIR\" run lint"],
        "source": "functions",
        "runtime": "nodejs12"
      },
      "storage": {
        "rules": "storage.rules"
      },
      "emulators": {
        "auth": {
          "host": "0.0.0.0",
          "port": 9099
        },
        "functions": {
          "host": "0.0.0.0",
          "port": 5001
        },
        "firestore": {
          "host": "0.0.0.0",
          "port": 8080
        },
        "ui": {
          "enabled": true,
          "port": 4000
        },
        "pubsub": {
          "host": "0.0.0.0",
          "port": 8085
        },
        "storage": {
          "host": "0.0.0.0",
          "port": 9199
        }
      },
      "hosting": [
        {
          "target": "public",
          "public": "web",
          "ignore": ["firebase.json", "**/.*", "**/node_modules/**"]
        },
        {
          "target": "admin",
          "public": "admin",
          "ignore": ["firebase.json", "**/.*", "**/node_modules/**"]
        }
      ]
    }
    

    我遇到的另一个问题是我没有使用 wifi。您必须有 wifi,并且您的手机和模拟器应该在同一个路由器上。

    我终于可以在带有本地 firebase 的真实设备上测试我的代码了。

    【讨论】:

      猜你喜欢
      • 2020-05-23
      • 2017-07-30
      • 2012-09-18
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多