You can generate a unique ID for your messages using +[XMPPStream generateUUID]
or -[XMPPStream generateUUID]
methods, or any other your own method.
Thread element is not fatal. You may use it or not.
XML elements with the namespace jabber:x:event
are defined in XEP-0022. AFAIK XMPPFramework does not implement it. But you can implement it on your own. You can find info at: XEP-0022 Message Events. As you can see there, this extension is not recommended anymore:
Note: More modern protocol extensions for this functionality have been defined in Chat State Notifications (XEP-0085) 1 for the composing and offline events and in Message Delivery Receipts (XEP-0184) [2] for the delivered and displayed events; those specifications supersede this one.
So, your final code can be something like:
- (IBAction)didSendingMessage:(id)sender
{
NSString *messageStr = self.messageTextField.text;
if([messageStr length] > 0) {
NSXMLElement *body = [NSXMLElement elementWithName:@"body"];
[body setStringValue:messageStr];
NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
[message addAttributeWithName:@"type" stringValue:@"chat"];
[message addAttributeWithName:@"to" stringValue:@"bbb@demo.com/Spark 2.6.3"];
[message addChild:body];
NSXMLElement * thread = [NSXMLElement elementWithName:@"thread" stringValue:@"SomeThreadName"];
[message addChild:thread];
[message addAttributeWithName:@"id" stringValue:[imManager.xmppStream generateUUID]];
[imManager.xmppStream sendElement:message];
self.messageTextField.text = @"";
[self.tView reloadData];
}
}