我知道这是一个旧的帖子,但是由于我目前正在iOS上使用XMPP,所以必须说XMPP内置了消息存档支持。
我下载了iOS的XMPP框架,在其中有一个标记为XEP-0136的文件夹。在XCode中导入文件夹,并通过在实例化XMPP客户端的类中使用以下代码来激活客户端侧的归档功能:
xmppMessageArchivingStorage = [XMPPMessageArchivingCoreDataStorage sharedInstance]
xmppMessageArchivingModule = [[XMPPMessageArchiving alloc] initWithMessageArchivingStorage:xmppMessageArchivingStorage]
下面这行代码可以帮助你避免向XMPP服务器发送特定于存档的部分,因为服务器很可能会回复“service-not-implemented”。
[xmppMessageArchivingModule setClientSideMessageArchivingOnly:YES]
[xmppMessageArchivingModule activate:xmppStream]
[xmppMessageArchivingModule addDelegate:self delegateQueue:dispatch_get_main_queue()]
完成了。从那一刻起,消息(发送和接收)将被存储在框架创建的表中。
如果您需要更多信息,请评论,我会回复您。
@PraviJay
我是这样做的:
-(void)testMessageArchiving{
XMPPMessageArchivingCoreDataStorage *storage = [XMPPMessageArchivingCoreDataStorage sharedInstance];
NSManagedObjectContext *moc = [storage mainThreadManagedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"XMPPMessageArchiving_Message_CoreDataObject"
inManagedObjectContext:moc];
NSFetchRequest *request = [[NSFetchRequest alloc]init];
[request setEntity:entityDescription];
NSError *error;
NSArray *messages = [moc executeFetchRequest:request error:&error];
[self print:[[NSMutableArray alloc]initWithArray:messages]];
}
-(void)print:(NSMutableArray*)messages{
@autoreleasepool {
for (XMPPMessageArchiving_Message_CoreDataObject *message in messages) {
NSLog(@"messageStr param is %@",message.messageStr);
NSXMLElement *element = [[NSXMLElement alloc] initWithXMLString:message.messageStr error:nil];
NSLog(@"to param is %@",[element attributeStringValueForName:@"to"]);
NSLog(@"NSCore object id param is %@",message.objectID);
NSLog(@"bareJid param is %@",message.bareJid);
NSLog(@"bareJidStr param is %@",message.bareJidStr);
NSLog(@"body param is %@",message.body);
NSLog(@"timestamp param is %@",message.timestamp);
NSLog(@"outgoing param is %d",[message.outgoing intValue]);
}
}
}
希望这有所帮助 :)