Фоновая работа для iOS7, но не для iOS8

У меня есть приложение, которое использует фоновой push, все работает нормально, когда приложение работает на устройстве с iOS 7, но толкатели не доставляются в приложение, если его в фоновом режиме, если он работает на устройстве с iOS 8 ,

У меня это как регистрационный код:

- (void) registerForRemoteNotification { // Check for the presense of iOS8 notification API if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerForRemoteNotifications)]) { NSLog(@"iOS8 detected"); [[UIApplication sharedApplication] registerForRemoteNotifications]; } else { // iOS version < 8 [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; } } 

Я также пробовал этот вариант:

 - (void) registerForRemoteNotification { // Check for the presense of iOS8 notification API if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerForRemoteNotifications)]) { NSLog(@"iOS8 detected"); [[UIApplication sharedApplication] registerForRemoteNotifications]; UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert; UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:mySettings]; } else { // iOS version < 8 [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; } } 

Это содержание полезной нагрузки push:

 aps = { "content-available" = 1; somePayload = "The payload"; sound = ""; }; 

Это то, что происходит:

 1) On iOS7 when app is in the foreground -> push is delivered to the app as expected 2) On iOS7 when app is in the background -> push is delivered to the app as expected 3) On iOS8 when app is in the foreground -> push is delivered to the app as expected 4) On iOS8 when app is in the background -> push is NOT delivered to the app 5) On iOS8 when app is in the foreground and running via Xcode -> push is delivered to the app as expected 6) On iOS8 when app is in the background and running via Xcode -> push is delivered to the app as expected 

(В каждом случае didRegisterForRemoteNotificationsWithDeviceToken: получает invoked и didFailToRegisterForRemoteNotificationsWithError: нет.)

Я не знаю, если это имеет значение, но посмотрите на разницу между 4) и 6), я вижу разницу между тем, работает ли приложение через Xcode или нет.

Мой вопрос: почему push не доставляется в приложение для случая 4)? Он работает для iOS7, и AFAICT – код для регистрации удаленных уведомлений при работе на iOS8 является правильным (и действительно, он работает, если выполняется приложение через Xcode, следовательно, оно должно быть правильным), следовательно, почему он не работает, когда приложение работает независимо от Xcode на iOS8?

** ОБНОВИТЬ. После публикации щедрости для этого я пошел на форум разработчиков Apple. Кажется, у многих людей есть похожие проблемы. Для некоторых Wi-Fi должен быть включен, чтобы получить фоновые нажатия, для меня, однако, это не работает – я должен заряжать телефон, чтобы получить их. Если он не заряжается (даже если батарея заполнена), они не доставляются. Apple говорит, что они делали в отношении фонового нажатия для iOS 8, является преднамеренным, а не ошибкой, но мой вывод заключается в том, что они либо напортачили, либо сделали что-то настолько нелогичное, чтобы считаться вином. Поэтому я надеюсь, что они поймут, что они сделали, и изменили его в будущей версии.

Если вы хотите, чтобы фон перешел на соответствующий форум разработчиков и прочитал некоторые соответствующие темы.

4 Solutions collect form web for “Фоновая работа для iOS7, но не для iOS8”

Я понял, что нужно для получения удаленных уведомлений на фоне в iOS8. Apple изменила методы, необходимые для этого. Во-первых, они устарели метод registerForRemoteNotificationTypes и теперь вы должны использовать registerForRemoteNotifications . Но это не все, что меняется – вам все равно придется указывать типы разрешенных уведомлений. Вот документация ( https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/#//apple_ref/occ/instm/UIApplication/registerForRemoteNotifications ):

Если вы хотите, чтобы ваши push-уведомления вашего приложения отображали предупреждения, воспроизводили звуки или выполняли другие действия, ориентированные на пользователя, вы должны вызвать метод registerUserNotificationSettings:, чтобы запросить типы уведомлений, которые вы хотите использовать. Если вы не вызываете этот метод, система автоматически подает все push-уведомления в ваше приложение. Поскольку в процессе регистрации учитываются предпочтительные параметры уведомления пользователя, запрос доступа к типам уведомлений, обращенных к пользователю, также не гарантирует, что они будут предоставлены. Чтобы узнать, какие настройки уведомлений доступны, используйте метод currentUserNotificationSettings.

currentUserNotificationSettings попробуйте вызвать currentUserNotificationSettings и вы увидите, что никаких типов уведомлений не допускается, поэтому неудивительно, что они не получены.

Попробуй это:

 [application registerForRemoteNotifications]; UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert; UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil]; [application registerUserNotificationSettings:mySettings]; 

Он делает это!

В моих приложениях для iOS7 и iOS8 работают следующие:

 if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)]) { // iOS 8 Notifications [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; [application registerForRemoteNotifications]; } else { // iOS < 8 Notifications [application registerForRemoteNotificationTypes: (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)]; } 

Надеюсь это поможет!

Попробуйте это, я обнаружил, что у меня была проблема с документацией на Яблоки, я использую Parse, и у нее есть лучший раздел для справки

 if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) { [Parse setApplicationId:@"asdasd" clientKey:@"asdasd"]; UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound); UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes categories:nil]; [application registerUserNotificationSettings:settings]; [application registerForRemoteNotifications]; } else { // Register for Push Notifications before iOS 8 [Parse setApplicationId:@"asdasd" clientKey:@"asdasd"]; [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)]; } 

Я думаю, вам нужно установить ключи доступа Push-уведомления.

aps-environment, получать push-уведомления в iOS

См. Эту ссылку.

  • Возможности push-уведомлений ios
  • Связь IOS9 voip
  • Уведомления Firebase, не работающие в iOS 11
  • Push Notifications: нет звука
  • Полезная нагрузка для уведомлений FCM для iOS
  • Будет ли iOS пробуждать мое приложение, когда я получаю молчание push-уведомления? (Когда приложение не работает)
  • Цель c cancelAllLocalNotifications не работает, когда приложение было в фоновом режиме
  • Как включить / отключить push-уведомление из моего приложения
  • RegisterForRemoteNotificationTypes заставляет пользовательский интерфейс зависать
  • Кнопка «Назад» исчезает после нажатия двух видов с помощью UINavigationController
  • Как показать количество уведомлений в значке приложения?
  • Interesting Posts

    Способ устранения ошибки UIGestureRecognizer после распознавания?

    Как использовать макросы prepeocessor в элементах раскадровки?

    Проблема Cloudkit с частной базой данных и подпиской?

    UIModalTransitionStylePartialCurl исчезает на iOS 8

    Знайте, прокручивается ли UICollectionView

    iAd не появляется после выпуска

    CGAffineTransform и масштабирование до центра изображения

    Xcode IOS 8.3 быстро, как проверить, подключен ли Bluetooth?

    Приглашение друга Facebook graph api принять обратный вызов (iOS)

    SDK для обмена сообщениями iOS

    Как очистить историю в WKWebView?

    Как вы подтверждаете, что строка содержит только цифры в Swift?

    Возможно ли распространять приложение Enterprise через Testflight, если получатели не должны создавать учетную запись?

    iOS: заголовок панели навигации не изменяется правильно, когда телефон вращается

    Добавить комментарий к заголовку файла изображения

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.