一个解决 IOS 权限库, 只需传入权限类型, 就可以 方便请求权限, 获取权限状态.
0. demo 效果图
permission.gif
- 1. CocoaPods
- pod 'PermissionManager'
2. 支持的权限类型
- /// Permission Types
- public enum WWRequestPermissionType {
- case camera
- case photoLibrary
- case notification
- case microphone
- case locationAlways
- case locationWhenInUse
- case locationWithBackground
- case contacts
- case reminders
- case calendar
- }
3. 基本方法
- /// 权限管理者接口
- public protocol WWPermissionManagerInterface {
- /**
- 用户还未决定
- param: permission 权限类型
- */
- func isNotDetermined(_ permission: WWRequestPermissionType) -> Bool
- /**
- 用户没有权限或者拒绝
- param: permission 权限类型
- */
- func isRestrictOrDenied(_ permission: WWRequestPermissionType) -> Bool
- /**
- 用户允许
- param: permission 权限类型
- */
- func isAuthorized(_ permission: WWRequestPermissionType) -> Bool
- /**
- 用户请求权限
- param: permission 权限类型
- */
- func request(_ permission: WWRequestPermissionType, with complectionHandler: @escaping ()->())
- }
4. 设计思路, 注意事项
设计思路: 定义一个枚举包含所有 "权限类型", 并将每一个 "权限类" 都实现协议 WWPermissionInterface."权限管理者类" 实现的协议 WWPermissionManagerInterface,"权限管理者类" 会根据传入的 "权限类型" 进行区分, 并请求权限.
所有权限请求 request 方法都是异步回调的, 所以可以在用户选择完权限后进行回调.
在 Info.plist 中加入权限对应的 key, 否非会出现奔溃的现象.
位置获取权限注意事项:
在 iOS11 之后, Privacy - Location Always Usage Description 被降级为 Privacy - Location When In Use Usage Description.
新添加 Privacy - Location Always and When In Use Usage Description 隐私权限, 在使用后台定位的时候进行操作: Targets - Capabilities - Background Modes - location Update 这一项打钩
使用 swift 编写, 兼容 iOS8 以上
5. 使用方法, 以相册权限为例
- // 请求相册权限
- WWPermissionsManager().request(.photoLibrary, with: {
- print("申请了相册权限")
- })
- // 相册权限 - 还未决定
- WWPermissionsManager().isNotDetermined(.photoLibrary) {
- print("用户还没有决定")
- }
- // 相册权限 - 允许
- WWPermissionsManager().isAuthorized(.photoLibrary) {
- print("用户允许")
- }
- // 相册权限 - 没有权限或者拒绝
- WWPermissionsManager().isRestrictOrDenied(.photoLibrary) {
- print("用户没有权限或者拒绝")
- }
- // 跳转到 setting
- WWPermissionsManager.jumpSetting()
6. 如果喜欢 请给 star 吧
传送门 https://github.com/wangweilucky/PermissionManager
来源: http://www.jianshu.com/p/20f25c0f2645