我使用Spark( http://www.igniterealtime.org/projects/spark/index.jsp)来测试我的iOS聊天客户端.
我发现Spark在Openfire服务器日志中发送的消息XML格式如下:
<message ID="nBT3N-161" to="aaa@demo.com/7beebb67" from="bbb@demo.com/Spark 2.6.3" type="chat"> <body>testing message ...</body> <thread>FIoMFD</thread> <x xmlns="jabber:x:event"><offline/><composing/></x></message>
XML格式的消息具有ID:
ID="nBT3N-161"
和线程ID:
<thread>FIoMFD</thread>
和其他信息:
<x xmlns="jabber:x:event"><offline/><composing/></x>
但是,当我使用XMPPSteam发送消息时,Openfire日志中的消息XML格式如下:
<message type="chat" to="bbb@demo.com/Spark 2.6.3" from="aaa@demo.com/7beebb67"> <body>tttttttttttttttt</body></message>
消息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在asmack(https://github.com/Flowdalic/asmack)中是否有像ChatManager这样的createChat?
谢谢
解决方法 您可以使用[XMPPStream generateUUID]或 – [XMPPStream generateUUID]方法或任何其他您自己的方法为您的消息生成唯一ID.线程元素不是致命的.你可以使用或不使用它.
具有命名空间jabber:x:event的XML元素在XEP-0022中定义. AFAIK XMPPFramework没有实现它.但是你可以自己实现它.您可以在以下位置找到相关信息:XEP-0022 Message Events.正如您所见,不再推荐使用此扩展程序:
Note: More modern protocol extensions for this functionality have been defined in Chat State Notifications (XEP-0085) 07001 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.
所以,你的最终代码可能是这样的:
- (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]; }}总结
以上是内存溢出为你收集整理的ios – XMPPFramework – 如何创建消息/对话线程全部内容,希望文章能够帮你解决ios – XMPPFramework – 如何创建消息/对话线程所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)