Я бью себя по голове. Я внедряю push-уведомления. Все работает нормально (push-уведомление получено, значок обновлен), но в iOS 13.3 приложение метода (_: didReceiveRemoteNotification: fetchCompletionHandler :) не вызывается, когда приложение находится в фоновом режиме. Если приложение находится на переднем плане или использует устройство iOS 12, вызывается метод. Я регистрируюсь для push-уведомлений следующим образом:
[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] registerForRemoteNotifications];
});
}
}];
Полезная нагрузка установлена на следующее
{"aps": {
"badge": 10,
"alert": "test",
"content-available": 1
}}
Я попытался добавить «Удаленные уведомления» и «Фоновая обработка» в качестве возможностей приложения во всех вариантах (только «Удаленные уведомления» / «Фоновая обработка», без каких-либо из этих возможностей, включающих оба) без каких-либо изменений. Я назначил делегата для UNUserNotificationCenter, но снова безуспешно. Я установил заголовки соответственно:
curl -v \
-H 'apns-priority: 4' \
-H 'apns-topic: xx.xxxxx.xxxx' \
-H 'apns-push-type: alert' \
-H 'Content-Type: application/json; charset=utf-8' \
-d '{"aps": {"badge": 10,"alert": "test", "content-available":1}}' \
--http2 \
--cert pushcert.pem \
https://api.sandbox.push.apple.com/3/device/1234567890
Из документов говорится, что этот метод вызывается, даже когда приложение находится в фоновом режиме:
Используйте этот метод для обработки входящих удаленных уведомлений для вашего приложения. В отличие от метода application: didReceiveRemoteNotification:, который вызывается только тогда, когда ваше приложение выполняется на переднем плане, система вызывает этот метод, когда ваше приложение работает на переднем или заднем плане.
Что мне здесь не хватает для iOS 13?
application(_:didReceiveRemoteNotification:withCompletionHandler:)
метод?Ответы:
Вы установили
у вас бэкэнд APS полезен?
Также необходимо убедиться, что вы включили фоновый режим в файле info.plist вашего приложения iOS.
источник
Я трачу билет поддержки, чтобы получить ответ на эту проблему.
Оказывается, что документация не является на 100% «действительной» для iOS 13 по этой теме. Устройство решает, просыпаться или нет. Хотя в документации указано немного другое.
Предпочтительный способ реализации Apple в качестве расширения уведомлений. После этого вы должны адаптировать полезную нагрузку для включения «mutable-content».
Позже я спросил службу поддержки, должен ли я подать радар, и они ответили «да».
источник
Внедрите,
didRegisterForRemoteNotificationsWithDeviceToken
а такжеdidFailToRegisterForRemoteNotificationsWithError
в делегате вашего приложения, чтобы проверить, если устройство имеет хорошее соединение с сервером APN Apple. Если это не так, перезапустите устройство и / или попробуйте установить соединение через другую сеть Wi-Fi и перезапустите приложение.источник
Этот метод делегата: -
вызывается, когда мы нажимаем на уведомление для iOS 13 и приложение находится в фоновом режиме.
источник
Вам необходимо реализовать расширение содержимого уведомлений
Поскольку я использовал OneSignal и его установочный код, он отлично работал для меня https://documentation.onesignal.com/docs/ios-sdk-setup
не уверен, что биты OneSignal имеют значение, но все равно добавляю их
источник