我正在使用Firebase iOS SDK,我的部分应用体验是群聊。我为每个群组聊天都有一个类,并存储对firebase对象的引用,如下所示:
self.firebaseMessages = [[Firebase alloc] initWithUrl:[NSString stringWithFormat:@"%@/Message/%@", FIREBASE_URL, chat.objectId]];
然后观察我感兴趣的每个事件。这非常有效。我使用自定义身份验证与JWTs,我的问题是当令牌过期或用户注销/我重新进行身份验证。此时,除非我完全重启我的应用程序,否则回调将停止为我正在观察的事件触发。我知道re-auth是成功的,因为我在AuthEventWithBlock中得到了成功的回调和authdata。当我设置值时,数据库更新和其他客户端会收到这些更新。只有客户重新认证不再接收更新。
我已经愚弄了我的安全规则,以消除这种可能性:
"Message": {
"$message": {
".read": "auth != null",
".write": "auth != null"
}
}
我在根网址上重新验证:
Firebase *ref = [[Firebase alloc] initWithUrl:FIREBASE_URL];
[ref authWithCustomToken:responseObject[@"auth_token"] withCompletionBlock:^(NSError *error, FAuthData *authData) {
我也尝试过对每个邮件网址进行重新验证。还尝试重新实例化我的所有Firebase对象。
另请注意,我在root上使用[ref unauth]来记录用户并模拟令牌过期。
我错过了什么?
答案 0 :(得分:0)
加藤的评论是解决方案。 如果您丢失身份验证并重新验证,请务必重新建立事件侦听器。
同样值得一提的是,当重新建立侦听器时,所有数据也将重新流入。如果您在屏幕上流式传输来自这些侦听器的数据(如群聊),您可能会收到已显示的数据。但是很容易处理。