相册授权流程为:
判断相册授权状态:
- 拒绝授权
- 可以弹出提示告知用户去设置里授权
- 已授权
- 继续正常流程
- 未授权
- 申请授权,系统会弹出授权框
- 允许授权 —— 继续正常流程
- 拒绝授权 —— 不作处理(下次用户再点击相册或选图时会重复上面的流程,弹出提示告知用户去授权)
- 申请授权,系统会弹出授权框
检查授权
[PHPhotoLibrary authorizationStatus];
/*
返回的一个枚举类型
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.
*/
申请授权, 建议在主线程里做
- (void)requestAuthorizationWithCompletion:(void(^)(PHAuthorizationStatus status))handler {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
dispatch_async(dispatch_get_main_queue(), ^{
if (handler) {
handler(status);
}
});
}];
});
}
下面是例子:
switch ([[TZImageManager manager] checkAlbumAuthorized]) {
case PHAuthorizationStatusAuthorized: {
NSLog(@"%@ %@", config, itemId);
__strong __typeof(weakSelf) strongSelf = weakSelf;
strongSelf.itemID = itemId;
dispatch_async(dispatch_get_main_queue(), ^{
[strongSelf openImagePicker:config];
});
}
break;
case PHAuthorizationStatusNotDetermined:{
[[TZImageManager manager] requestAuthorizationWithCompletion:^(PHAuthorizationStatus status) {
if (status != PHAuthorizationStatusAuthorized) {
return;
}
NSLog(@"%@ %@", config, itemId);
__strong __typeof(weakSelf) strongSelf = weakSelf;
strongSelf.itemID = itemId;
dispatch_async(dispatch_get_main_queue(), ^{
[strongSelf openImagePicker:config];
});
}];
}
break;
default:
[weakSelf showAuthorizedAlbumAlert];
}