Xmpp + openfire +服务器确认发件人

问题描述 投票:4回答:2

我正在开发IM应用程序。我想在当时获得认可

当Openfire服务器收到消息时

我使用了以下的渐变

//XMPP Gradles
compile 'org.igniterealtime.smack:smack-android:4.1.0'
compile 'org.igniterealtime.smack:smack-tcp:4.1.0'
compile 'org.igniterealtime.smack:smack-im:4.1.0'
compile 'org.igniterealtime.smack:smack-extensions:4.1.0'

注意:我已经浏览了每个StackOverflow链接,并得出结论:Openfire不支持XEP-0184,它只描述了一个交付收据的机制。

我也尝试了DeliveryReceiptManager并设置了他们的addReceiptReceivedListener,但它不起作用。

任何变通办法或建议将不胜感激。

android xmpp openfire smack
2个回答
0
投票

最好将公共侦听器附加到每个发送的消息,并相应地更新数据库(以及您的UI)。

为每个传出消息定义一个随机UUID:

String stanzaId = UUID.randomUUID().toString()

将监听器附加到您的消息:

xmppTcpConnection.addStanzaIdAcknowledgedListener(stanzaId , new StanzaListener()
{
    @Override
    public void processStanza(Stanza packet) throws SmackException.NotConnectedException, InterruptedException
    {
     // You can match your stanzaId here!
     // packet.getStanzaId()   
    }
});

加:

compile "org.igniterealtime.smack:smack-tcp:4.2.0"

得到XMPPTCPConnection对象。

更新:尝试在connect()对象上调用xmppTcpConnection之前添加侦听器。


0
投票

发送消息时附加DeliveryReceiptRequest.addTo(msg);

像这样

Message msg = new Message(oppositeUserId, Message.Type.chat);
msg.setBody(mMessageBody);
msg.setStanzaId(messageId);
msg.setFrom(loginUserId);

DeliveryReceiptRequest.addTo(msg);

mXMPPTCPConnection.sendStanza(msg);

XM PP delivery receipt manager.Java

public class XmppDeliveryReceiptManager implements ReceiptReceivedListener {


    private static final String TAG = XmppDeliveryReceiptManager.class.getSimpleName();

    Context mContext;


    public XmppDeliveryReceiptManager(Context mContext) {
       this.mContext = mContext;
       Log.d(TAG, "XmppDeliveryReceiptManager : initialized ");
    }

    @Override
    public void onReceiptReceived(String fromJid, String toJid, String receiptId, Stanza receipt) {
        Log.d(TAG, "onReceiptReceived : receiptId = " + receiptId);
        // do need full with "receiptId"         
    }
}

将其添加到您的XMPP配置中

/*  Add XMPP DeliveryReceiptManager */
ProviderManager.addExtensionProvider(DeliveryReceipt.ELEMENT,
            DeliveryReceipt.NAMESPACE, new DeliveryReceipt.Provider());
ProviderManager.addExtensionProvider(DeliveryReceiptRequest.ELEMENT,
            new DeliveryReceiptRequest().getNamespace(), new DeliveryReceiptRequest.Provider());

mXmppDeliveryReceiptManager = new XmppDeliveryReceiptManager(mContext);
mDeliveryReceiptManager = DeliveryReceiptManager.getInstanceFor(mXMPPTCPConnection);
mDeliveryReceiptManager.setAutoReceiptMode(DeliveryReceiptManager.AutoReceiptMode.always);
        mDeliveryReceiptManager.addReceiptReceivedListener(mXmppDeliveryReceiptManager);
© www.soinside.com 2019 - 2024. All rights reserved.