【问题标题】:How to implement Delayed Delivery (XEP-203) Smack如何实施延迟交付 (XEP-203) Smack
【发布时间】:2018-03-06 19:08:13
【问题描述】:

我知道DelayInformationManager 类,并且我知道这是实现此目的的类。但是,我不知道如何使用它,如何指定jid目的地,如何实际发送等等。

谁能给我一个简短的例子来展示它的用法?

【问题讨论】:

    标签: android xmpp smack


    【解决方案1】:

    使用以下你可以使用smack lib实现Delayed Delivery

    发送延迟交货收据

     public void sendReceipt(String toJID, String sender, final String stanzaID, final String id, final long millis, Message.Type msgType) {
    
        if(isConnected()){
    
            Message ack = null; //2017-11-17T15:21:50.063+00:00
            try {              
    
                String fromJidGroup = toJID;
                if(msgType == Message.Type.groupchat){
                    fromJidGroup = ActivityHelper.createJid(sender) ;
                }else{
                    fromJidGroup = toJID;
                }
    
               ack = new Message(JidCreate.from(fromJidGroup), Message.Type.chat); //msgType
               ack.addExtension(new DeliveryReceipt(id));
    
    
            } catch (XmppStringprepException e) {
                e.printStackTrace();
            }
            if(millis!=0) {
                DelayInformation delay = new DelayInformation(new Date(millis));
                ack.addExtension(delay);
            }
            if(stanzaID!=null){
                ack.setStanzaId(stanzaID);
            }
            try {
    
                if(connection.isSmEnabled() && connection!=null) {
    
                        //addStanzaIdAcknowledgedListener send successfully Receipt or not in server
                        connection.addStanzaIdAcknowledgedListener(ack.getStanzaId(), new StanzaListener() {
                            @Override
                            public void processPacket(Stanza stanza) throws SmackException.NotConnectedException, InterruptedException {
    
                                if(registerXmppListener!=null){
                                    registerXmppListener.onStanzaIdAcknowledgedReceived(stanza);
                                }
                            }
    
                        });
    
                }
    
                connection.sendStanza(ack);
    
            } catch (SmackException.NotConnectedException e) {
                e.printStackTrace();
            } catch (InterruptedException | StreamManagementException.StreamManagementNotEnabledException e) {
                e.printStackTrace();
            }
    
        }
    
    }
    

    接收Delayed Delivery,先用xmpp连接注册ReceiptReceivedListener

     private ReceiptReceivedListener mReceiptReceivedListener;
    
      mReceiptReceivedListener = new ReceiptReceivedListener() {
            @Override
            public void onReceiptReceived(Jid from, Jid to, String rec_id, Stanza stanza) {
                if(registerXmppListener!=null) {
    
                    Log.d("onReceipt","onReceipt stanza : " + stanza.toXML());
                    registerXmppListener.onDeliveryStatusReceived(from.toString(),to.toString(),rec_id,stanza);
                }
            }
        };
        mDeliveryReceiptManager.addReceiptReceivedListener(mReceiptReceivedListener);
    

    onDeliveryStatusReceived监听器

    public void changeMessageDeliveryStatus(String from, String to, String rec_id, Stanza stanza){
        if(stanza instanceof Message) {
            Message msg = (Message) stanza;
    
            String jid = "";
            if(msg.getType().equals(Message.Type.chat)){
                jid = ActivityHelper.getBareJID(from);
    
            }else if(msg.getType().equals(Message.Type.groupchat)){
                jid = ActivityHelper.getSenderFromGroup(from);
            }
    
            String sender="";
            long date = System.currentTimeMillis();
    
            String stanza_id=stanza.getStanzaId();
            int chat_type = 0;
            int isPrivate = ChatConstants.ISPRIVATE_NO;
    
            DelayInformation timestamp = (DelayInformation)msg.getExtension("delay", "urn:xmpp:delay");
            if (timestamp == null)
                timestamp = (DelayInformation)msg.getExtension("x", "jabber:x:delay");
            if (timestamp != null)
                date = timestamp.getStamp().getTime();
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 2017-01-01
      • 2020-09-18
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      相关资源
      最近更新 更多