通过iOS中的XMPP MessageArchiving保存XMPP多用户聊天消息

时间:2013-08-13 06:52:50

标签: ios core-data xmpp xmppframework

我正在使用XMPP在iOS中开发聊天应用程序。到目前为止,我已成功实现并测试了单个用户聊天场景,即发送,接收,保存和检索消息。

现在面临的问题是,现在处理多用户聊天方案时,接收它但无法使用XMPP MessageArchiving保存它们,因此无法检索它们。

任何经历过这个过程/问题的人?

提前谢谢

2 个答案:

答案 0 :(得分:2)

groupchat类型的邮件可能会保存在XMPPRoom.xcdatamodel中,您需要在xmpp设置中初始化XMPPRoomCoreDataStorage,如:

XMPPRoomCoreDataStorage *xmppRoomStorage = [[XMPPRoomCoreDataStorage alloc] init];

因此,该类实现了一个方法,将所有消息ROOM插入到正确的数据模型中(在我们的例子中,所有传出和传入的消息都保存在XMPPRoom.xcdatamodel中)。

- (void)insertMessage:(XMPPMessage *)message outgoing:(BOOL)isOutgoing forRoom:(XMPPRoom *)room stream:(XMPPStream *)xmppStream

更多XEP-0045信息http://xmpp.org/extensions/xep-0045.html

答案 1 :(得分:1)

您可以将此代码用于保存房间消息

NSString *xmppRoomJIDString = [NSString stringWithFormat:@"%@@conference.your_host", @"your_room_name"];

XMPPJID *roomJID = [XMPPJID jidWithString:xmppRoomJIDString];

XMPPRoomCoreDataStorage *roomCoreDataStorage = [XMPPRoomCoreDataStorage sharedInstance];

XMPPRoom *xmppRoom = [[XMPPRoom alloc]
            initWithRoomStorage:roomCoreDataStorage
            jid:roomJID
            dispatchQueue:dispatch_get_main_queue()];

[xmppRoom activate:xmppStream];
[xmppRoom addDelegate:self delegateQueue:dispatch_get_main_queue()];

[xmppRoom joinRoomUsingNickname:@"your_nicke_name" history:nil];
[xmppRoom fetchConfigurationForm];