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

Когда мое приложение не запущено и пользователь нажимает на уведомление в центре уведомлений, вызывается функция didFinishLaunchingWithOptions, когда push-данные передаются в словарь launchOptions.

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    UNUserNotificationCenter.current().delegate = self
    //do stuff with push data in launchOptions dictionary

}

, но такжефункция userNotificationCenter didRecieve называется

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    log.info()
    let state = UIApplication.shared.applicationState
    print(state)
    if UIApplication.shared.applicationState != .active {
        log.debug("exiting because app is not in active state")
        return
    }
    let userInfo = response.notification.request.content.userInfo
    //do stuff with userInfo
    completionHandler()
}

В функции didRecieve как я могу узнать, что приложение было запущено, а приложение уже работало в фоновом режиме, когда пользователь нажал на уведомление?

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

* * * * * * * * * * * * * * * * * application didRecieveRemoteNotification выглядит идеально, но он вызывается только тогда, когда я посылаю тихий толчок, но мои нажатия не молчат.

1 Ответ

0 голосов
/ 09 ноября 2018

Нужно ли пытаться использовать функцию willPresent для управления толчком в случае переднего плана? Как то так

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping () -> Void) {
    handlePushWhenForeground(notification?.request.content.userInfo) // implement this function
}

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    if UIApplication.shared.applicationState == .inactive {
        handlePushWhenBackground(response.notification.request.content.userInfo) // implement this function
    } else {
        handlePushWhenNotActivated(response.notification.request.content.userInfo) // implement this function
    }
}
...