Вызов 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];
}