Вызов IOS Sinch, когда приложение находится в автономном режиме с использованием APN(получить ранее инициированный клиент)

Я успешно интегрировал Sinch SDK, и он прекрасно работает, когда приложение открыто, теперь я обрабатываю вызов, когда мое приложение находится в автономном режиме.

Используя метод, описанный ниже, я могу увидеть push-пары и отправляю эту push-пару на сервер для доставки push .

- (void)call:(id<SINCall>)call shouldSendPushNotifications:(NSArray *) pushPairs {

}

В методе Appdelegate.m didFinishLaunchingWithOptions () я получаю конкретную полезную нагрузку.

 NSDictionary* remotePush = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    NSLog(@"%@",remotePush);
    if (remotePush) {
        NSLog(@"Entery ****");
        // Extract the Sinch-specific payload from the Apple Remote Push Notification
        NSString* payload = [[remotePush valueForKey:@"aps"] valueForKey:@"SIN"];

    //    [[userInfo valueForKey:@"aps"] valueForKey:@"content-available"];
        NSLog(@"Payload :%@",payload);
        // Get previously initiated Sinch client
        id<SINClient> client = _client;
        NSLog(@"Client ID %@",[client userId]);
        id<SINNotificationResult> result = [client relayRemotePushNotificationPayload:payload];
        NSLog(@"Result :%@",result);
        if (result.isCall && result.callResult.isTimedOut) {
            // Present alert notifying about missed call
        } else if (!result.isValid) {
            // Handle error
        }
    }

Вот полные данные Push-уведомлений:

{
        aps =     {
            SIN = "AgEBdeibxmJBSK2Y7Nh/fz50VMhVBVQMKzkxODg0NzE4MjQx";
            alert = "";
            "content-available" = 1;
            type = 2;
        };
    }

Подойдя к этому коду:

// Get previously initiated Sinch client
    id<SINClient> client = _client;
    NSLog(@"Client ID %@",[client userId]);

Когда я печатаю идентификатор клиента, это Nil. Как мне получить предварительно инициированный Sinch клиент? Поскольку приложение закрыто, экземпляр клиента освобождается.

1 ответ

Решение

Вы должны сохранить пользовательский идентификатор самостоятельно, а затем, когда приложение перезапускается, инициализировать SinchClient с идентификатором пользователя, который вы сохранили при последнем закрытии приложения.

Самое простое, вероятно, использует NSUserDefaults и сохранение поля "userId", которое вы пишете, когда пользователь входит в систему, и удаляете, если пользователь выходит из вашего приложения.

Например, при запуске:

[[NSUserDefaults standardUserDefaults] setObject:userId forKey:@"userId"];

а затем, когда ваше приложение запускается через APN:

NSString *persistedUserId = [[NSUserDefaults standardUserDefaults] objectForKey:@"userId"];
if (persistedUserId != nil) {
  _client = [Sinch clientWithApplicationKey:APPLICATION_KEY
                          applicationSecret:APPLICATION_SECRET
                            environmentHost:ENVIRONMENT
                                     userId:persistedUserId];
}
Другие вопросы по тегам