在委托方法中唯一标识通过XMPP发送的消息的正确方法?

时间:2014-08-09 14:45:53

标签: ios objective-c xmpp xmppframework

我正在使用XMPPFramework编写iOS聊天应用程序,我想知道创建新消息的最佳方法是什么,以便我可以映射在其中一个委托方法中返回的XMPPMessage到发送的原始邮件。我想这样做,所以我可以告诉发送消息成功或不成功(所以我可以缓存并重新发送)。

当用户点击客户端上的发送密钥时,将调用以下代码来创建和发送消息:

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

NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
[message addAttributeWithName:@"type" stringValue:@"chat"];
[message addAttributeWithName:@"to" stringValue:recipientJID];
[message addChild:body];

[[self xmppStream] sendElement:message];

然后我将内容,收件人,时间戳等存储到数组中的自定义对象(基本上是message中的所有内容)。

我希望能够将数组中的对象与这些委托方法中返回的XMPPMessage对象进行匹配:

- (void)xmppStream:(XMPPStream *)sender didFailToSendMessage:(XMPPMessage *)message error:(NSError *)error
{

}

- (void)xmppStream:(XMPPStream *)sender didSendMessage:(XMPPMessage *)message
{

}

是否有一个属性我可以在message变量中添加某种唯一标识符,该变量通过XMPPStream发送,然后显示在传递给这些委托的XMPPMessage内方法

1 个答案:

答案 0 :(得分:2)

为什么不发送XMPPMessage而不是NSXMLElement?这样,didFailToSendMessagedidSendMessage中传递的对象将与您发送的对象相匹配。此外,您可以设置elementId来识别节(消息,智商或存在)

XMPPMessage *message = [XMPPMessage messageWithType:@"chat"
                                                 to:someJid
                                          elementID:elementId];

[[self xmppStream] sendElement:message];