Swift: получение данных из удаленного уведомления

У меня есть приложение для обмена сообщениями, которое получает данные с сервера посредством push-уведомлений. На следующем рисунке вы можете увидеть процесс, а также проверить, где он вышел из строя:

Я много исследовал эту проблему, но не нашел универсального решения.

Одно решение, которое я получаю, - это использовать молчаливое уведомление, обсужденное здесь, чтобы получить данные до их отображения и сохранить Но я не нашел, как показать уведомление от делегата приложения, как только я получил молчаливое уведомление.

Пожалуйста, поправьте меня, если я где-то концептуально ошибаюсь.

Обновление: одна из проблем заключается в том, что приложение: didReceiveRemoteNotification: fetchCompletionHandler: вызывается только тогда, когда

  1. приложение находится на переднем плане
  2. пользователь нажимает на уведомление

Но когда пользователь не щелкает уведомление, приложение: didReceiveRemoteNotification: fetchCompletionHandler: не вызывается, и я не могу найти способ сохранить данные, присутствующие в уведомлении.

2 ответа

Есть буксировщики, 1) Фон 2) Закрытое состояние

Если приложение находится в Background State, вы должны включить Background Fetch, тогда этот метод будет вызываться, когда приложение находится в фоновом режиме application:didReceiveRemoteNotification:fetchCompletionHandler:

Когда приложение closed или же killed пользователем вышеописанный метод не сработает, для этого вы можете использовать VoIP техника.

didReceiveIncomingPushWithPayload метод будет вызываться всякий раз, когда приходит удаленное уведомление

Вы можете найти более подробную информацию о VoIP здесь

Ваш вопрос: "Получить данные из удаленных уведомлений, когда приложение находится на переднем плане", если я не ошибаюсь, вы можете использовать эти два метода для получения данных из удаленных уведомлений в фоновом и переднем режимах приложений.

//  Notification will present call back
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    completionHandler([.alert, .sound, .badge])

    // Handle your data here
    print("Notification data: \(notification.request.content.userInfo)")
}

@available(iOS 10.0, *)
//  Notification interaction response call back
func userNotificationCenter(_ center: UNUserNotificationCenter,
                            didReceive response: UNNotificationResponse,
                            withCompletionHandler completionHandler: @escaping () -> Void) {

    // Handle your data here
    print("Notification data: \(response.notification.request.content.userInfo)")

}
Другие вопросы по тегам