Выполнить переход после предоставления доступа к уведомлениям

Я хотел бы знать, как выполнить модальный переход после того, как доступ к удаленному уведомлению был предоставлен из диалогового окна. Я настроил свое удаленное уведомление в делегате приложения.

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)
}

Проблема в том, разрешает ли пользователь или запрещает доступ к уведомлению, переход не выполняется.

Спасибо за помощь.


person TheSwiftApprentice35    schedule 19.12.2019    source источник
comment
начните с добавления туда какой-нибудь печати и посмотрите, вызывается ли она, или просто добавьте точку останова   -  person Stefan    schedule 19.12.2019
comment
Не вызывается...   -  person TheSwiftApprentice35    schedule 19.12.2019
comment
Что такое registerANSForApplication? И вы должны хотя бы обрабатывать параметр granted.   -  person vadian    schedule 19.12.2019
comment
Когда я обрабатываю этот параметр, например, если предоставлен {выполнить переход}, он ничего не делает.   -  person TheSwiftApprentice35    schedule 19.12.2019
comment
Конечно, это ничего не делает, потому что вы не вызываете блок завершения.   -  person vadian    schedule 19.12.2019
comment
Итак, пожалуйста, скажите мне, как это сделать?   -  person TheSwiftApprentice35    schedule 19.12.2019


Ответы (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)
        }
    }

}
person vadian    schedule 19.12.2019