Получение фонового уведомления в iOS с помощью OneSignal - PullRequest
0 голосов
/ 28 сентября 2018

Я создаю приложение для iOS, используя swift.У меня есть встроенный SDK для пуш-уведомлений.Теперь я могу получать уведомления и управлять ими, когда приложение находится на переднем плане.когда приложение находится в фоновом режиме, я могу получать уведомления на панели уведомлений, но я не могу получить его и управлять в appdelegate. В appdelegate, где я могу получить уведомление, когда приложение находится в фоновом режиме? Здесь я делюсь своим кодом.Должен ли я что-нибудь изменить в полезной нагрузке?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

   let notificationReceivedBlock: OSHandleNotificationReceivedBlock = { notification in

      print("Received Notification: \(notification!.payload.notificationID)")
   }

   let notificationOpenedBlock: OSHandleNotificationActionBlock = { result in
      // This block gets called when the user reacts to a notification received
      let payload: OSNotificationPayload = result!.notification.payload

      var fullMessage = payload.body
      print("Message = \(fullMessage)")

      if payload.additionalData != nil {
         if payload.title != nil {
            let messageTitle = payload.title
               print("Message Title = \(messageTitle!)")
         }

         let additionalData = payload.additionalData
         if additionalData?["actionSelected"] != nil {
            fullMessage = fullMessage! + "\nPressed ButtonID: \(additionalData!["actionSelected"])"
         }
      }
   }

   let onesignalInitSettings = [kOSSettingsKeyAutoPrompt: false,
      kOSSettingsKeyInAppLaunchURL: true]

   OneSignal.initWithLaunchOptions(launchOptions, 
      appId: ONESIGNALAPP_I", 
      handleNotificationReceived: notificationReceivedBlock, 
      handleNotificationAction: notificationOpenedBlock, 
      settings: onesignalInitSettings)

   OneSignal.inFocusDisplayType = OSNotificationDisplayType.notification

   return true
}

1 Ответ

0 голосов
/ 28 сентября 2018

Вам необходимо реализовать эти методы в AppDelegate:

extension AppDelegate {

    @available(iOS 10.0, *)
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        //use response.notification.request.content.userInfo to fetch push data
    }

    // for iOS < 10
    func application(_ application: UIApplication, didReceive notification: UILocalNotification) {
        //use notification.userInfo to fetch push data
    }

    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        //use userInfo to fetch push data
    }
}
...