gpt4 book ai didi

ios - Firebase Chat 设置用户在线状态

转载 作者:行者123 更新时间:2023-11-28 11:03:34 25 4
gpt4 key购买 nike

我正在尝试在用户打开聊天时添加用户的在线状态。

public static func getFirebaseOnlineStatus(userRef: String) -> FIRDatabaseReference{
return FIRDatabase.database().reference()
.child("meta")
.child(userRef)
.child("last_seen")
}

在聊天VC中

private func userIsOnline() {

// Firebase make this user online
firebaseLastSeen = Constants.getFirebaseOnlineStatus(SMBUser.getCurrentUser().getId())
firebaseLastSeen.setValue("Online")
}

private func observerUserOnline(){
firebaseLastSeen.observeEventType(.Value, withBlock: { snapshot in
print(snapshot.value)
self.userIsOnline()
}, withCancelBlock: { error in
print(error.description)
})
}

这个逻辑对我来说似乎很糟糕,因为每次值更改时,我都会再次将值更改为 Online,因为如果我删除 observerUserOnline() 然后该值在 last_seen 中更新为 Online 但在 2-3 秒后,即使用户在该聊天中在线,它也会更改为 时间(unix格式).

有没有更好的方法来处理这个问题?

最佳答案

您可以使用发布-订阅模式。让我们了解什么是发布-订阅模式。

publish–subscribe is a messaging pattern where senders of messages, called publishers, do not program the messages to be sent directly to specific receivers, called subscribers, but instead characterize published messages into classes without knowledge of which subscribers, if any, there may be. Similarly, subscribers express interest in one or more classes and only receive messages that are of interest, without knowledge of which publishers, if any, there are.

来源:Wikipedia

下面是一个使用 RabbitMQ MQTT Adapter 的例子:

用户A的应用订阅主题“/topic/user-a”,用户B的应用订阅主题“/topic/user-b”,在线/离线状态发布到主题“/topic/presence”。在您的后端服务器上创建一个程序来订阅“/topic/presence”。如果有任何更新来自假设用户 A 然后将更新发布给用户 A 的所有 friend 。这样,用户 B 将收到用户 A 的在线/离线更新。

                User A             User B            PresenceListener

Subscribe /topic/user-a /topic/presence /topic/presence

Publish /topic/user-b /topic/presence friend list

这里真正的挑战是如何“离线”发布。一种情况是,如果用户在互联网仍处于事件状态时关闭应用程序,则应用程序可以将“离线”状态发布到服务器,但是当互联网停止工作时会发生什么?

让我们通过“遗嘱和遗嘱”(lwt)。

LWT messages are not really concerned about detecting whether a client has gone offline or not (that task is handled by keepAlive messages). LWT messages are about what happens after the client has gone offline.

LWT 消息可用于定义由代理代表客户端发布的消息,因为客户端处于离线状态且无法再发布。

来源:http://tuanpm.net/what-is-mqtt/

对于与存在服务类似的示例源代码,您可以查看我们在 Github 中提供的 Applozic Chat SDK 代码 https://github.com/AppLozic/Applozic-Android-SDK

关于ios - Firebase Chat 设置用户在线状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39688209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com