美文网首页
JYAuthorization的说明使用

JYAuthorization的说明使用

作者: kikido | 来源:发表于2019-03-13 10:38 被阅读0次

综述

在iOS开发中,我们总会用到许多iOS的隐私功能,例如定位相机麦克风等。在编写这些功能代码的时候,我们都要先判断是否拥有权限,然后根据有无代码执行不同的操作,功能一多的话就会显得繁琐。为了解决这个问题,我自己编写了JYAuthorization这一个框架,旨在快速获取以及查询iOS的功能权限,将更多的精力放在业务上。

快速的获取及查询功能权限

支持的类型及要求

  • ARC
  • iOS 8.0+
  • OC

目前支持的隐私类型(如果有需要,后面会继续添加):

typedef NS_ENUM(NSUInteger, JYServiceType){
    JYServiceTypeNone,
    ///|< 定位-使用应用期间
    JYServiceTypeLocationWhenInUse,
    ///|< 定位-使用使用
    JYServiceTypeLocationAlways,
    ///|< 通讯录
    JYServiceTypeAddressBook,
    ///|< 日历
    JYServiceTypeCalendar,
    ///|< 提醒
    JYServiceTypeReminder,
    ///|< 相册
    JYServiceTypePhoto,
    ///|< 麦克风
    JYServiceTypeMicroPhone,
    ///|< 相机
    JYServiceTypeCamera,
    ///|< 语音识别
    JYServiceTypeSpeechRecognition,
    ///|< 健康
    JYServiceTypeHealth
};

JYAuthorizationManager

JYAuthorizationManager是一个单例,负责查询以及保存功能权限的数据。

  1. 你可以通过类方法shareManager来创建实例
  2. 通过实例方法- (void)requestAccessToServiceType:(JYServiceType)authType completion:(void(^)(BOOL granted, NSError *error))completion可以快速的查询功能权限。error的使用下面会有说明
  3. 查询过的权限结果(除JYAuthorizationErrorNotDetermined),将被保存在私有属性authDict中。因为iOS的隐私功能权限,如果被修改过了,那么当前应用是会被强制退出的,所以当前的查询结果可以保存起来,避免重复查询
  4. 如果想要显示查询的Error,你可以调用实例方法jy_showErrorDetail:(NSError *)error viewController:(UIViewController *)viewController,效果就跟上面的gif图中的效果一样
  5. JYAuthorization支持多语言,你可以在JYAuthorization.bundle里面的Localizable.strings的文件中修改不同的提示语。
    语言国际化

NSError的使用

NSError如果有不明白的可以看我的另一篇博客未发布,在这里简单说明下:

  • error.domain为自定义的错误域JYAuthErrorDomain
  • error.code为自定义的值
typedef 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的定位服务。那么我们可以像下面这样:

- (void)startLocationService
{
    JYAuthorizationManager *authManager = [JYAuthorizationManager shareManager];
    [authManager requestAccessToServiceType:JYServiceTypeLocationWhenInUse completion:^(BOOL granted, NSError * _Nonnull error) {
        if (granted) {
            // 有权限的话
            self.locationManager = [[CLLocationManager alloc] init];
            self.locationManager.delegate = self;
            self.locationManager.distanceFilter = 50;
            self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
            [self.locationManager startUpdatingLocation];
        } else {
            // 没有权限
            [authManager jy_showErrorDetail:error viewController:self];
        }
    }];
}

使用JYAuthorization,你不需要考虑有没有权限,是否未决定权限。在上面的例子中,如果尚未决定权限,并且error.codeJYAuthorizationErrorNotDetermined的话,会自动帮你请求权限,并且在获取权限之后,执行completion里面的回调。

当然,现在的很多应用,为了能够获取客户的权限,都会在申请权限之前,跳出一个弹框提示,说明获取权限的重要性,那么使用JYAuthorization也能够很方便的实现这个权限。示例如下:

- (void)startLocationService
{
    JYAuthorizationManager *authManager = [JYAuthorizationManager shareManager];
    authManager.accessIfNotDetermined = false;
    [authManager requestAccessToServiceType:JYServiceTypeLocationWhenInUse completion:^(BOOL granted, NSError * _Nonnull error) {
        if (granted) {
            // 有权限的话
            // todo...
        } else {
            if (error.code == JYAuthorizationErrorNotDetermined) {
                // 如果尚未决定权限,跳出自己的提示页面
                // 1.客户在自己的提示页面点击确定之后,修改`accessIfNotDetermined`为YES,且再次调用`- (void)requestAccessToServiceType:(JYServiceType)authType completion:(void(^)(BOOL granted, NSError *error))completion`这个方法
            } else {
                [authManager jy_showErrorDetail:error viewController:self];
            }
        }
    }];
}

结束

好了,说明就到此为止了。如果有错误的话,欢迎指出~

相关文章

  • JYAuthorization的说明使用

    综述 在iOS开发中,我们总会用到许多iOS的隐私功能,例如定位,相机,麦克风等。在编写这些功能代码的时候,我们都...

  • 说明书

    冰箱 有说明书 会使用 电视机 有说明书 会使用 手机 有说明书 会使用 ....... 我们出生时 我们的说明书...

  • Markdown语法

    一标题 使用说明:# + 空格 + 标题文字。 标题2 使用说明:## + 空格 + 标题文字。 二引用 使用说明...

  • 使用问题说明

    1.在使用 git clone 或其他命令的时候,有时候会遇到这类问题,如下: 出现这个问题是因为没有在githu...

  • 使用说明

    1. 首先订购 高级版,订购后选择立即使用。这时,你只能看到基础提醒、关怀提醒 2个功能列表。自动关注功能需要联系...

  • 使用说明

    在使用\"我爱影视\"(以下简称本应用)请您务必仔细阅读并理解本声明! 1).本应用所有资源来自网友分享,本应用只...

  • 使用说明

    一 当圆通手写面单 省-市-县 都完整时: 可以输入:省县、市县、县 进行查询记号笔。 二 当圆通手写面单只有 省...

  • 使用说明

    复制链接到浏览器下载并解压 根据图文一步一步来如果真的真的还不会就加群找管理 本软件为国外产品不存在封号,不像其他...

  • 使用说明

    声明:此方法仅用于模板学习/制作,任何人因使此侵犯他人著作权和利益,违法违规行为,概不负责,亦不承担任何法律责任。...

  • 使用说明

    水电费

网友评论

      本文标题:JYAuthorization的说明使用

      本文链接:https://www.haomeiwen.com/subject/etoapqtx.html