在iOS上断开与Firebase的连接

时间:2016-11-04 15:51:48

标签: ios objective-c firebase firebase-realtime-database

我在数据库引用上有一个onDisconnectRemoveValue来显示用户当前正在“聊天”的时间,并且我想在用户离开聊天视图控制器时断开与FIRDatabase的连接 - 如何触发此断开连接功能没有完全退出应用程序?

FIRDatabaseReference *connectedRef = [self.dbRef child:@".info/connected"];
    [connectedRef observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
        if (snapshot.value) {
            NSString *path = [NSString stringWithFormat:@"connections/%@/participants",self.refID];
            FIRDatabaseReference *participantsRef = [self.dbRef child:path];
            [participantsRef setValue:@{@"avatar":@"avatarURL",@"handle":[self senderDisplayName]} withCompletionBlock:^(NSError * _Nullable error, FIRDatabaseReference * _Nonnull ref) {
                [ref onDisconnectRemoveValue];
            }];
        }
    }];

2 个答案:

答案 0 :(得分:0)

您可以致电[[FIRDatabase database] goOffline];立即触发要关闭的连接。这将触发服务器上的onDisconnect处理程序,尽管在运行之前可能会有延迟。

答案 1 :(得分:0)

您必须断开并重新连接Firebase连接,并删除它们之间的所有观察者。

断开连接后,断开连接 onDisconnectRemoveValue ,您必须重新连接以保持Firebase存活,以便继续进行其他对话,但是在重新连接之前,必须删除所有观察者以确保 connectedRef 不要在重新连接时再次触发并再次添加您的值。

[[FIRDatabase database] goOffline];

if (_connectedRef) {
    [_connectedRef removeAllObservers];
    _connectedRef = nil;
}

[[FIRDatabase database] goOnline];