Я помітив, що на iOS 11 beta 2 безшумні сповіщення не надсилаються application:didReceiveRemoteNotification:fetchCompletionHandler
незалежно від стану програми (фон / передній план).
Я реалізував UIApplicationDelegete
метод application:didReceiveRemoteNotification:fetchCompletionHandler
і надсилаю наступний безшумний поштовх
{
"aps": {
"content-available": 1
},
"mydata": {
"foo": "bar"
}
}
але метод делегата не викликається на iOS 11.
Він чудово працює в інших версіях iOS, а в розділі документації Налаштування тихого повідомлення не зазначається, що нічого іншого не потрібно робити.
Це помилка в iOS 11 чи я пропустив щось нове в iOS 11?
Зверніть увагу, що я не говорю про або не використовую UserNotification
рамки, які не повинні бути необхідними для надсилання тихих натискань.
Ось зразок проекту, який ілюструє проблему (вам доведеться встановити власний ідентифікатор пакета)
Коли ви обідаєте зразковий проект та надсилаєте вище додаток на додаток, ви можете скористатися консоллю macOS, щоб переконатися, що натиск правильно подається на пристрій, а не в додаток.
ОНОВЛЕННЯ 10.08
Видається, що поведінка випадкова. Іноді після перезавантаження пристрою корисна навантаження доставляється правильно, але через деякий час вона перестає працювати.
Як видно на наведеному нижче скріншоті, натискання, позначене як 1, передається лише пристрою, а кнопка 2 (після перезавантаження пристрою) також надходить у додаток.
ОНОВЛЕННЯ 14.08 - iOS 11 Beta 6
Ще та ж поведінка. Ще одна річ, яка повинна працювати, але не - це наступна. Коли схема програми встановлена на "Зачекайте запуску виконуваного файлу", тихий поштовх повинен розбудити додаток і запустити його у фоновому режимі.
ОНОВЛЕННЯ 21.08 - iOS 11 Beta 7
Все ж та сама поведінка і не оновлення від Apple у звіті про помилки.
ОНОВЛЕННЯ 29.08 - iOS 11 Beta 8
Ще та сама проблема. Кроки для відтворення, якими я зараз користуюся, є такими:
- У схемі проекту Xcode виберіть "Зачекайте запуску виконуваного файлу"
- Додайте точку розриву в
didReceiveRemoteNotification: fetchCompletionHandler
- Запустіть додаток на пристрої
- Надішліть вищезгаданий безшумний поштовх
Очікується : Додаток переведено з призупиненого стану у фоновий режим і didReceiveRemoteNotification: fetchCompletionHandler
викликається
Фактично : нічого не відбувається
ОНОВЛЕННЯ 06.09 - iOS 11 Beta 10
У мене все ще таке ж баггі поведінка. Квиток від Apple було оновлено наступною відповіддю:
Відносини розробників Apple 6 вересня 2017 р., 22:42 Інженерія надала наступні відгуки щодо цього питання:
Нам вдалося запустити зразок програми та перевірити поведінку. Ми не бачили жодних проблем, коли ми тестували це, як описано.
Натискання не гарантовано надходять до програми, коли він працює у фоновому режимі, а журнали тут вказують, що ми не віримо, що додаток використовується достатньо для його запуску.
Ми бачимо, що час від часу ми надаємо штовхання, коли умови хороші.
Ми вважаємо, що це поводиться правильно.
Оновлення 11.09
Мій звіт про помилки Apple був закритий і позначений як дублікат, 33278611
який залишається відкритим
ОНОВЛЕННЯ 13.09 - iOS 11 GM
Завдяки коментарям kam800 (див. Нижче) я зробив ще тестування і придумав такі спостереження:
Здається, в iOS 11 з'явився новий демон, dasd DuetActivitySchedulerDaemon
який або повністю відкидає передачу даних або затримує доставку даних:
Доставка відкладена
Журнали консолей
default 13:11:47.177547 +0200 dasd DuetActivitySchedulerDaemon CANCELED: com.apple.pushLaunch.net.tequilaapps.daylight:C03A65 <private>! lifecycle com.apple.duetactivityscheduler
default 13:11:47.178186 +0200 dasd DuetActivitySchedulerDaemon Removing a launch request for application <private> by activity <private> default com.apple.duetactivityscheduler
default 12:49:04.426256 +0200 dasd DuetActivitySchedulerDaemon Advancing start date for <private> by 6.5 minutes to Wed Sep 13 12:55:31 2017 default com.apple.duetactivityscheduler
default 13:21:40.593012 +0200 dasd DuetActivitySchedulerDaemon Activity <private>: Optimal Score 0.6144 at <private> (Valid Until: <private>) scoring com.apple.duetactivityscheduler
default 13:21:40.594528 +0200 dasd DuetActivitySchedulerDaemon Setting timer (isWaking=1, activityRequiresWaking=0) between <private> and <private> for <private> default com.apple.duetactivityscheduler
Проблеми з перенесеною доставкою
- Коли передача передачі даних відкладається і програма запускається, передача даних передається лише після досягнення дати доставки, яка в майбутньому може становити кілька хвилин . Це повністю перемагає мета використання даних, щоб підтримувати вміст нового додатка до наступного запуску. Я ще раз цитую тут документацію Apple:
"Безшумні сповіщення покращують роботу користувачів, допомагаючи постійно оновлювати додаток, навіть коли воно не працює."
- Коли дві передачі даних надсилаються до призупиненої програми, їх відкладає iOS 11 замість того, щоб прокидатися безпосередньо. Коли час доставки буде досягнуто, подається лише останній поштовх даних! Попередні натискання втрачаються і не передаються методом делегата, що призводить до втрати даних.
Доставка відмінена
Журнали консолей
default 13:35:05.347078 +0200 dasd DuetActivitySchedulerDaemon com.apple.pushLaunch.net.tequilaapps.daylight:C03A65:[
{name: ApplicationPolicy, policyWeight: 50.000, response: {Decision: Must Not Proceed, Score: 0.00}}
], FinalDecision: Must Not Proceed} scoring com.apple.duetactivityscheduler
Скасовано проблеми з доставкою
У цьому випадку поштовх даних повністю втрачається і ніколи не постачається на iOS 11, тоді як він був доставлений правильно на iOS 10.
ОНОВЛЕННЯ 19.09 - iOS 11 GM
Я також помітив, що коли програма стоїть на передньому плані, а сповіщення не надходить у додаток, я бачу в консолі такі журнали:
default 08:28:49.354824 +0200 apsd apsd <private>: Received message for enabled topic '<private>' onInterface: NonCellular with payload '<private>' with priority 10 for device token: NO courier-oversized com.apple.apsd
fault 08:33:18.128209 +0200 dasd Foundation <NSXPCConnection: 0x151eee460> connection from pid 55: Exception caught during decoding of received message, dropping incoming message.
Exception: Exception while decoding argument 0 (#2 of invocation):
Exception: value for key 'NS.objects' was of unexpected class 'NSNull'. Allowed classes are '{(
NSArray,
NSData,
NSString,
NSNumber,
NSDictionary,
NSUUID,
_DASActivity,
NSSet,
_DASFileProtection,
NSDate,
NWParameters,
NWEndpoint
)}'. general com.apple.foundation.xpc
"content-available": 1
, а додаток на передньому плані, зворотний виклик не буде запускатися.