我正在使用XMPPFramework(https://github.com/robbiehanson/XMPPFramework)在iOS聊天客户端上工作,任何人都可以帮我聊聊和留言.我使用Spark(http://www.igniterealtime.org/projects/spark/index.jsp)来测试我的iOS聊天客户端.
我发现Spark在Openfire服务器日志中发送的消息XML格式如下:
testing message ... FIoMFD
XML格式的消息具有id:
id="nBT3N-161"
和线程ID:
FIoMFD
和其他信息:
但是,当我使用XMPPSteam发送消息时,Openfire日志中的消息XML格式如下:
tttttttttttttttt
消息XML格式不包括消息ID,线程ID和xmlns信息.我的代码如下:
- (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]; [imManager.xmppStream sendElement:message]; self.messageTextField.text = @""; [self.tView reloadData]; } }
我是否错过了什么或做错了什么?如何在消息中生成这些信息(例如:message id,thread,xmlns ..)?
或者我如何创建消息线程或对话线程?
请问XMPPFramework有类似ChatManager
到createChat
在asmack
(https://github.com/Flowdalic/asmack)?
谢谢
您可以使用+[XMPPStream generateUUID]
或-[XMPPStream generateUUID]
方法或任何其他方法为您的消息生成唯一ID .
线程元素不是致命的.你可以使用或不使用它.
具有命名空间的XML元素jabber:x:event
在XEP-0022中定义.AFAIK XMPPFramework没有实现它.但是你可以自己实现它.您可以在以下位置找到信息:XEP-0022消息事件.正如您在那里看到的,不再推荐使用此扩展名:
注意:此功能的更多现代协议扩展已在聊天状态通知(XEP-0085)1中为作曲和离线事件以及在传递和显示事件的消息传递收据(XEP-0184)[2]中定义; 那些规格取代了这一规格.
所以,你的最终代码可能是这样的:
- (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]; } }