IOS запускает приложение в фоновом режиме после перезагрузки, если в UIBackgroundModes определено удаленное уведомление и новое push-уведомление?
У меня есть приложение iOS7, которое регистрируется для удаленного уведомления в фоновом режиме:
<key>UIBackgroundModes</key>
<array>
<string>remote-notification</string>
</array>
Он прекрасно работает до перезагрузки, и приложение получает это событие в фоновом режиме:
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
Но, похоже, после перезагрузки я больше не получаю это событие, пока не запусту приложение вручную.
Итак, вопрос: могу ли я сделать iOS7 для запуска моего приложения в фоновом режиме после перезагрузки, когда оно получает тихое push-уведомление для моего приложения? Мои push-уведомления не имеют поля "alert", только "contentAvailable" - может ли это быть причиной? Я видел такие приложения, как WhatsApp, которые могли получать и показывать push-уведомления сразу после перезагрузки, поэтому это выглядит выполнимо как минимум для "предупреждающих" уведомлений.
Я знаю, что могу использовать значительный мониторинг местоположения, чтобы перезапустить приложение в какой-то момент после перезагрузки, но я бы не хотел показывать значок местоположения на панели инструментов все время. Может ли режим фоновой выборки помочь с этим? Есть ли статистика, насколько быстро после перезагрузки будет выполнено приложение с режимом фоновой выборки?
1 ответ
Нет, это не сработает. Потому что ваше приложение будет в состоянии " Не запущено", когда вы перезагрузите устройство.
Согласно Apple Doc, новый многозадачный API(извлечение и удаленное уведомление) будет работать только тогда, когда приложение находится в состоянии приостановлено / фон / передний план. Если приложение находится в фоновом / переднем состоянии, то application:didReceiveRemoteNotification:fetchCompletionHandler
будет срабатывать. Если приложение находится в приостановленном состоянии, то -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
будет срабатывать. В вашем случае приложение находится в состоянии " Не работает", из-за этого application:didReceiveRemoteNotification:fetchCompletionHandler
никогда не срабатывает.
Пожалуйста, обратитесь Apple Doc для получения дополнительной информации о состояниях приложения.