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

 灰包蛋啦_199 发布于 2023-02-08 09:03

我正在使用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有类似ChatManagercreateChatasmack(https://github.com/Flowdalic/asmack)?

谢谢

1 个回答
  • 您可以使用+[XMPPStream generateUUID]-[XMPPStream generateUUID]方法或任何其他方法为您的消息生成唯一ID .

    线程元素不是致命的.你可以使用或不使用它.

    具有命名空间的XML元素jabber:x:eventXEP-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];
        }
    }
    

    2023-02-08 09:06 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有