Как да управлявате статуса Онлайн/Офлайн/Отсъства във фонов режим PUBNUB + IOS?

Искаме да внедрим онлайн/офлайн с помощта на Pubnub framework в iOS, но приложението не работи във фонов режим повече от 10 минути. Опитахме се да приложим това чрез активиране на функцията за местоположение и тя работи добре. Но клиентът не иска да активира услугата за местоположение за тази цел. И така, как ще успеем да активираме изпълнението във фонов режим безкрайно? (QUE 1)

И ако искаме да поставим статус Online/Offline/Away в нашия код

Къде трябва да покажем, Онлайн: Когато потребителят отвори приложението Офлайн: Когато потребителят затвори приложението от заден план ИЛИ изтрие приложението Навън: Когато потребител докоснете началния бутон и приложението е във фонов режим.

Как ще приложим това (особено състояние ОТСТЪПЕН и офлайн)?(QUE 2)

Има ли друг начин за управление на онлайн/офлайн/навън? (Без Pubnub ) (QUE 3) Ако да, моля, опишете начина.

Как ще управляваме онлайн/офлайн/навън с помощта на уеб услуга? Кога наричаме това уеб услуги? (QUE 4)

Използваме почти 3-4 годишен базов код. Така че трябва ли да добавим друг параметър в plist, за да активираме приложението във фонов режим за повече време? (QUE 5)

Моля, насочете ни.


person ChatApp    schedule 29.05.2015    source източник
comment
здрасти Имаме решение за вас и скоро ще предоставим някои бележки.   -  person Stephen Blum    schedule 29.05.2015
comment
Моля, свържете се тук на [email protected], бихме искали да научим малко повече за вашето приложение и оттам можем да предложим най-доброто решение за вас.   -  person gurooj    schedule 29.05.2015


Отговори (2)


С PubNub Presence имате най-добрия начин да осигурете тази функция в приложението си, но поради начина, по който iOS обработва приложението, което отива във фонов режим, може или не може да имате възможност да актуализирате това състояние (зависи от това как приложението е конфигурирано да работи).

Но много просто, чрез активиране на присъствие за вашите PubNub ключове, когато клиент абонира се за канал, събитие join се изпраща на всички други абонати, които слушат присъствие в този канал.

Когато приложението премине на заден план, ако имате възможност да го направите, можете да отмяна на абонамент за всички канали, за които клиентът е абониран, и събитие leave ще бъде изпратено до всички абонати на този/тези канали, които слушат събития за присъствие.

И ако приложението бъде унищожено или отиде на заден план, където нямате възможност да се обадите на unsubscribe, когато приложението е офлайн/прекъснато за по-дълго от конфигурирания период на сърдечен ритъм, тогава timeout (еквивалентно на leave събитие) ще бъде изпратено до всички абонати, слушащи събития за присъствие.

сърдечният пулс е по подразбиране 5 минути, но можете да конфигурирате това на по-ниска настройка като 60 секунди (или по-кратко за случаи на употреба, които изискват това, но никога по-малко от 15 секунди).

Ако искате вашият сървър да слуша събития за присъствие, тогава ще искате да използвате нашите Webhooks за присъствие (документи, очаквайте скоро). Моля, вижте този StackOverflow тема за това как да внедрите PubNub Presence Webhooks и как да конфигурирате вашите PubNub ключове да ги използват.

person Craig Conover    schedule 31.08.2015

Има два сценария:

  • Потребителят поставя приложението във фонов режим
  • Потребителят излиза от приложението.

Това, което трябва да направите, е да получите известие, когато настъпят следните събития:

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(appWillResignActive) 
                                             name:UIApplicationWillResignActiveNotification 
                                           object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(appWillTerminate) 
                                             name:UIApplicationWillTerminateNotification 
                                           object:nil];

Сега, в съответните методи, задайте състояние с помощта на API на PubNub

-(void)appWillResignActive
{
    // Sample dictionary
    NSDictionary *dicState = @{ @"userName" : senderName, // Optional
                                @"status"   : @"Away", // Or whatever
                                @"isTyping" : @FALSE // Optional
                              };

    [AppDel.client setState: dicState
                    forUUID: senderId // current user's UUID
                  onChannel: KPubNubChannelName // channel name
             withCompletion: ^(PNClientStateUpdateStatus *status) 
     {
         NSLog(@"%@", status);
     }];
}

След като състоянието се актуализира в PubNub, всички абонати на този канал ще бъдат уведомени, т.е. ще бъде извикан следният метод:

- (void)client:(PubNub *)client didReceivePresenceEvent:(PNPresenceEventResult *)event 
{
    if (![event.data.channel isEqualToString:event.data.subscription])
    {
        // Presence event has been received on channel group stored in event.data.subscription.
    }
    else 
    {
        // Presence event has been received on channel stored in event.data.channel.
    }

    if (![event.data.presenceEvent isEqualToString:@"state-change"]) {

        NSLog(@"%@ \"%@'ed\"\nat: %@ on %@ (Occupancy: %@)", event.data.presence.uuid, 
              event.data.presenceEvent, event.data.presence.timetoken, event.data.channel, 
              event.data.presence.occupancy);
    }
    else {

        NSLog(@"%@ changed state at: %@ on %@ to: %@", event.data.presence.uuid, 
              event.data.presence.timetoken, event.data.channel, event.data.presence.state);
    }
} 

Когато бъде извикан, ще трябва да актуализирате съответно своя източник на данни, което ще отразява актуализацията на състоянието.

person NSPratik    schedule 19.01.2018
comment
За OFFLINE режим скоро ще направя EDIT, ако го накарам да работи. - person NSPratik; 19.01.2018