ios - 在应用程序设置页面中更改通知的用户权限时更新 UILabel 文本值?

标签 ios swift swift3 uilabel unnotificationrequest

在我的场景中,用户将收到在应用程序中接收通知的警报。如果用户单击“不允许”,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() 中注册一个函数请帮助我。

最佳答案

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

我已经创建了全局对象

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)

        }
    }
}

并在 View 中加载添加了这些行

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

希望对你有帮助:)

关于ios - 在应用程序设置页面中更改通知的用户权限时更新 UILabel 文本值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50645149/

相关文章:

ios - 更改位置服务中的选项

ios - 如何解决pushViewController 周围的内存泄漏问题?

Swift 3 init - 意外错误

ios - 在 Swift 3.0 上登录 Facebook 时出现错误代码 2500

swift - 我需要帮助将特定的 UIImage 调整大小扩展集成到我当前的绘制 CGRect 函数中

ios - UITextField - shouldChangeCharactersIn 与 self.addSubview()

ios - 删除单元格时的 UICollectionView 动画

objective-c - 核心数据:跨关系计数

swift - 在 SwiftUI 中的 ForEach 中使用 id 时,如何对数组的索引进行动画处理

swift - 在消息包聊天中显示用户名?