如何在用户拒绝允许通知的访问权限时获取FCM令牌

时间:2017-09-21 04:44:16

标签: ios firebase swift3 firebase-cloud-messaging

由于后端的要求,这是我第一次使用firebase,所以如果你不理解这个问题或者它没有任何意义,请告诉我。

我想要实现的是当用户注册时我需要Registration_ID这是FCM令牌。这就是我在AppDelegate.swift>中实现它的方式。 didFinishLaunchingWithOptions

if #available(iOS 10.0, *) {
            // For iOS 10 display notification (sent via APNS)
            UNUserNotificationCenter.current().delegate = self

            let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
            UNUserNotificationCenter.current().requestAuthorization(
                options: authOptions,
                completionHandler: {_, _ in })
        } else {
            let settings: UIUserNotificationSettings =
                UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
            application.registerUserNotificationSettings(settings)
        }

        application.registerForRemoteNotifications()

之后在AppDelegate.swift我添加了这三个功能:

func application(_ application: UIApplication,
                     didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        Messaging.messaging().apnsToken = deviceToken as Data
    }

    func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
        print("Firebase registration token: \(fcmToken)")
    }

    func application(application: UIApplication,
                     didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
        Messaging.messaging().apnsToken = deviceToken as Data
    }

问题在于,当它要求获得通知许可并且用户否认它时,我将如何获得FCM,当用户注册或登录时,我将发送给后端。

2 个答案:

答案 0 :(得分:1)

如果用户未授予权限,您将无法发送推送通知。您使用的第三方无法更改此权限(亚马逊,firebase)。对于Firebase云消息传递推送通知权限是必须的。

答案 1 :(得分:0)

无论用户对授权请求的响应如何,都会生成FCM令牌 - 如果响应时间足够长,则会在给出响应之前生成FCM令牌。

在用户授予权限之前,通知无效,但生成FCM令牌不依赖于获取权限。

请注意:我没有在任何地方找到此文件,但通过我自己的测试。我已在iOS 10.3.1和11.0上测试过。

第一次生成令牌时,Messaging委托didRefreshRegistrationToken被调用,我怀疑问题是您没有设置委托

Messaging.messaging().delegate = self