iOS各种访问权限总结

麦克风访问(AVAudioSession)

  • 权限查看
- (AVAudioSessionRecordPermission)recordPermission NS_AVAILABLE_IOS(8_0) __TVOS_PROHIBITED __WATCHOS_PROHIBITED;

typedef NS_OPTIONS(NSUInteger, AVAudioSessionRecordPermission)
{
    AVAudioSessionRecordPermissionUndetermined      = 'undt', //未定,即还没请求权限
    AVAudioSessionRecordPermissionDenied            = 'deny', //拒绝
    AVAudioSessionRecordPermissionGranted           = 'grnt' //同意
} NS_AVAILABLE_IOS(8_0) __TVOS_PROHIBITED __WATCHOS_PROHIBITED;


  • 权限请求
- (void)requestRecordPermission:(PermissionBlock)response NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED __WATCHOS_PROHIBITED;

[[AVAudioSession sharedInstance]requestRecordPermission:^(BOOL granted){
}];

相机访问(AVCaptureDevice)

  • 权限查看
+ (AVAuthorizationStatus)authorizationStatusForMediaType:(NSString *)mediaType NS_AVAILABLE_IOS(7_0);


typedef NS_ENUM(NSInteger, AVAuthorizationStatus) {
    AVAuthorizationStatusNotDetermined = 0, //未决定,即还没请求权限
    AVAuthorizationStatusRestricted, //不允许访问
    AVAuthorizationStatusDenied, //拒绝
    AVAuthorizationStatusAuthorized //允许
} NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;


  • 权限请求
+ (void)requestAccessForMediaType:(NSString *)mediaType completionHandler:(void (^)(BOOL granted))handler NS_AVAILABLE_IOS(7_0);

mediaType的类型有:AVMediaTypeVideo,AVMediaTypeAudio.

相册访问

iOS 6.0-9.0(ALAssetsLibrary)

#import 
  • 权限查看

+ (ALAuthorizationStatus)authorizationStatus NS_DEPRECATED_IOS(6_0, 9_0, "Use authorizationStatus on the shared PHPhotoLibrary from the Photos framework instead");

typedef NS_ENUM(NSInteger, ALAuthorizationStatus) {
    ALAuthorizationStatusNotDetermined NS_ENUM_DEPRECATED_IOS(6_0, 9_0) = 0, // User has not yet made a choice with regards to this application
    ALAuthorizationStatusRestricted NS_ENUM_DEPRECATED_IOS(6_0, 9_0),        // This application is not authorized to access photo data.
                                            // The user cannot change this application’s status, possibly due to active restrictions
                                            //  such as parental controls being in place.
    ALAuthorizationStatusDenied NS_ENUM_DEPRECATED_IOS(6_0, 9_0),            // User has explicitly denied this application access to photos data.
    ALAuthorizationStatusAuthorized NS_ENUM_DEPRECATED_IOS(6_0, 9_0)        // User has authorized this application to access photos data.
} NS_DEPRECATED_IOS(6_0, 9_0, "Use PHAuthorizationStatus in the Photos framework instead");

iOS 8.0+ (PHPhotoLibrary)

#import 
  • 权限查看
+ (PHAuthorizationStatus)authorizationStatus;

typedef NS_ENUM(NSInteger, PHAuthorizationStatus) {
    PHAuthorizationStatusNotDetermined = 0, // User has not yet made a choice with regards to this application
    PHAuthorizationStatusRestricted,        // This application is not authorized to access photo data.
                                            // The user cannot change this application’s status, possibly due to active restrictions
                                            //   such as parental controls being in place.
    PHAuthorizationStatusDenied,            // User has explicitly denied this application access to photos data.
    PHAuthorizationStatusAuthorized         // User has authorized this application to access photos data.
} PHOTOS_AVAILABLE_IOS_TVOS(8_0, 10_0);


  • 权限请求
+ (void)requestAuthorization:(void(^)(PHAuthorizationStatus status))handler;

相册相机访问(读取-UIImagePickerController)

  • 是否支持读取
+ (BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType;                 // returns YES if source is available (i.e. camera present)

typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) {
    UIImagePickerControllerSourceTypePhotoLibrary,
    UIImagePickerControllerSourceTypeCamera,
    UIImagePickerControllerSourceTypeSavedPhotosAlbum
} __TVOS_PROHIBITED;


定位

#import 
  • 权限查看
+ (CLAuthorizationStatus)authorizationStatus __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_2);

typedef NS_ENUM(int, CLAuthorizationStatus) {
    // User has not yet made a choice with regards to this application
    kCLAuthorizationStatusNotDetermined = 0,

    // This application is not authorized to use location services.  Due
    // to active restrictions on location services, the user cannot change
    // this status, and may not have personally denied authorization
    kCLAuthorizationStatusRestricted,

    // User has explicitly denied authorization for this application, or
    // location services are disabled in Settings.
    kCLAuthorizationStatusDenied,

    // User has granted authorization to use their location at any time,
    // including monitoring for regions, visits, or significant location changes.
    //
    // This value should be used on iOS, tvOS and watchOS.  It is available on
    // MacOS, but kCLAuthorizationStatusAuthorized is synonymous and preferred.
    kCLAuthorizationStatusAuthorizedAlways NS_ENUM_AVAILABLE(10_12, 8_0),

    // User has granted authorization to use their location only when your app
    // is visible to them (it will be made visible to them if you continue to
    // receive location updates while in the background).  Authorization to use
    // launch APIs has not been granted.
    //
    // This value is not available on MacOS.  It should be used on iOS, tvOS and
    // watchOS.
    kCLAuthorizationStatusAuthorizedWhenInUse NS_ENUM_AVAILABLE(NA, 8_0),

    // User has authorized this application to use location services.
    //
    // This value is deprecated or prohibited on iOS, tvOS and watchOS.
    // It should be used on MacOS.
    kCLAuthorizationStatusAuthorized NS_ENUM_DEPRECATED(10_6, NA, 2_0, 8_0, "Use kCLAuthorizationStatusAuthorizedAlways") __TVOS_PROHIBITED __WATCHOS_PROHIBITED = kCLAuthorizationStatusAuthorizedAlways
};

  • 是否允许
+ (BOOL)locationServicesEnabled __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);
  • 请求权限
- (void)requestWhenInUseAuthorization __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_8_0);//应用使用时

- (void)requestAlwaysAuthorization __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_8_0) __TVOS_PROHIBITED;//一直打开

HealthKit

  • HealthKit是否可用
+ (BOOL)isHealthDataAvailable;

  • 请求权限
- (HKAuthorizationStatus)authorizationStatusForType:(HKObjectType *)type;

typedef NS_ENUM(NSInteger, HKAuthorizationStatus) {
    HKAuthorizationStatusNotDetermined = 0,
    HKAuthorizationStatusSharingDenied,
    HKAuthorizationStatusSharingAuthorized,
} HK_ENUM_AVAILABLE_IOS_WATCHOS(8_0, 2_0);



- (void)requestAuthorizationToShareTypes:(nullable NSSet *)typesToShare
                               readTypes:(nullable NSSet *)typesToRead
                              completion:(void (^)(BOOL success, NSError * _Nullable error))completion;
                              

通讯录

iOS9.0-

#import

  • 权限查看
ABAuthorizationStatus authStatus = ABAddressBookGetAuthorizationStatus();
typedef CF_ENUM(CFIndex, ABAuthorizationStatus) {
    kABAuthorizationStatusNotDetermined = 0,    // deprecated, use CNAuthorizationStatusNotDetermined
    kABAuthorizationStatusRestricted,           // deprecated, use CNAuthorizationStatusRestricted
    kABAuthorizationStatusDenied,               // deprecated, use CNAuthorizationStatusDenied
    kABAuthorizationStatusAuthorized            // deprecated, use CNAuthorizationStatusAuthorized
} 

  • 权限请求

ABAddressBookRef addBook = ABAddressBookCreateWithOptions(NULL, NULL);
ABAddressBookRequestAccessWithCompletion(addBook, ^(bool granted, CFErrorRef error){
        
    });


iOS9.0+

#import

  • 权限查看
typedef NS_ENUM(NSInteger, CNEntityType)
{
    /*! The user's contacts. */
    CNEntityTypeContacts
}  NS_ENUM_AVAILABLE(10_11, 9_0);

+ (CNAuthorizationStatus)authorizationStatusForEntityType:(CNEntityType)entityType;

typedef NS_ENUM(NSInteger, CNAuthorizationStatus)
{
    /*! The user has not yet made a choice regarding whether the application may access contact data. */
    CNAuthorizationStatusNotDetermined = 0,
    /*! The application is not authorized to access contact data.
     *  The user cannot change this application’s status, possibly due to active restrictions such as parental controls being in place. */
    CNAuthorizationStatusRestricted,
    /*! The user explicitly denied access to contact data for the application. */
    CNAuthorizationStatusDenied,
    /*! The application is authorized to access contact data. */
    CNAuthorizationStatusAuthorized
} NS_ENUM_AVAILABLE(10_11, 9_0);
  • 权限请求
 CNContactStore *store = [[CNContactStore alloc] init];
 [store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
    }];

日历事件和提醒

#import

  • 权限查看
+ (EKAuthorizationStatus)authorizationStatusForEntityType:(EKEntityType)entityType NS_AVAILABLE(10_9, 6_0);

typedef NS_ENUM(NSInteger, EKAuthorizationStatus) {
    EKAuthorizationStatusNotDetermined = 0,
    EKAuthorizationStatusRestricted,
    EKAuthorizationStatusDenied,
    EKAuthorizationStatusAuthorized,
} NS_AVAILABLE(10_9, 6_0);

  • 权限请求
- (void)requestAccessToEntityType:(EKEntityType)entityType completion:(EKEventStoreRequestAccessCompletionHandler)completion NS_AVAILABLE(10_9, 6_0);

媒体库访问

虽然没有查看是否开启权限的接口,但是还是需要在Info.plist中添加说明。

  • 简单调用实例
- (IBAction)chooseMediaItem:(id)sender {
    MPMediaPickerController *mpc = [[MPMediaPickerController alloc]initWithMediaTypes:MPMediaTypeMusic];
    mpc.delegate = self;
    mpc.prompt =@"Please select a music";
    mpc.allowsPickingMultipleItems= NO;
    [self presentViewController:mpc animated:YES completion:nil];

}

#pragma mark - MPMediaPickerController delegate

- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection{
    /*insert your code*/
    MPMediaItem *mediaItem = [[mediaItemCollection items] objectAtIndex:0];
    self.item = mediaItem;
    [self dismissViewControllerAnimated:YES completion:nil];
}

- (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker
{
    [self dismissViewControllerAnimated:YES completion:nil];
}


这里特别注意权限请求时需要在Info.plist中添加对应的权限请求说明。如下所示

  • 使用照相(Camera)功能:Privacy - Camera Usage Description
  • 使用HealthKit读数据: Privacy - Health Share Usage Description
  • 使用HealthKit写数据: Privacy - Health Update Usage Description
  • 定位功能: Privacy - Location Always Usage Description Privacy - Location When In Use Usage Description
  • 使用麦克风(Microphone):Privacy - Microphone Usage Description
  • 使用相册功能: Privacy - Photo Library Usage Description
  • BLE 设备作为外设 :Privacy - Bluetooth Peripheral Usage Description
  • 通讯录访问:Privacy - Contacts Usage Description
  • 日历事件访问: Privacy - Calendars Usage Description
  • 媒体库访问: Privacy - Media Library Usage Description

如果还有未补充的请留言

你可能感兴趣的:(iOS各种访问权限总结)