Push-уведомления IOS на переднем плане Swift 4.2 - PullRequest
0 голосов
/ 01 февраля 2019

Я работаю над приложением IOS, где работаю над Push-уведомлениями с помощью Parse SDK.Я могу получать уведомления, когда моя спина находится в фоновом режиме.Теперь я хочу получать уведомления, даже если мое приложение находится на переднем плане.Я искал много кода для него, но он не подходит для моего текущего класса AppDelegate.

Как получить Push-уведомления, даже если мое приложение находится на переднем плане?

 @UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Thread.sleep(forTimeInterval: 3.0)
        // Override point for customization after application launch.

        let configuration = ParseClientConfiguration {
            $0.applicationId = "asdasdasd"
            $0.clientKey = "asdasdasdas"
            $0.server = "https://parseapi.back4app.com"
        }
        Parse.initialize(with: configuration)

        UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate

        UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) {
            (granted, error) in
            print("Permission granted: \(granted)")
            guard granted else { return }
            self.getNotificationSettings()
        }

        return true
    }

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

    func getNotificationSettings() {
        UNUserNotificationCenter.current().getNotificationSettings { (settings) in
            print("Notification settings: \(settings)")
            guard settings.authorizationStatus == .authorized else {
                return
            }
            DispatchQueue.main.async(execute: {
                UIApplication.shared.registerForRemoteNotifications()
            })
        }
    }

    func application(_ application: UIApplication,
                     didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        createInstallationOnParse(deviceTokenData: deviceToken)
    }


    func applicationWillResignActive(_ application: UIApplication) {

    }

    func applicationDidEnterBackground(_ application: UIApplication) {

    }

    func applicationWillEnterForeground(_ application: UIApplication) {

    }

    func applicationDidBecomeActive(_ application: UIApplication) {

    }

    func applicationWillTerminate(_ application: UIApplication) {

    }

    func application(_ application: UIApplication,
                     didFailToRegisterForRemoteNotificationsWithError error: Error) {
        print("Failed to register: \(error)")
    }
    }
}

Я нашел это решение на том же форуме, но не могу добавить следующий фрагмент кода в текущийКод:

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


        // Print full message.
        print("tap on on forground app",userInfo)

        completionHandler()
    }

1 Ответ

0 голосов
/ 01 февраля 2019

Начиная с iOS 10, Apple позволяет пользователям обрабатывать презентацию Push-уведомлений, находясь на переднем плане.Вы можете справиться с этим в методе willPresent.и обработайте Push-уведомление в завершениеHandler, передайте нужные параметры, такие как оповещение, значок и звук.

Подтвердите, что ваше приложениеДелегатировать для использования UNUserNotificationCenterDelegate

, укажите это в вашем didFinishLaunchingWithOptions методе

UNUserNotificationCenter.current().delegate = self

До

UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) {
            (granted, error) in
            print("Permission granted: \(granted)")
            guard granted else { return }
            self.getNotificationSettings()
        }

И добавьте этометод

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