注册时,Swift FIRMessaging发送推送通知请求

时间:2016-10-04 19:29:03

标签: ios swift firebase firebase-cloud-messaging firebase-notifications

我想知道如何在用户注册为我的应用程序的用户之后提醒用户使用众所周知的'应用'想要发送推送通知而不是用户打开我的用户应用程序默认(甚至不是用户)。

我该怎么做?我以为你只会在appDelegate.swift中配置推送通知设置?提前谢谢!

2 个答案:

答案 0 :(得分:3)

您可以在任何地方请求推送通知的权限,如果您的应用程序有登录页面,那么请务必在登录后确定。

首先需要在AppDelegate.swift的函数中放置要求权限的代码。

func registerUserNotification() {


        if #available(iOS 10.0, *) {
            let authOptions : UNAuthorizationOptions = [.alert, .badge, .sound]

            UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: { (bool, error) in

                UNUserNotificationCenter.current().delegate = self

                if (error == nil) {
                    // its required for iOS 11 to avoid getting warning about "UI API called on a background thread"
                     DispatchQueue.main.async {

                     UIApplication.shared.registerForRemoteNotifications()

                   }
                }

            })


        } else {
            if UIApplication.shared.responds(to: #selector(UIApplication.registerUserNotificationSettings(_:))) {

                let types:UIUserNotificationType = ([.alert, .badge, .sound])
                let settings:UIUserNotificationSettings = UIUserNotificationSettings(types: types, categories: nil)
                UIApplication.shared.registerUserNotificationSettings(settings)
                UIApplication.shared.registerForRemoteNotifications()

            }

        }
}

注意:也不要忘记import UserNotifications能够使用适用于iOS 10的最新SDK。

在任何视图控制器中,您需要引用应用程序委托并调用该函数:

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    appDelegate.registerUserNotification()

更新1

您将需要实现UNUserNotificationCenter的委托,如下所示,将以下代码放在AppDelegate末尾的类范围(})之外,这是iOS 10所必需的:

@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate {


    // Receive displayed notifications for iOS 10 devices.
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

        print("Userinfo \(notification.request.content.userInfo)")



    }


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

        print("Userinfo \(response.notification.request.content.userInfo)")



    }



}

答案 1 :(得分:1)

您可以浏览Firebase概述的所有远程通知配置,但跳过提示用户使用" app想要向您发送推送通知的步骤#34;。然后,当您的用户完成注册过程后,请从iOS请求推送通知授权。

以下代码显示了向用户显示系统提示的关键部分。他们可以随时打电话。这些也是需要在应用启动时遗漏的相同代码行。

func turnOnNotifications() {
    if #available(iOS 10.0, *) {
        UNUserNotificationCenter
            .currentNotificationCenter()
            .requestAuthorizationWithOptions([.Alert, .Badge, .Sound]) { authorized, error in
        }
    } else {
        let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: .None)
        UIApplication.sharedApplication().registerUserNotificationSettings(settings)
    }
}