【问题标题】:Update UILabel text value , when changing the user permission for notification in application setting page?在应用程序设置页面更改通知的用户权限时更新 UILabel 文本值?
【发布时间】:2018-11-11 16:44:28
【问题描述】:

在我的场景中,用户会在应用程序中收到通知通知。如果用户单击“不允许”,UILabel 会更新为“未启用”。如果用户想要更改通知,用户将被导航到应用程序设置页面以更改通知权限状态。

func checkNotificationPermission(){

UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]){


        (granted, error) in

        if granted == true {

            DispatchQueue.main.async {
                    print("notificaation access true")
                     self.notificationAccessLbl?.text = "Enabled"         
        }
        }
        else {
            DispatchQueue.main.async {
                self.notificationAccessLbl?.text = "Not enabled" 
            }
        } 
    }
    UIApplication.shared.registerForRemoteNotifications() }

但是当用户返回应用程序时,当用户从设置页面返回应用程序时,UILabel 没有得到更新。

用于在用户从设置页面到应用程序后更新应用程序中的 UILabel。我打过电话

func checkNotificationPermission()

更新 ViewDidAppear() 方法中的 UILabel 值,我在 applicationwillbecomeactive method() 中注册了一个函数,请帮助我。

【问题讨论】:

    标签: ios swift swift3 uilabel unnotificationrequest


    【解决方案1】:

    我在应用程序的设置页面中有开关,允许用户启用禁用推送并将在服务器上发送,但在该用户必须允许从设备的设置页面推送之前。这是我的解决方案

    我已经创建了全局对象

    var isPushEnabledFromSettings = false {
        didSet {
             // you can set label value here in main queue
        }
    }
    

    还有一种检查方法

    func isPushPermissionGiven (permission:@escaping (Bool) -> ()) {
        if #available(iOS 10.0, *) {
            let current = UNUserNotificationCenter.current()
            current.getNotificationSettings(completionHandler: {settings in
                switch settings.authorizationStatus {
                case .notDetermined:
                    permission(false)
                case .denied:
                    permission(false)
                case .authorized:
                    permission(true)
                }
            })
        } else {
            // Fallback on earlier versions
            if UIApplication.shared.isRegisteredForRemoteNotifications {
                permission(true)
    
    
            } else {
                permission(false)
    
            }
        }
    }
    

    并且在视图中确实加载了这些行

        self.isPushPermissionGiven { (permission) in
            self.isPushEnabledFromSettings = permission
        }
    
        NotificationCenter.default.addObserver(forName: NSNotification.Name.UIApplicationDidBecomeActive, object: nil, queue: .main) {[weak self] (notificaiont) in
            guard let strongSelf = self  else {return }
    
            strongSelf.isPushPermissionGiven { (permission) in
                DispatchQueue.main.async {
                    strongSelf.isPushEnabledFromSettings = permission
                }
            }
        }
    

    现在我在设置页面中有开关,允许用户启用禁用推送

    @objc func switchChanged (sender:UISwitch) {
    
        guard self.isPushEnabledFromSettings else {
            AppDelegate.sharedDelegate.navigateUesrToSettings(withMessage: "Please grant push permission from settings")
            DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: {
                sender.setOn(false, animated: false)
            })
            return
    
        }
    }
    
    
    
      func navigateUesrToSettings (withTitle title:String = "YourApp", withMessage message:String) {
            let alertController = UIAlertController (title: title, message: message, preferredStyle: .alert)
    
            let settingsAction = UIAlertAction(title: "Settings", style: .default) { (_) -> Void in
                guard let _ = URL(string: UIApplicationOpenSettingsURLString) else {
                    return
                }
    
                self.navigate(To: UIApplicationOpenSettingsURLString)
    
            }
            alertController.addAction(settingsAction)
            let cancelAction = UIAlertAction(title: "Cancel", style: .default, handler: nil)
            alertController.addAction(cancelAction)
    
            AppDelegate.sharedDelegate.window?.rootViewController?.present(alertController, animated: true, completion: nil)
        }
    

    希望对你有帮助:)

    【讨论】:

    • 我指的设置页面是苹果原生的设置应用,不在应用内。
    • @muthukumaresh 顺便说一句,您只是在检查是否授予推送权限,可以使用提供的代码完成,如果我错了,请告诉我
    • 但是我们没有在任何地方使用@objc func switchChanged(sender:UISwitch)这个函数。
    • @muthukumaresh 看我把这段代码放在你的理解上,你在答案中有前三个块 1) isPushEnabledFromSettings 2) isPushPermissionGiven 方法和 3)view 加载方法就是这样
    • 很酷,谢谢。我在项目中检查这个。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    相关资源
    最近更新 更多