【发布时间】:2022-05-07 22:15:46
【问题描述】:
我正在尝试将 iOS 设备连接到 Firebase Auth 和 RealTime Database Emulator。
问题是,我可以通过 Firebase Admin 在本地机器上使用 NodeJS 连接和使用模拟器(通过 http://localhost:9000?ns=my-project)。
我还可以将 iOS 设备连接到远程 Firebase 服务器……但在本地它不起作用。它会引发一堆随机错误,如下所示(当我尝试完成注册/身份验证时):
Error Domain=NSURLErrorDomain Code=-1004 "无法连接到 服务器。" NSLocalizedDescription=无法连接到服务器。, NSErrorFailingURLStringKey=http://192.168.1.3:9099/www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=myKeyGoesHere
和
可选(错误域=com.firebase.core 代码=1“无法获取最新 查询 FQuerySpec 的值(路径:/news,参数:{}),客户端离线 没有活动的侦听器,也没有匹配的磁盘缓存条目”
这里是 firebase.json:
{
"database": {
"rules": "database.rules.json"
},
"emulators": {
"auth": {
"port": 9099
},
"database": {
"port": 9000
},
"ui": {
"enabled": true
}
}
}
我更改了规则以防万一:
{
"rules": {
".read": true,
".write": true
}
}
但事实并非如此。
这是我尝试在我的 iOS 应用程序(我的 FirebaseManager 类)中连接到数据库的方法:
init(){
Auth.auth().useEmulator(withHost:"192.168.1.3", port:9099)
}
private lazy var newsNodeRef:DatabaseReference? = {
guard let urlString = getBaseURL() else {return nil}
let node = LocalConstants.kNewsRef // this has value of 'news'
return Database.database(url: urlString).reference(withPath: node)
}()
private func getBaseURL()->String?{
let environment = Environment()
guard let connectionProtocol = environment.configuration(PlistKey.firebaseConnectionProtocol), let baseURL = environment.configuration(PlistKey.firebaseDatabaseURL) else {return nil}
let urlString = "\(connectionProtocol)://\(baseURL)"
return urlString // this produces something like 'http://192.168.1.3:9000?ns=my-project' (its fetched from Configuration Settings file based on selected environment)
}
问题是,如果我只是更改环境(它会自动更改基本 url),则完全相同的设置适用于远程服务器。
我还在 info.plist 中允许不安全的 http 加载,只是为了确定它是否不是这样,但仍然不起作用。
这是我在运行模拟器时在控制台中看到的:
这里有什么问题?
【问题讨论】:
-
我认为 firebase 模拟器中存在错误。我认为您没有错过诸如您的设备和计算机连接到同一个 wi-fi 网络之类的细节。我做了一些试验,得到了以下结果。该模拟器不适用于 iOS 12 及更早版本的 Firebase 身份验证和存储。 Firestore 正在运行。我还没有尝试过 iOS 13,但它在当前的 iOS 版本上运行良好。当您在 Xcode 模拟器中使用 iOS 12 进行尝试时,您会看到同样的错误。
-
是的,我和我的 Mac 连接在同一个 Wifi 上......说到 iOS,我在说话的那一刻是最新版本,15.3.1 @İsaDiliballı 在我的情况下,iPhone模拟器与 Firebase 模拟器一起正常工作。
-
有这个问题的人很多。我有同样的问题。我的结论是模拟器不能在真实设备上运行。有一个关于这个问题的问答,我找不到链接。谷歌员工有答案,问题在于解决方法。
-
@İsaDiliballı 实际上我得到了它的工作。但我也发现了与本地网络访问提示相关的整个事情的一个相当大的问题。如果有兴趣,您可以查看我的答案中的 Dev Portal 链接以获取更多详细信息。
标签: ios swift firebase firebase-realtime-database firebase-authentication