在授予通知访问权限后执行 segue

Posted

技术标签:

【中文标题】在授予通知访问权限后执行 segue【英文标题】:Perform segue after notification access has been granted 【发布时间】:2019-12-19 11:49:49 【问题描述】:

我想知道在从对话框授予远程通知访问权限后如何执行模态搜索。我已经在应用程序委托中设置了我的远程通知。

func registerANSForApplication(_ application: UIApplication,withBlock block: @escaping (_ granted:Bool) -> (Void))
    InstanceID.instanceID().instanceID  (result, error) in
        if let error = error 
            print("Error fetching remote instange ID: \(error)")
         else if let result = result 
            print("Remote instance ID token: \(result.token)")
            AppDelegate.isToken = result.token
        
    
    let current  = UNUserNotificationCenter.current()
    let options : UNAuthorizationOptions = [.sound, .badge, .alert]

    current.requestAuthorization(options: options)  (granted, error) in
        guard granted else
            return
        
        if error != nil
            print(error?.localizedDescription ?? "")
        else
            Messaging.messaging().delegate = self
            current.delegate = self
            DispatchQueue.main.async 
                application.registerForRemoteNotifications()
            
        
    


然后,在我的视图控制器中,我有以下代码:

let appDelegate = UIApplication.shared.delegate as! 
appDelegate.registerANSForApplication(UIApplication.shared)  (granted) -> (Void) in
    self.performSegue(withIdentifier: "MembershipVC", sender: nil)

问题是用户是否允许或拒绝访问通知,segue 没有执行。

感谢您的帮助。

【问题讨论】:

首先在此处添加一些打印,看看它是否被调用,或者只是添加一个断点 它没有被调用... 什么是registerANSForApplication?而且您至少应该处理granted 参数。 当我像 if grant perform segue 这样处理这个参数时,它什么也不做。 当然它没有做任何事情,因为你没有调用完成block 【参考方案1】:

你必须调用block参数

替换

current.requestAuthorization(options: options)  (granted, error) in
    guard granted else
        return
    
    if error != nil
        print(error?.localizedDescription ?? "")
    else
        Messaging.messaging().delegate = self
        current.delegate = self
        DispatchQueue.main.async 
            application.registerForRemoteNotifications()
        
    

current.requestAuthorization(options: options)  (granted, error) in
    if error != nil 
        print(error?.localizedDescription ?? "")
        block(false)
     else 
        Messaging.messaging().delegate = self
        current.delegate = self
        DispatchQueue.main.async 
            application.registerForRemoteNotifications()
            block(granted)
        
    


【讨论】:

以上是关于在授予通知访问权限后执行 segue的主要内容,如果未能解决你的问题,请参考以下文章

如果任何其他所有者授予所有者访问 GCP 中某些其他帐户的权限,我会收到通知吗?

第三方支付处理并在支付完成后授予用户访问权限

使用用户/密码保护执行器端点,同时授予 RestController 的公共访问权限

PostgreSQL 授予对表的访问权限

即使在 Ar.js 中的浏览器中授予权限后,地理定位访问被拒绝弹出窗口也会显示

Android 中的权限