从本地网络访问Firebase模拟器

时间:2019-10-06 20:13:15

标签: firebase google-cloud-functions firebase-tools

我正在使用firebase emulators:start firebase命令在本地模拟函数。在iOS模拟器上可以正常工作,但是如果我使用同一网络中的真实android设备,则无法使用这些功能。我可以像这样访问5001端口:locahost:5001,但不能这样访问:192.168.x.x:5001

我的react-native expo项目中有以下代码:

export const functions = firebase.functions();
firebase.functions().useFunctionsEmulator('http://192.168.x.x:5001');

但是同样,如果我将最后一行更改为:

,这仅在模拟器上有效
firebase.functions().useFunctionsEmulator('http://localhost:5001');

是否可以使用--host命令中类似firebase serve的选项来启动仿真器?还有其他解决方案吗?

3 个答案:

答案 0 :(得分:17)

将firebase.json设置为

"emulators": {
    "functions": {
      "port": 5001,
      "host": "0.0.0.0"
    },
    "firestore": {
      "port": 8080
    },
    "database": {
      "port": 9000,
      "host": "0.0.0.0"
    },
    "hosting": {
      "port": 5000
    }
  }

“ 0.0.0.0”主机告诉您的计算机同时为网络使用本地主机和本地IP

检查Android FirebaseDatabase库更改日志(版本19.1.0解释了此新功能)https://raw.githubusercontent.com/firebase/firebase-android-sdk/6ae83de756628b933c7ddaf1153c14af0315c945/firebase-database/CHANGELOG.md

答案 1 :(得分:0)

以 Conner 的回答为基础 - 如果您在物理设备上进行测试,您将有更好的时间使用计算机的 IP 地址进行连接。您可以使用内置变量,而不是对其进行硬编码:Constants.manifest.debuggerHost?.split(":").shift()

在这里写了一个简短的解释:

https://dev.to/haydenbleasel/using-the-firebase-local-emulator-with-expo-s-managed-workflow-5g5k

答案 2 :(得分:-1)

要在与default: localhost不同的主机上进行监听,只需选中--help

$ firebase serve --help
Usage: serve [options]

start a local server for your static assets

Options:

-p, --port <port>   the port on which to listen (default: 5000) (default: 5000)
-o, --host <host>   the host on which to listen (default: localhost) (default: localhost)
--only <targets>    only serve specified targets (valid targets are: functions, hosting)
--except <targets>  serve all except specified targets (valid targets are: functions, hosting)
-h, --help          output usage information

在这种情况下:

firebase.functions().useFunctionsEmulator('http://0.0.0.0:5001');

firebase serve -o 0.0.0.0

因为0.0.0.0的意思是Current network (only valid as source address).