JYAuthorization的说明使用
综述
在iOS开发中,我们总会用到许多iOS的隐私功能,例如定位
,相机
,麦克风
等。在编写这些功能代码的时候,我们都要先判断是否拥有权限,然后根据有无代码执行不同的操作,功能一多的话就会显得繁琐。为了解决这个问题,我自己编写了JYAuthorization这一个框架,旨在快速获取以及查询iOS的功能权限,将更多的精力放在业务上。
支持的类型及要求
- ARC
- iOS 8.0+
- OC
目前支持的隐私类型(如果有需要,后面会继续添加):
1 | typedef NS_ENUM(NSUInteger, JYServiceType){ |
JYAuthorizationManager
JYAuthorizationManager
是一个单例,负责查询以及保存功能权限的数据。
- 你可以通过类方法
shareManager
来创建实例 - 通过实例方法
- (void)requestAccessToServiceType:(JYServiceType)authType completion:(void(^)(BOOL granted, NSError *error))completion
可以快速的查询功能权限。error的使用下面会有说明 - 查询过的权限结果(除JYAuthorizationErrorNotDetermined),将被保存在私有属性
authDict
中。因为iOS
的隐私功能权限,如果被修改过了,那么当前应用是会被强制退出的,所以当前的查询结果可以保存起来,避免重复查询 - 如果想要显示查询的Error,你可以调用实例方法
jy_showErrorDetail:(NSError *)error viewController:(UIViewController *)viewController
,效果就跟上面的gif图中的效果一样 JYAuthorization
支持多语言,你可以在JYAuthorization.bundle
里面的Localizable.strings
的文件中修改不同的提示语。
NSError的使用
NSError
如果有不明白的可以看我的另一篇博客NSError,在这里简单说明下:
- error.domain为自定义的错误域
JYAuthErrorDomain
- error.code为自定义的值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15typedef NS_ENUM(NSInteger, JYAuthorizationStatus){
JYAuthorizationErrorNone = 0,
///|< 已授权
JYAuthorizationErrorGranted = 1,
///|< 未授权
JYAuthorizationErrorNotDetermined = -100,
///|< 无授权,切用户无法改变这个状态。例如,家长控制
JYAuthorizationErrorRestricted = -101,
///|< 授权被拒绝
JYAuthorizationErrorDenied = -102,
///|< 尚未启用该服务
JYAuthorizationErrorUnServiced = -1000,
///|< 版本过低,不支持该服务
JYAuthorizationErrorLowVersion = -2000
}; - error.localizedDescription:错误描述,具体信息你可以在
Localizable.strings
中修改 - error.localizedRecoverySuggestion:错误恢复建议,具体信息你可以在
Localizable.strings
中修改 - 如果error.userInfo[JYAuthOpenSettingKey]有值,那么在提示错误时,您可以选择点击
前往
,前往设置界面
accessIfNotDetermined属性
这是一个BOOL类型的值,默认为YES。值为YES的时候,当你调用- (void)requestAccessToServiceType:(JYServiceType)authType completion:(void(^)(BOOL granted, NSError *error))completion
时,如果权限是JYAuthorizationErrorNotDetermined
(未授权),则会直接调用方法请求权限。
dontAlertIfNotDetermined属性
这是一个BOOL类型的值,默认为YES。值为YES的时候,当你调用- (void)jy_showErrorDetail:(NSError *)error viewController:(UIViewController *)viewController
时,如果erroe的code(错误码)是JYAuthorizationErrorNotDetermined
(-100)的话,则不会显示错误提示。
如何使用
假设我们有一个需求:调用iOS的定位服务。那么我们可以像下面这样:
1 | - (void)startLocationService |
使用JYAuthorization
,你不需要考虑有没有权限,是否未决定权限。在上面的例子中,如果尚未决定权限,并且error.code
是JYAuthorizationErrorNotDetermined
的话,会自动帮你请求权限,并且在获取权限之后,执行completion里面的回调。
当然,现在的很多应用,为了能够获取客户的权限,都会在申请权限之前,跳出一个弹框提示,说明获取权限的重要性,那么使用
JYAuthorization
也能够很方便的实现这个权限。示例如下:
1 | - (void)startLocationService |
结束
好了,说明就到此为止了。如果有错误的话,欢迎指出~
JYAuthorization的说明使用