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];
     }

}

0 ответов

Другие вопросы по тегам