我正在使用robbiehanson/XMPPFramework作为我当前的项目,我可以向我名册中的人发送和接收消息,但现在我必须实现消息传递状态。我知道xep是0184而且我也包含在我的项目中,我很难利用它。
我在xep-0184 document中读到请求元素也必须包含在消息中,所以这是我的代码:
#import "XMPPMessage+XEP_0184.h"
.
.
.
NSXMLElement *body = [NSXMLElement elementWithName:@"body"];
[body setStringValue:messageStr];
NSXMLElement *request = [NSXMLElement elementWithName:@"request" xmlns:@"urn:xmpp:receipts"];
NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
[message addAttributeWithName:@"type" stringValue:@"chat"];
[message addAttributeWithName:@"to" stringValue:[defaults objectForKey:@"chatWith"]];
[message addChild:body];
[message addChild:request];
.
.
.
XMPPMessage *xm = [[XMPPMessage alloc]init];
NSLog(@"..1..%d",[xm hasReceiptRequest]); // Result = 0
NSLog(@"..2..%d",[xm hasReceiptResponse]); // Result = 0
NSLog(@"..3..%@",[xm extractReceiptResponseID]); // Result = (null)
NSLog(@"..4..%@",[xm generateReceiptResponse]); // Result = <message><received xmlns="urn:xmpp:receipts"></received></message>
请帮助我如何获得邮件传递状态。
答案 0 :(得分:2)
我想你忘了添加模块本身。 如果要添加XMPPModule(如XMPPMessageDeliveryReceipts),首先应将其添加到XMPPStream对象,然后可以使用其功能。
执行以下操作:
// Setup Message Delivery Recipts Object
XMPPMessageDeliveryReceipts* xmppMessageDeliveryRecipts = [[XMPPMessageDeliveryReceipts alloc] initWithDispatchQueue:dispatch_get_main_queue()];
xmppMessageDeliveryRecipts.autoSendMessageDeliveryReceipts = YES;
xmppMessageDeliveryRecipts.autoSendMessageDeliveryRequests = YES;
[xmppMessageDeliveryRecipts activate:xmppStream];
当xmppStream是您的主要XMPPFramework对象时。
希望我帮助过。