Android smack 服务器收据确认

Posted

技术标签:

【中文标题】Android smack 服务器收据确认【英文标题】:Android smack server receipt ack 【发布时间】:2016-02-02 19:02:00 【问题描述】:

我正在尝试使用 XMPP 制作聊天应用程序。为此,我参考了this tutorial,并成功实现了它。但是现在我无法让服务器接收到该特定消息并更新我的本地数据库。请给我任何想法如何做到这一点。

我正在使用 chatId 保存消息。那么我通过哪种方式获得这个回执消息ID?

【问题讨论】:

【参考方案1】:
    您需要通过消息ID保存您的消息,您可以通过message.getStanzaId()获取ID。

    您必须启用stream management。

    static 
        XMPPTCPConnection.setUseStreamManagementDefault(true);
        XMPPTCPConnection.setUseStreamManagementResumptiodDefault(true);
    
    

    当您发送消息时,您会为该消息添加一个 ack 侦听器,如下所示。

    try 
        if (mConnection.isSmEnabled()) 
            try 
                mConnection.addStanzaIdAcknowledgedListener(message.getStanzaId(), new StanzaListener() 
                    @Override
                    public void processPacket(Stanza packet) throws NotConnectedException 
                        updateMessageStatus(packet);
                    
                );
             catch (StreamManagementException.StreamManagementNotEnabledException e) 
                e.printStackTrace();
            
        
        mConnection.sendStanza(message);
     catch (NotConnectedException e) 
        e.printStackTrace();
    
    

    现在,在 updateMessageStatus(packet) 方法中,您可以通过 id (packet.getStanzaId()) 在数据库中找到消息,并将状态从“待处理”更新为“已发送”。

    请注意,您的服务器也需要启用流管理。

【讨论】:

“请注意,您的服务器也需要启用流管理”是什么意思。就我而言,我使用的是 ejabberd 服务器? 只要确保您的 Ejabberd 配置中的 stream_management 为 true。 @Haven:感谢您的帮助,是否也可以通过流管理将 ack 从接收客户端发送到服务器? @SarthakMittal SM 将 ack 从客户端发送到服务器本身,您不需要做任何额外的实现。 嗨@Haven,smackLibVersion 4.3 没有上述方法。您能否分享一下我们需要在 4.3 版中使用哪种方法来确认节。提前致谢。【参考方案2】:
connection.setUseStreamManagement(true);

它将在客户端启用流管理 (XEP-198)。

http://xmpp.org/extensions/xep-0198.html#acking

注意:只有在服务器支持 XEP-198 时才有效。

【讨论】:

嗨@TheKalpit,您能否分享任何参考如何在android中实现节确认。提前致谢。

以上是关于Android smack 服务器收据确认的主要内容,如果未能解决你的问题,请参考以下文章

Apple 推送通知 - 收货收据

如何在 smack 中实现消息确认

使用 PayPal Express Checkout 听取买家的“收据确认”

无法使用 Smack 4.1 从 Android 连接 apache vysper XMPP 服务器

在android中使用smack进行群聊中的“服务器无响应”异常

使用 Openfire 服务器和 XMPP(SMACK)客户端的 Android 聊天应用程序 [关闭]