Я знаю, что это старая ветка, но поскольку я сейчас работаю с XMPP на iOS, я должен сказать, что в XMPP есть встроенная поддержка архивирования сообщений.
Я скачал фреймворк XMPP для iOS и в нем есть папка с пометкой XEP-0136. Импортируйте папки в XCode и активируйте архивирование на стороне клиента, используя следующие строки кода в классе, в котором вы создаете клиент XMPP:
xmppMessageArchivingStorage = [XMPPMessageArchivingCoreDataStorage sharedInstance];
xmppMessageArchivingModule = [[XMPPMessageArchiving alloc] initWithMessageArchivingStorage:xmppMessageArchivingStorage];
следующая строка кода избавляет вас от отправки отдельных разделов архива на сервер xmpp
который, скорее всего, ответит не реализованным сервисом
[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]);
}
}
}
Надеюсь, это поможет:)