我正在使用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
的选项来启动仿真器?还有其他解决方案吗?
答案 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).