Я видел слишком много вопросов о том, что тихое push-уведомление не работает, если устройство не подключено к xcode, но я не мог найти реального ответа. Я использую Silent APN для запуска процесса в фоновом режиме, а затем запускаю локальное push-уведомление
Сервер отправляет эту информацию:
"_metadata" = { bagde = 1; pushText = "semeone has sent you a message!!"; sender = "semeone"; }; aps = { "content-available" = 1; };
И _metadata - это настроенная информация для запуска локального уведомления, я не включил значок, pushText ... в aps, потому что это тихое push-уведомление.
Клиент должен получить информацию в didReceiveRemoteNotification,
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { if(application.applicationState != UIApplicationStateActive ){ if([userInfo[@"aps"][@"content-available"] intValue]== 1) //it's the silent notification { //start a background task UIBackgroundTaskIdentifier preLoadPNTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ NSLog(@"Background task to start a process "); }]; //end completionHandler regarding to fetchCompletionHandler completionHandler(UIBackgroundFetchResultNewData); // doing my process...... and fire a local notification if(preLoadPNTask){ NSLog(@"End Background task "); [[UIApplication sharedApplication] endBackgroundTask:preLoadPNTask]; preLoadPNTask = 0; } return; } else { NSLog(@"didReceiveRemoteNotification it's NOT the silent notification "); completionHandler(UIBackgroundFetchResultNoData); return; } } else { if(preLoadPNTask){ NSLog(@"End Background task "); [[UIApplication sharedApplication] endBackgroundTask:preLoadPNTask]; preLoadPNTask = 0; } completionHandler(UIBackgroundFetchResultNewData); } }
Он отлично работает, когда устройство подключается к xcode, но когда это не так, didReceiveRemoteNotification не запускается :(
Любые идеи?
Заранее спасибо!!