Coder Social home page Coder Social logo

ecprivacychecktools's Introduction

ECPrivacyCheckTools 2.0.0 版本 20200608

更新 & bug fix

  1. ECPrivacyCheckTools 2.0.0版本

    • 去掉对 iOS 7.0 版本支持
    • 针对 iOS 13.0 新 API 优化
    • 隐私权限模块独立文件,可以单独引入使用,无需引入全部工具类
    • 常见常用隐私权限检测集合类,可以直接导入项目中使用。包含:定位服务、照片、相机、通讯录
    • 其他bug fix
  2. 20171211 bug修复:iOS11获取相册权限需要在plist中增加NSPhotoLibraryAddUsageDescription字段

<key>NSPhotoLibraryAddUsageDescription</key>
<string>需要获取您的相册信息</string>
  1. 20170731 bug修复:iOS7获取相册权限不弹框
// 当某些情况下,ALAuthorizationStatus 为 ALAuthorizationStatusNotDetermined的时候,
// 无法弹出系统首次使用的收取alertView,系统设置中也没有相册的设置,此时将无法使用,
// 所以做以下操作,弹出系统首次使用的授权alertView
__block BOOL isShow = YES;
ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init];
[assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (isShow) {
[self executeCallBack:accessStatusCallBack accessStatus:ECAuthorizationStatus_Authorized type:ECPrivacyType_Photos];
isShow = NO;
}
} failureBlock:^(NSError *error) {
[self executeCallBack:accessStatusCallBack accessStatus:ECAuthorizationStatus_Denied type:ECPrivacyType_Photos];
}];

Abstract 概要

该工具类主要是为了方便大家获取设备系统权限和检查对应的权限。目前2.0版本兼容 iOS 8.0 及其以上版本。具体每一项隐私权限的获取和检测在源码中有非常详细的逻辑代码,使用方式在 ECPrivacyCheckTools_Example 工程中亦有相似介绍。如果有什么不清楚的可以在git上issues我或者微信联系我。

Features & Requirements 特性 & 要求

  • 支持 iOS 8.0 +
  • ARC
  • 最新版本:2.0.0

目前支持的隐私类型(顺序参照:iPhone - 设置 - 隐私):

LocationServices       定位服务
Contacts               通讯录
Calendars              日历
Reminders              提醒事项
Photos                 照片
Bluetooth              蓝牙
Microphone             麦克风
SpeechRecognition      语音识别 >= iOS 10.0
Camera                 相机
Health                 健康 >= iOS 8.0
HomeKit                HomeKit >= iOS 8.0
MediaAndAppleMusic     媒体与Apple Music >= iOS9.3
FilesAndFolders        文件和文件夹
MotionAndFitness       运动与健身
参照下图

01.PNG

plist文件下添加对应的参数
<key>NSAppleMusicUsageDescription</key>
	<string>Add tracks to your music library.</string>
	<key>NSBluetoothPeripheralUsageDescription</key>
	<string>若不允许,你将无法使用联机服务</string>
	<key>NSBluetoothAlwaysUsageDescription</key>
	<string>若不允许,你将无法使用联机服务</string>
	<key>NSCalendarsUsageDescription</key>
	<string>若不允许,你将无法使用添加日历功能</string>
	<key>NSCameraUsageDescription</key>
	<string>若不允许,你将无法使用图片上传和识别功能</string>
	<key>NSContactsUsageDescription</key>
	<string>通讯录信息仅用于查找联系人,并会得到严格保密</string>
	<key>NSHealthShareUsageDescription</key>
	<string>若不允许,你将无法参与运动排行榜活动</string>
	<key>NSHealthUpdateUsageDescription</key>
	<string>若不允许,你将无法参与运动排行榜活动</string>
	<key>NSHomeKitUsageDescription</key>
	<string>若不允许,你将无法使用智能家居服务</string>
	<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
	<string>我们需要获取你的定位权限以供完成查找附近商户功能</string>
	<key>NSLocationWhenInUseUsageDescription</key>
	<string>我们需要获取你的定位权限以供完成查找附近商户功能</string>
	<key>NSMicrophoneUsageDescription</key>
	<string>我们需要获取你的麦克风权限以供完成语音搜索功能</string>
	<key>NSMotionUsageDescription</key>
	<string>我们需要获取你的运动权限以完成运动挑战赛功能</string>
	<key>NSPhotoLibraryAddUsageDescription</key>
	<string>我们需要获取你的相册权限以完成图片上传和识别功能</string>
	<key>NSPhotoLibraryUsageDescription</key>
	<string>我们需要获取你的相册权限以完成图片上传和识别功能</string>
	<key>NSRemindersUsageDescription</key>
	<string>我们需要获取你的提醒事项权限以供添加提醒事项</string>
	<key>NSSiriUsageDescription</key>
	<string>我们需要获取你的Siri权限以方便完成Siri建议功能</string>
	<key>NSSpeechRecognitionUsageDescription</key>
	<string>我们需要获取你的语音识别功能已完成键盘语音识别输入功能</string>
	<key>NSVideoSubscriberAccountUsageDescription</key>
	<string>我们需要获取你的TV权限</string>

Content 正文

Uage 使用

  • 使用 ECPrivacyCheckGatherTool 集合:包含:定位服务、照片、相机、通讯录
    • 将 ECPrivacyCheckTools 文件夹下 ECPrivacyCheckGatherTool.h 和 ECPrivacyCheckGatherTool.m 文件引入工程
    • 调用对应 API
  • 单独使用任一权限检测
    • 将 ECPrivacyCheckTools/Core 文件下对应权限的 .h 和 .m 文件引入工程
    • 调用对应API

Code Example

// MARK: - 定位服务 LocationServices
/** 定位授权状态
 *

 *  ECLBSAuthorizationStatusUnable:不支持或不可用
 *  ECLBSAuthorizationStatusNotDetermined:用户从未进行过授权等处理,首次访问相应内容会提示用户进行授权
 *  ECLBSAuthorizationStatusRestricted:应用没有相关权限,且当前用户无法改变这个权限,比如:家长控制
 *  ECLBSAuthorizationStatusDenied:用户拒绝
 *  ECLBSAuthorizationStatusAuthorizedAlways:一直允许获取定位
 *  ECLBSAuthorizationStatusAuthorizedWhenInUse:在使用时允许定位
 *  ECLBSAuthorizationStatusAuthorized:已废弃,在iOS2.0~8.0使用,> iOS 8.0 请使用 ECLBSAuthorizationStatusAuthorizedAlways: 一直允许获取定位
    */
    typedef NS_ENUM(NSInteger, ECLBSAuthorizationStatus) {
     ECLBSAuthorizationStatusUnable = -1,
     ECLBSAuthorizationStatusNotDetermined = 0,
     ECLBSAuthorizationStatusRestricted,
     ECLBSAuthorizationStatusDenied,
     ECLBSAuthorizationStatusAuthorizedAlways,
     ECLBSAuthorizationStatusAuthorizedWhenInUse,
     ECLBSAuthorizationStatusAuthorized API_DEPRECATED("Use ECLBSAuthorizationStatusAuthorizedAlways", ios(2.0, 8.0)) = ECLBSAuthorizationStatusAuthorizedAlways
    };

/// 检查定位权限状态:仅检查权限,不主动请求权限

+ (ECLBSAuthorizationStatus)locationAuthorizationStatus;

/// 检查定位权限状态:仅检查权限,不主动请求权限

- (ECLBSAuthorizationStatus)locationAuthorizationStatus;

/// 请求定位权限
/// @param completionHandler completionHandler

- (void)requestLocationAuthorizationWithCompletionHandler:(void(^)(ECLBSAuthorizationStatus status))completionHandler;

// MARK: - 照片 Photos
/** 授权状态

 *  ECAuthorizationStatusUnable:不支持或不可用
 *  ECAuthorizationStatusNotDetermined:用户从未进行过授权等处理,首次访问相应内容会提示用户进行授权
 *  ECAuthorizationStatusRestricted:应用没有相关权限,且当前用户无法改变这个权限,比如:家长控制
 *  ECAuthorizationStatusDenied:用户拒绝
 *  ECAuthorizationStatusAuthorized:已授权
    */
    typedef NS_ENUM(NSInteger, ECAuthorizationStatus) {
    ECAuthorizationStatusUnable = -1,
    ECAuthorizationStatusNotDetermined = 0,
    ECAuthorizationStatusRestricted,
    ECAuthorizationStatusDenied,
    ECAuthorizationStatusAuthorized
    };

/// 检查相册权限状态:仅检查权限,不主动请求权限

+ (ECAuthorizationStatus)photosAuthorizationStatus;

/// 检查相册权限状态:仅检查权限,不主动请求权限

- (ECAuthorizationStatus)photosAuthorizationStatus;

/// 请求相册权限
/// @param completionHandler completionHandler

+ (void)requestPhotosAuthorizationWithCompletionHandler:(void(^)(BOOL granted))completionHandler;

// MARK: - Bluetooth 蓝牙
/** 蓝牙权限状态
 *

 * ECCBAuthorizationStateUnknown:未知状态

 * ECCBAuthorizationStateResetting:正在重置,与系统服务暂时丢失

 * ECCBAuthorizationStateUnsupported:不支持蓝牙

 * ECCBAuthorizationStateUnauthorized:未授权

 * ECCBAuthorizationStatePoweredOff:关闭

 * ECCBAuthorizationStatePoweredOn:开启并可用
   */
   typedef NS_ENUM(NSInteger, ECCBAuthorizationState) {

   ECCBAuthorizationStateUnknown = 0,
   ECCBAuthorizationStateResetting,
   ECCBAuthorizationStateUnsupported,
   ECCBAuthorizationStateUnauthorized,
   ECCBAuthorizationStatePoweredOff,
   ECCBAuthorizationStatePoweredOn
   };

/// 获取蓝牙权限
/// @param completionHandler completionHandler

- (void)requestBluetoothAuthorizationWithCompletionHandler:(void(^)(ECCBAuthorizationState state))completionHandler;

// MARK: - 通讯录 Contacts
/** 授权状态

 *  ECAuthorizationStatusUnable:不支持或不可用
 *  ECAuthorizationStatusNotDetermined:用户从未进行过授权等处理,首次访问相应内容会提示用户进行授权
 *  ECAuthorizationStatusRestricted:应用没有相关权限,且当前用户无法改变这个权限,比如:家长控制
 *  ECAuthorizationStatusDenied:用户拒绝
 *  ECAuthorizationStatusAuthorized:已授权
    */
    typedef NS_ENUM(NSInteger, ECAuthorizationStatus) {
    ECAuthorizationStatusUnable = -1,
    ECAuthorizationStatusNotDetermined = 0,
    ECAuthorizationStatusRestricted,
    ECAuthorizationStatusDenied,
    ECAuthorizationStatusAuthorized
    };

/// 检查通讯录权限状态:仅检查权限,不主动请求权限

+ (ECAuthorizationStatus)contactsAuthorizationStatus;

/// 检查通讯录权限状态:仅检查权限,不主动请求权限

- (ECAuthorizationStatus)contactsAuthorizationStatus;

/// 请求通讯录权限
/// @param completionHandler completionHandler

+ (void)requestContactsAuthorizationWithCompletionHandler:(void(^)(BOOL granted))completionHandler;

/// 请求通讯录权限
/// @param completionHandler completionHandler

- (void)requestContactsAuthorizationWithCompletionHandler:(void(^)(BOOL granted))completionHandler;
获取定位权限
- (void)checkLBS:(NSInteger)buttonIndex {
    if (buttonIndex == 1) {
        ECLBSAuthorizationStatus status = [ECPrivacyCheckGatherTool locationAuthorizationStatus];
        ECAlertShow(@"定位权限状态:", [NSString stringWithFormat:@"%ld", (long)status], @"确定", ^{
        });
    } else {
        self.gatherTools = [[ECPrivacyCheckGatherTool alloc] init];
        [self.gatherTools requestLocationAuthorizationWithCompletionHandler:^(ECLBSAuthorizationStatus status) {
            if (status == ECLBSAuthorizationStatusAuthorizedAlways) {
                [ECAlert showConfirmAlertWithMessage:@"已获取持续定位权限" completion:nil];
            } else if (status == ECLBSAuthorizationStatusAuthorizedWhenInUse) {
                [ECAlert showConfirmAlertWithMessage:@"已获取使用APP期间定位权限" completion:nil];
            } else if ((status == ECLBSAuthorizationStatusRestricted) || (status == ECLBSAuthorizationStatusDenied)) {
                [ECAlert showConfirmAlertWithMessage:@"用户禁用该APP使用定位权限" completion:nil];
            } else {
                NSLog(@"ECLBSAuthorizationStatusNotDetermined,用户未决定");
            }
        }];
    }
}
照片权限
/// 请求相册权限
/// @param completionHandler completionHandler
- (void)requestPhotosAuthorizationWithCompletionHandler:(void(^)(BOOL granted))completionHandler;

- (void)checkPhotos:(NSInteger)buttonIndex {
    if (buttonIndex == 1) {
        ECAuthorizationStatus status = [ECPrivacyCheckGatherTool photosAuthorizationStatus];
        ECAlertShow(@"照片权限状态:", [NSString stringWithFormat:@"%ld", (long)status], @"确定", ^{
        });
    } else {
        [ECPrivacyCheckGatherTool requestPhotosAuthorizationWithCompletionHandler:^(BOOL granted) {
            if (granted) {
                [ECAlert showConfirmAlertWithMessage:@"已获取照片权限" completion:nil];
            } else {
                [ECAlert showConfirmAlertWithMessage:@"用户禁用该APP使用照片权限" completion:nil];
            }
        }];
    }
}
通讯录权限
- (void)checkContact:(NSInteger)buttonIndex {
    if (buttonIndex == 1) {
        ECAuthorizationStatus status = [ECPrivacyCheckGatherTool contactsAuthorizationStatus];
        ECAlertShow(@"通讯录权限状态:", [NSString stringWithFormat:@"%ld", (long)status], @"确定", ^{
        });
    } else {
        [ECPrivacyCheckGatherTool requestContactsAuthorizationWithCompletionHandler:^(BOOL granted) {
            if (granted) {
                [ECAlert showConfirmAlertWithMessage:@"已获取通讯录权限" completion:nil];
            } else {
                [ECAlert showConfirmAlertWithMessage:@"用户禁用该APP使用通讯录权限" completion:nil];
            }
        }];
    }
}
蓝牙权限
- (void)checkBluetooth:(NSInteger)buttonIndex {
    // 这里要用全局属性
    self.bluetoohTools = [[ECPrivacyCheckBluetooth alloc] init];
    
    [self.bluetoohTools requestBluetoothAuthorizationWithCompletionHandler:^(ECCBAuthorizationState state) {
        if (state == ECCBAuthorizationStatePoweredOn) {
            ECAlertShow(@"蓝牙状态", @"开启并可用", @"确定", nil);
        } else if (state == ECCBAuthorizationStatePoweredOff) {
            ECAlertShow(@"蓝牙状态", @"关闭", @"确定", nil);
        } else if (state == ECCBAuthorizationStateUnauthorized) {
            ECAlertShow(@"蓝牙状态", @"未授权", @"确定", nil);
        } else if (state == ECCBAuthorizationStateUnsupported) {
            ECAlertShow(@"蓝牙状态", @"不支持蓝牙", @"确定", nil);
        } else if (state == ECCBAuthorizationStateResetting) {
            ECAlertShow(@"蓝牙状态", @"正在重置,与系统服务暂时丢失", @"确定", nil);
        } else {
            // ECCBAuthorizationStateUnknown
            ECAlertShow(@"蓝牙状态", @"未知状态", @"确定", nil);
        }
    }];
}
代码中均有非常详细的中文注释,可以直接查看
再附一张Demo截图

02.PNG

######工具类和Demo中已经给出了非常完整的获取权限和检测权限逻辑代码,除了可以直接导入工具类使用外,也可以直接Copy逻辑代码到自己的项目中使用。

Author

License

ECPrivacyCheckTools is available under the MIT license. See the LICENSE file for more info.

ecprivacychecktools's People

Contributors

echozuo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

ecprivacychecktools's Issues

支持pod

虽然简单能够简单依赖,但是更新重复拖动还是麻烦,能不能支持下cocoapod依赖

xxx has changed to Invalid Binary

我在我最新的项目中使用了你的类,不知道为什么我多次提交,都出现, “xxx has changed to Invalid Binary”,后来我把这个类移走了之后,直接提交成功了,这是为什么呢?

Pod failure

ECPrivacyCheckTools

你的demo是这样写的:👇
use_frameworks!

platform :ios, '8.0'

target 'ECPrivacyCheckTools_Example' do
pod 'ECPrivacyCheckTools', :path => '../'

target 'ECPrivacyCheckTools_Tests' do
inherit! :search_paths

pod 'FBSnapshotTestCase'

end
end

判断是否有添加照片到系统相册有bug

1.podspec没有制作成功
2.判断是否有添加照片到系统相册,权限判断无效,如下为尝试解决方案
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
if (status == PHAuthorizationStatusAuthorized) {

     }
}];

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.