Какой делегат вызвал первым, когда пришло удаленное уведомление, в то время как мое приложение находится в отключенном режиме (не в фоне) - PullRequest
0 голосов
/ 04 июля 2018

Мотив: - Я хочу сохранить полезную нагрузку уведомления, сохраненную, когда уведомление получено приложением, пока оно не находится в фоновом режиме или оно отключено.

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

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

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

UNUserNotificationCenter.current().getDeliveredNotifications { notifications in

    for aNoitfication in notifications
    {
        let payload = aNoitfication.request.content.userInfo
        //process the payload
    }
    DispatchQueue.main.sync { /* or .async {} */ 
        // update UI
    }
}

P.S .: который доступен только на iOS 10 или более поздней версии

0 голосов
/ 04 июля 2018

Из документации Apple (UNUserNotificaitonCenter Framework iOS 10 +) ...

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

Метод будет вызываться для делегата, только если приложение находится на переднем плане. Если метод не реализован или обработчик не вызван своевременно, уведомление не будет представлено. Приложение может выбрать отображение уведомления в виде звука, значка, предупреждения и / или в списке уведомлений. Это решение должно основываться на том, является ли информация в уведомлении видимой для пользователя.

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

    print("willPresent: \(notification.request.content.userInfo)")
    completionHandler([.alert, .badge, .sound])
}

Метод будет вызван для делегата, когда пользователь откликнется на уведомление, открыв приложение, отклонив уведомление или выбрав действие UNNotificationAction. Делегат должен быть установлен до того, как приложение вернется из приложения: didFinishLaunchingWithOptions:.

...