UNUserNotificationCenterDelegate не работает, когда приложение удаляется из фона - PullRequest
0 голосов
/ 11 января 2019

UNUserNotificationCenterDelegate не работает при удалении из фона. Он работает нормально, пока приложение остается на переднем и заднем плане.

Вот код

extension AppDelegate: UNUserNotificationCenterDelegate {

    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler([.alert, .sound])
    }

    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {


        let rootViewController = self.window!.rootViewController as! UINavigationController
        let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let profileViewController = mainStoryboard.instantiateViewController(withIdentifier: "SampleViewController") as! SampleViewController
        rootViewController.pushViewController(profileViewController, animated: true)

        completionHandler()
    }
}

При удалении приложения из фона метод делегата не вызывается. Пожалуйста, помогите мне

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

При добавлении каркаса UserNotifications в проект необходимо проверить 5 вещей:

1) Если вы имеете дело с удаленными уведомлениями, убедитесь, что вы включили это на странице настроек возможностей вашего проекта XCode.

См. рисунок 1

Если это приводит к ошибке, вам, вероятно, необходимо войти в свою учетную запись разработчика Apple и создать ключ с учетными данными для push-уведомлений. Конечный результат дает вам файл .p8 для загрузки. Создание этого файла устранит ошибку. Сам файл необходим на сервере, который отправляет push-уведомления вашему приложению / устройству. Если вам нужна помощь, ознакомьтесь с этим учебным пособием .

2) Добавьте строку импорта в начало файла AppDelegate

import UserNotifications

3) Добавьте UNUserNotificationCenterDelegate в строку объявления класса AppDelegate.

class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {...

4) Установите для делегата UNUserNotificationCenter значение self в приложении: метод didFinishLaunchingWithOptions.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    //...
    UNUserNotificationCenter.current().delegate = self
    //...
    return true
}

5) Добавьте функции делегатов (если вы хотите их использовать)

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    NSLog("Application delegate method userNotificationCenter:didReceive:withCompletionHandler: is called with user info: %@", response.notification.request.content.userInfo)
    //...
}

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    NSLog("userNotificationCenter:willPresent")
    //...
    completionHandler([.alert])
}

Надеюсь, это поможет.

0 голосов
/ 11 января 2019

проверка didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? метод. Когда пользователь нажимает на баннер уведомлений (и приложение закрывается), приложение запускается, вызывается этот метод, и launchOptions содержит информацию уведомления. Поэтому вы можете понять (проверив launchOptions), что приложение запускается, нажав на баннер уведомлений и перемещаться по пользователю, куда вы хотите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...