2

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

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

有谁经历过这个过程/问题?

先感谢您

4

2 回答 2

2

具有groupchat类型的消息可能保存在 中XMPPRoom.xcdatamodel,您需要XMPPRoomCoreDataStorage在 xmpp 设置中初始化,例如:

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

于 2015-01-29T22:19:31.180 回答
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];
于 2016-06-28T06:48:26.433 回答