XMPP + iOS已发送,SENT已知的SEEN收据未知

时间:2015-05-04 03:44:12

标签: ios objective-c xmpp

我已经完成了XEP 0184并完成了以下实施。

  1. 如果连接了XMPP并且发送了数据包,那么我将每条消息的状态设置为SENT(✔︎),如果我没有得到以下回调。

    -(void)xmppStream:(XMPPStream *)sender didReceiveError:(id)error
    
  2. 如果我从目标C中实现的XEP 0184获得收到的状态,我将状态设置为已发送(✔︎✔︎)

  3.   

    RECV:<消息xmlns =" jabber:client"从=" +122232322@wer.com/2323"   到=" +3343232322@wer.com/2223"郎="" ><收到   的xmlns ="瓮:XMPP协议:收据" id =" avv-33343" />< / message>

    1. 但我的问题是如何显示每条消息的SEEN状态为readh XMPP 0079即Advanced Messaging协议正在执行此操作。但我在目标C中找不到。
    2. 有人可以帮忙吗?如果我的方向是正确的,我错过了什么可以让我知道吗?

      非常感谢代码段指南。

      这是我的实施。

      使用堆栈文档帮助我添加了以下行以获取送达回执。

      XMPPMessageDeliveryReceipts* xmppMessageDeliveryReceipts = [[XMPPMessageDeliveryReceipts alloc] initWithDispatchQueue:dispatch_get_main_queue()];
      xmppMessageDeliveryReceipts.autoSendMessageDeliveryReceipts = YES;
      xmppMessageDeliveryReceipts.autoSendMessageDeliveryRequests = YES;
      [xmppMessageDeliveryReceipts activate:self.xmppStream];
      

      现在由于这个原因,我得到了send和RECV xml的以下响应。

        

      发送:111111111,用于avv-33343 Id消息。    RECV:<消息xmlns =" jabber:client"从=" +122232322@wer.com/2323"   到=" +3343232322@wer.com/2223"郎="" ><收到   的xmlns ="瓮:XMPP协议:收据" id =" avv-33343" />< / message>

      但这只是向我提供消息已发送的信息,但是如何发送上述SEEN收据以便让发件人知道另一个最终用户已经确认+看到该消息。

      像这样...... RECV:<看过xmlns =" urn:xmpp:收据" id =" 222-4444" />

1 个答案:

答案 0 :(得分:0)

对于看到状态使用相同的功能,如发送一条带有相同ID的正常消息,收到消息并且您希望在发件人设备上看到标记, 当发送方设备收到静态消息@" to @ fromSeen"具有相同的发送/传递消息的消息ID,当接收器在db中已存在msg id时,您的目的就会解决。

发送状态代码

NSString *bodymessageString = [NSString stringWithFormat:@"to@fromSeen"];
        NSString *str_loginUser = [NSString stringWithFormat:@"%@@%@", [[NSUserDefaults standardUserDefaults]valueForKey:@"mobile"],kXMPPServer ];
        NSString *str_OtherUser = [NSString stringWithFormat:@"%@@%@",str_OtherUserRegName,kXMPPServer];


        NSXMLElement *body = [NSXMLElement elementWithName:@"body"];
        [body setStringValue:bodymessageString];

        NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
        [message addAttributeWithName:@"type" stringValue:@"chat"];
        [message addAttributeWithName:@"from" stringValue:str_loginUser];
        //                    [[[delegate xmppStream] myJID] bare]
        [message addAttributeWithName:@"to" stringValue:str_OtherUser];

        //          NSString *messageID= [XMPPStream generateUUID];
        [message addAttributeWithName:@"id" stringValue:str_msgID];

        //            NSXMLElement *request = [NSXMLElement elementWithName:@"request" xmlns:@"urn:xmpp:receipts"];
        //            [message addChild:request];
        [message addChild:body];

        [[delegate xmppStream] sendElement:message];

        [ChatData GetUpdateToDatabase:str_msgID :@"Seen"];

appdelegate文件中检查消息状态的代码

if ([message isChatMessageWithBody])
{
if ([msg isEqualToString:@"to@fromSeen"])
{
   BOOL is_Exist;
   is_Exist = [ChatData  GetAllReadyAvailable :message.elementID];
   if (is_Exist == YES)
   {
     NSString *str_status = [ChatData getstatusChatBy:message.elementID];
     if (![str_status isEqualToString:@"Seen"])
     {
        [ChatData GetUpdateToDatabase:message.elementID :@"Seen"];
     }
   }
 }
 else
 {
   BOOL is_Exist;
  is_Exist = [ChatData  GetAllReadyAvailable :message.elementID];
            if (is_Exist == NO)
            {
              // Store message in DB
            }
  }
}
else if ([message hasReceiptResponse])
{
}
else if([message isErrorMessage])
{}