XMPPFramework iOS потеряла сообщения при отключении интернета
Я работаю над приложением для чата, используя XMPPFramework, и все работает нормально.
Чтобы избежать потери сообщений при внезапном разрыве соединения, я реализовал xmpptreamManagementMemoryStorage и xmppMessageDeliveryRecipts, когда XMPP-соединение аутентифицировано. Вызываются связанные методы делегата, которые показывают, что xmppStreamManagement включен и получает раздел.
Я получаю квитанцию, когда XMPP подключен к серверу, однако, если приложение внезапно отключается от Интернета, некоторые сообщения не доставляются (точно метод делегирования didReceiveXmppMessage не вызывается)
Ниже вы найдете квитанции о доставке и код хранения. (Вызывается при аутентификации XMPP-соединения)
-(void)initXmppManagementMemoryStorage{
//XEP - 0198
if(!_xmppMemoryStorage){
_xmppMemoryStorage = [[XMPPStreamManagementMemoryStorage alloc] init];
}
if(!_xmppStreamManagment){
_xmppStreamManagment = [[XMPPStreamManagement alloc] initWithStorage:_xmppMemoryStorage];
[_xmppStreamManagment addDelegate:[ChatManager getSingleton] delegateQueue:dispatch_get_main_queue()];
[_xmppStreamManagment activate:[ChatManager getSingleton].xmppStream];
_xmppStreamManagment.autoResume = YES;
_xmppStreamManagment.ackResponseDelay = 0.2;
[_xmppStreamManagment requestAck];
[_xmppStreamManagment automaticallyRequestAcksAfterStanzaCount:1 orTimeout:0];
[_xmppStreamManagment automaticallySendAcksAfterStanzaCount:1 orTimeout:0];
[_xmppStreamManagment enableStreamManagementWithResumption:YES maxTimeout:1];
[_xmppStreamManagment sendAck];
[[ChatManager getSingleton].xmppStream registerModule:_xmppStreamManagment];
}
[self initXmppMessageDeliveryRecipts];
}
-(void)initXmppMessageDeliveryRecipts{
if(!_xmppMessageDeliveryRecipts){
_xmppMessageDeliveryRecipts =[[XMPPMessageDeliveryReceipts alloc] initWithDispatchQueue:dispatch_get_main_queue()];
_xmppMessageDeliveryRecipts.autoSendMessageDeliveryReceipts = true;
_xmppMessageDeliveryRecipts.autoSendMessageDeliveryRequests = true;
[_xmppMessageDeliveryRecipts addDelegate:self delegateQueue:dispatch_get_main_queue()];
[_xmppMessageDeliveryRecipts activate:[ChatManager getSingleton].xmppStream];
}
}