iOS权限弹窗申请

demo:


import UIKit
import CoreLocation
import CoreBluetooth
import CoreTelephony
import UserNotifications

class ViewController: UIViewController {
    var manager: CLLocationManager?
    var bleManager: CBCentralManager?
    var cellularData: CTCellularData?

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .blue
        
        bleRequest()
        netRequest()
        locationRequest()
        getNetPermissonState()
        
    }
    
    // 蓝牙权限
    func bleRequest() {
        self.bleManager = CBCentralManager.init()
    }
    
    // 定位权限
    func locationRequest() {
        self.manager = CLLocationManager.init()
        manager?.requestWhenInUseAuthorization()
    }
    
    // 发送网络请求
    func netRequest() {
        var request = URLRequest(url: URL(string: "https://www.baidu.com")!, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 30)
        request.httpMethod = "GET"
        
        URLSession.shared.dataTask(with: request) { data, response, error in
            if (error != nil) {
                print("error--:\(String(describing: error))")
            }
            print("data:\(String(describing: data))")
            
        }.resume()
    }

}

// 通知权限
extension ViewController: UNUserNotificationCenterDelegate {
    func getNotifyPermissionRequest() {
        // 先检查权限
        checkNotificationStatus()
    }
    
    // 检查通知权限
    func checkNotificationStatus() {
        UNUserNotificationCenter.current().getNotificationSettings { settings in
            switch settings.authorizationStatus {
            case .notDetermined:
                print("未决定")
            case .denied:
                print("拒绝")
            case .authorized:
                print("同意")
            case .provisional:
                print("provisional")
            case .ephemeral:
                print("ephemeral")
            @unknown default:
                print("default")
            }
        }
    }
    
    func showUserNotiAlert() {
        setPermisson()
    }
    
    func registerNotification() {
        let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options: [.alert, .sound, .badge]) { isAllow, error in
            if isAllow {
                print("注册成功")
                NotificationCenter.post(customNotification: .success)
            }
        }
        
        UIApplication.shared.registerForRemoteNotifications()
    }
    
    
    
    
    
}

// 网络权限
extension ViewController {
    // 不同国家地区,不同型号手机,默认权限不一样
    func getNetPermissonState() {
        cellularData = CTCellularData()
        let state = cellularData?.restrictedState
        switch state {
        case .restricted:
            print("restricted--被限制网络权限")
        case .notRestricted:
            print("notRestricted--未被限制网络权限")
        case .restrictedStateUnknown:
            print("restrictedStateUnknown")
            setPermisson()
        case .none:
            print("none")
        case .some(_):
            print("some")
        }
    }
    
    func setPermisson() {
        print("setPermisson")
        let alertController = UIAlertController.init(title: "提示", message: "您尚未授权网络权限", preferredStyle: .alert)
        
        let actionCancel = UIAlertAction(title: "取消", style: .cancel)
        
        let actionAgree = UIAlertAction(title: "确定", style: .default) { alert in
            var url: URL
            if #available(iOS 15.4, *) {
                url = URL(string: UIApplication.openSettingsURLString)!
            } else {
                url = URL(string: UIApplication.openSettingsURLString)!
            }
            
            if UIApplication.shared.canOpenURL(url) {
                UIApplication.shared.open(url)
            }
        }
        
        alertController.addAction(actionCancel)
        alertController.addAction(actionAgree)
        self.navigationController?.present(alertController, animated: true)
    }
}

通知扩展,方便使用

import Foundation

enum TestNotification: String {
    case success
    case failure
    
    var stringValue: String {
        return "MyTest" + self.rawValue
    }
    
    var notificationName: NSNotification.Name {
        return NSNotification.Name(stringValue)
    }
}

extension NotificationCenter {
    static func post(customNotification name: TestNotification, object: Any? = nil) {
        NotificationCenter.default.post(name: name.notificationName, object: object)
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS软件弹窗dylib库编写是一种在iOS平台上开发和使用动态链接库的方法。动态链接库(Dynamic Library)是一种共享库,可以被多个应用程序同时使用,以提供特定功能或服务。 编写iOS软件弹窗dylib库需要以下步骤: 1. 创建一个新的Xcode项目。选择"Framework & Library"中的"Dynamic Library"模板。 2. 在项目中添加弹窗逻辑的代码,可以使用Objective-C或Swift语言来编写。 3. 将编写的逻辑封装为一个独立的类或函数,并在适当的位置调用。 4. 将编写的代码编译为dylib库,这可以使用Xcode的"Build"功能自动完成。 5. 导出dylib库文件,可以将其复制到其他项目中使用。 使用iOS软件弹窗dylib库的方法是: 1. 在需要使用弹窗功能的iOS应用项目中,导入dylib库文件。可以通过将dylib库文件直接拖拽到Xcode项目中来实现。 2. 在应用程序的源代码中,添加对dylib库的引用和使用。可以使用Objective-C的`dlopen`函数或Swift的`dyld`模块来加载和使用dylib库。 3. 根据dylib库中提供的API,使用需要的弹窗功能。 需要注意的是,dylib库的使用需要满足苹果的开发者政策和审核要求。在使用dylib库时,应确保遵循相关规定,并尽可能保证库文件的安全性和稳定性。 总结来说,iOS软件弹窗dylib库编写是一种在iOS平台上开发和使用独立动态库的方法。需要在Xcode中创建项目、编写弹窗逻辑、编译为dylib库,然后在其他应用项目中导入并使用该库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值