【问题标题】:Is there any way to achieve the "Message Seen" function with Strophe on Ejabberd?有什么方法可以在 Ejabberd 上使用 Strophe 实现“Message Seen”功能?
【发布时间】:2015-09-01 09:56:23
【问题描述】:

我只是想知道是否有适用于 Ejabberd 的消息传递收据的 Strophe 插件?

我正在尝试了解消息传递回执的工作原理,是否有任何来自 Strophe 的文档/插件?

【问题讨论】:

    标签: ejabberd strophe


    【解决方案1】:

    要实现Message Delivery Receipt,您可以使用strophe.receipts.js 插件。使用这个,消息的发送者可以请求一些通知,消息已经被传递到由预期接收者控制的客户端。

    使用此收据插件,您无法实现“看到消息”功能。为此,您必须使用 XEP 扩展 XEP-0333 Chat Markers 协议。到目前为止,还没有任何 Strophe 插件来实现此功能。

    要实现“Message Seen”功能,可以查看XEP-0085 Chat State Notification XEP 扩展协议。 StropheJs 通过strophe.chatstates.js 插件支持这一点。此外,通过使用聊天状态通知,您可以推断出消息已被收件人阅读,如果他们在消息传递后的任何时间变为活动状态。

    【讨论】:

    • 但是如果接收方读取消息时发送方不在线,那么chatstates插件就无法分辨?只有当两个用户都在线时,聊天状态才有效?
    • @John 当用户离线时,第一件事是不会发送消息。因此,没有收件人可以阅读未送达的消息。当收件人重新联机时,则消息已传递。稍后当他打开该消息时,我们可以说收件人对该聊天处于活动状态,我们可以将该消息标记为“已看到”。
    • @John 如果发件人想发送消息,他肯定需要上线。所以收件人可能离线,但发件人不能。
    • 我明白,但如果发件人上线 - 发送消息,然后下线,收件人上线阅读消息,然后下线。消息被阅读后,发件人上线。 chatstates 插件将无法检测到这一点,对吧?
    • @John 它会检测到。当接收者处于该聊天的活动状态时,聊天状态起作用。如果收件人在发件人离线时阅读消息,那么聊天状态就像它的行为一样工作。当发送者重新上线时,它会同步消息的聊天状态,并通知发送者消息已被阅读。
    【解决方案2】:

    从 Strophe 插件代码来看,我认为收据插件不允许直接支持“Message Seen”功能。据我了解,它确实支持可靠性部分并将未确认的消息保留在队列中。但是,目的只是在一段时间后没有确认的情况下重新发送消息。

    https://github.com/strophe/strophejs-plugins/blob/master/receipts/strophe.receipts.js

    恐怕您需要自定义代码才能在 XMPP 协议功能之上在 Javascript 中实现该功能。

    【讨论】:

    • 嗨,对不起,我病了一周左右,我看了看收据和聊天状态插件,然后我想到了;我在想是否有可能只使用 ping 插件/发送消息来创建“seen”功能。当我发送消息时,我也发送一个 ping,ping 处理程序位于聊天页面内,如果它发送一个 pong 回来,我知道它已经被看到。至于收件人何时离线,当消息发送时,当收件人在线并阅读消息时,它可以发送一条“消息”,如图所示。所以当发送者在线时,它会得到看到的消息。
    • 如果我在上面那样做,那么我不必添加收据和聊天状态插件,但使用我已经在使用的 on_message 和 ping - 我假设,所以它减少了代码它必须加载并运行。
    猜你喜欢
    • 1970-01-01
    • 2015-01-28
    • 2014-09-28
    • 2022-09-24
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2020-06-24
    相关资源
    最近更新 更多