【问题标题】:How to get the message delivary status using XMPP framework如何使用 XMPP 框架获取消息传递状态
【发布时间】:2014-01-18 02:15:21
【问题描述】:

我正在使用 XMPP 框架在用户之间进行聊天,聊天进行得很完美。现在我需要显示消息完美地传递到两个设备,例如(What's app messenger)。我没有得到任何教程。下面的代码表示当我们向其他用户发送消息时。

//Sending the message to the other user
 NSXMLElement *body = [NSXMLElement elementWithName:@"body"];
 [body setStringValue:txtChat.text];

 NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
 [message addAttributeWithName:@"type" stringValue:@"chat"];
 [message addAttributeWithName:@"to" stringValue:self.userjid];
 [message addChild:body];
 [[APPDELEGATE xmppStream] sendElement:message];

在使用 XMPP 框架检索消息时,我正在使用以下代码获取数据

- (void)loadarchivemsg
{        
    XMPPMessageArchivingCoreDataStorage *storage = [XMPPMessageArchivingCoreDataStorage sharedInstance];
    NSManagedObjectContext *moc = [storage mainThreadManagedObjectContext];
    NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"XMPPMessageArchiving_Message_CoreDataObject"
                                                         inManagedObjectContext:moc];
    NSFetchRequest *request = [[NSFetchRequest alloc]init];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(bareJidStr like %@) && (streamBareJidStr like %@)", self.userjid,[[NSUserDefaults standardUserDefaults] stringForKey:@"kXMPPmyJID"]];
    request.predicate = predicate;
    NSLog(@"%@",[[NSUserDefaults standardUserDefaults] stringForKey:@"kXMPPmyJID"]);
    [request setEntity:entityDescription];
    NSError *error;
    NSArray *messages_arc = [moc executeFetchRequest:request error:&error];

    [self print:[[NSMutableArray alloc]initWithArray:messages_arc]];    
}

- (void)print:(NSMutableArray*)messages_arc{
    @autoreleasepool {
        for (XMPPMessageArchiving_Message_CoreDataObject *message in messages_arc) {

            NSXMLElement *element = [[NSXMLElement alloc] initWithXMLString:message.messageStr error:nil];
            XMPPMessage *message12=[[XMPPMessage alloc]init];
            message12 = [message message];
  }
}

这就是我发送消息和检索消息的原因,您能帮我如何检索消息的传递状态吗?等待您的宝贵答案。

【问题讨论】:

    标签: ios xmppframework


    【解决方案1】:

    @Romance 你需要在connect方法中添加下面的代码

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

    发送消息时记得添加这些行

    NSString *messageID=[self.xmppStream generateUUID];
    
            NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
            [message addAttributeWithName:@"id" stringValue:messageID];
            [message addAttributeWithName:@"type" stringValue:@"chat"];
            [message addAttributeWithName:@"to" stringValue:[NSString stringWithFormat:@"senderJabberID_Here"]];
    
            [message addChild:body];
    

    希望对你有帮助:)

    【讨论】:

    • 感谢您的回复。我按照您提供的流程使用了您的代码,但现在我怀疑如何知道传递的消息。作为回应,我如何识别。您能提供一些代码。感谢您回复@Rohit Pathak
    • SENT MESSAGE STANZA 嘿哟 RECEIVE MESSAGE STANZA 看接收消息节你得到标记与您发送的相同消息 ID
    • 如果您没有收到 RECEIVE MESSAGE STANZA 这意味着其他用户不会设置 xmppMessageDeliveryRecipts.autoSendMessageDeliveryReceipts = YES;请同时检查发件人的代码
    • @RohitPathak 我已实现此功能并成功运行。我很困惑如何决定消息是传递还是阅读?因为没有任何规定来存储消息状态传递。你能建议我做什么吗?
    • @JayeshSojitra xmpp 不提供任何已读消息状态的收据,只要您收到这样的 RECEIVED RECEIPT 仅表示receipt标签中上述id的XMPP消息的投递。
    猜你喜欢
    • 2011-12-09
    • 2017-12-22
    • 1970-01-01
    • 2011-05-18
    • 2019-01-30
    • 1970-01-01
    • 2016-05-16
    • 2014-11-11
    • 2015-12-20
    相关资源
    最近更新 更多