Как вы получаете данные полезной нагрузки APNS из автоматического уведомления?

#swift #apple-push-notifications

#swift #apple-push-уведомления

Вопрос:

Я тестирую уведомления в XCode 12.2. Очень легко протестировать уведомления в стиле оповещений. Вы просто перетаскиваете их в свое приложение в симуляторе, и полезная нагрузка отображается в:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler завершениеHandler: @escaping (UIBackgroundFetchResult) -> Void) { notificationsDispatcher.process(userInfo) завершениеHandler(.newData) }

Теперь, при тестировании тихих уведомлений, я могу запустить автоматическое уведомление после установки «Фоновая выборка» в фоновых режимах. Затем я попадаю в:

 func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    debugPrint("hello silence ")
}
 

Это нормально, если я хочу, чтобы приложение выполняло что-то, не связанное с данными в полезной нагрузке. Как мне увидеть фактические данные полезной нагрузки apns?

Я пытаюсь получить доступ к этому примеру полезной нагрузки, который я использую:

 {
  "aps": {
    "category": "tasks",
    "content-available": 1,
    "thread-id": "tasks"
  },
  "resource": {
    "resourceType": null,
    "additionalProperties": {
      "taskIds": [
        "xxx"
      ],
      "classification": "xxx",
      "status": "xxx"
    }
  }
}
 

Ответ №1:

Имитация тихих push-уведомлений в настоящее время не работает, если content-available установлен флаг, поскольку он вызывает неправильный метод делегирования.

Если вы попытаетесь использовать реальное устройство и отправить реальное push-уведомление, оно должно вызвать application(:didReceiveRemoteNotification:fetchCompletionHandler:) делегата, и вы сможете получить доступ к полезной нагрузке. Об этом также есть несколько сообщений на форуме, например https://developer.apple.com/forums/thread/652649 .