gpt4 book ai didi

ios - XMPPFramework - 如何创建消息/对话线程

转载 作者:可可西里 更新时间:2023-11-01 05:21:47 24 4
gpt4 key购买 nike

我正在使用 XMPPFramework ( https://github.com/robbiehanson/XMPPFramework ) 在 iOS 聊天客户端上工作,谁能帮我聊天和发消息。我使用 Spark ( http://www.igniterealtime.org/projects/spark/index.jsp ) 来测试我的 iOS 聊天客户端。

我在 Openfire 服务器日志中发现 Spark 发送的消息 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];
}
}

我是否遗漏了什么或做错了什么?我如何在消息中生成这些信息(例如:消息 ID、线程、xmlns ..)?

或者如何创建消息线程或对话线程?

XMPPFramework 是否在 asmack ( https://github.com/Flowdalic/asmack ) 中有类似 ChatManagercreateChat 的东西?

谢谢

最佳答案

您可以使用 +[XMPPStream generateUUID]-[XMPPStream generateUUID] 方法或您自己的任何其他方法为您的消息生成唯一 ID。

Thread 元素不是致命的。你可以使用它,也可以不使用它。

具有命名空间 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) 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.

所以,你的最终代码可以是这样的:

- (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 - 如何创建消息/对话线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20786678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com