我在数据库引用上有一个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];
}];
}
}];
答案 0 :(得分:0)
您可以致电[[FIRDatabase database] goOffline];
立即触发要关闭的连接。这将触发服务器上的onDisconnect
处理程序,尽管在运行之前可能会有延迟。
答案 1 :(得分:0)
您必须断开并重新连接Firebase连接,并删除它们之间的所有观察者。
断开连接后,断开连接 onDisconnectRemoveValue ,您必须重新连接以保持Firebase存活,以便继续进行其他对话,但是在重新连接之前,必须删除所有观察者以确保 connectedRef 不要在重新连接时再次触发并再次添加您的值。
[[FIRDatabase database] goOffline];
if (_connectedRef) {
[_connectedRef removeAllObservers];
_connectedRef = nil;
}
[[FIRDatabase database] goOnline];