Как получить данные полезных данных уведомления, когда приложение находится в полученном уведомлении в фоновом режиме - PullRequest
0 голосов
/ 08 мая 2018

Я успешно получил уведомление, когда приложение находится в фоновом режиме, но метод обратного вызова Notification didReceiveRemoteNotification не вызывается в iOS 11 для использования Swift4. Я хочу получать данные полезных данных уведомления, когда приложение находится в полученном уведомлении в фоновом режиме. Я отправляю уведомление через консоль Firebase. Когда приложение открыто, вызывается willPresent . Но в фоновом режиме ни один метод не называется Я использую код: -

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any])
    {
        print(userInfo)
         saveNotificationDetail(userInfo: userInfo)
    }
func notificationIntegrate(application: UIApplication)
    {
        FirebaseApp.configure()
        Messaging.messaging().shouldEstablishDirectChannel = true
        Messaging.messaging().delegate=self
        // [START register_for_notifications]
        if #available(iOS 10.0, *) {
            // For iOS 10 display notification (sent via APNS)
            UNUserNotificationCenter.current().delegate = self

            let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
            UNUserNotificationCenter.current().requestAuthorization(
                options: authOptions,
                completionHandler: {_, _ in })
        } else {
            let settings: UIUserNotificationSettings =
                UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
            application.registerUserNotificationSettings(settings)
        }

        application.registerForRemoteNotifications()

        // [END register_for_notifications]
        // Add observer for InstanceID token refresh callback.
        NotificationCenter.default
            .addObserver(self, selector: #selector(AppDelegate.tokenRefreshNotification),
                         name: NSNotification.Name.InstanceIDTokenRefresh, object: nil)
    }
@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate {

    // Receive displayed notifications for iOS 10 devices.
    func userNotificationCenter(_ center: UNUserNotificationCenter,
                                willPresent notification: UNNotification,
                                withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        let userInfo = notification.request.content.userInfo

        // Print full message.
        print(userInfo)
        saveNotificationDetail(userInfo: userInfo)
        completionHandler(UNNotificationPresentationOptions.alert)
        // Change this to your preferred presentation option
    }

    func userNotificationCenter(_ center: UNUserNotificationCenter,
                                didReceive response: UNNotificationResponse,
                                withCompletionHandler completionHandler: @escaping () -> Void)
    {
        let userInfo = response.notification.request.content.userInfo
        print(userInfo)

    }
}

1 Ответ

0 голосов
/ 08 мая 2018

Возможны проблемы с настройкой конфигурации в push-уведомлениях. Проверьте следующие шаги:

1. Убедитесь, что вы включили remote-notifcation и background-fetch для своего приложения на вкладке Capabilities.

enter image description here

2. Полезные данные push-уведомлений состоят из ключа content-available:

Доступный ключевой контент - это новая функция, и именно эта клавиша делает возможным тихий толчок.

Вы включаете с content-available = 1. Но это НЕПРАВИЛЬНО для отключения с content-available = 0. Чтобы отключить, вы должны удалить ключ в полезной нагрузке.

Также проверьте, присутствуют ли следующие ключи в вашей полезной нагрузке

{
  "aps": {
      "alert": {
          "title": "", (“notification_title” will be here)
          "subtitle": "",
          "body": “”(“description” will be here)
      },
      "badge": 1,
      "sound": "default",
      "content-available": 1
  }
}

3. Ваши уведомления будут вести себя следующим образом:

Приложение на переднем плане

  • Системное предупреждение не отображается
  • application:didReceiveRemoteNotification:fetchCompletionHandler: называется

Приложение в фоновом режиме

  • Отображается системное предупреждение
  • application:didReceiveRemoteNotification:fetchCompletionHandler: называется

Приложение находится в приостановленном состоянии

  • Состояние приложения изменяется на Фон
  • Отображается системное предупреждение
  • application:didReceiveRemoteNotification:fetchCompletionHandler: называется

Приложение не запущено, поскольку убито пользователем

  • Отображается системное предупреждение
  • Обратный звонок не вызывается
...