iOS14相册权限适配

4,609 阅读2分钟

前言

在 iOS13 及以前,当用户首次访问App时,只有两个权限选择一个是取消权限另一个是全部权限; 如果选择全部权限 等于开放整个相册的权限 某些场景下一次只要选取一张图片 却要给app开放整个图片库的权限。

在 iOS14 中添加了 “LimitedPhotos Library” 的概念,用户可以授予应用访问其一部分的照片,对于应用来说,仅能读取到用户选择让应用来读取的照片 把主动权交给了用户。

新权限

一.首次打开

当用户升级到iOS14时 在打开有访问相册权限的App时 会弹起这三个选项

  1. 选择照片(iOS14新特性 用户自己选择给这款app选择照片);
  2. 允许访问全部照片(如果选择此选项 将和iOS13一样使用相册);
  3. 不允许授权(和iOS13一致);

当选择第一个的时候会临时弹起一个选择此次需要的照片的相册浮层(系统)

此浮层是PUPhotoPickerHostViewCongroller 此类无法自定义以及继承 只能使用系统样式和功能;

在此次App生命周期内(App启动到App关闭app期间 此关闭包括正常or非正常关闭) 再次调用相册不会弹起任何权限相关的提示 包括选择照片

二. 非首次打开

当第二次启动启动app的生命周期内 访问相册权限会出现此新的权限选择

  1. 选择照片(同第一次选择)
  2. 保持现在选择(取消操作)

三. 总结

  1. 生命周期内只能授权一次,授权不能二次弹出。可以通过代码呼起选择照片界面。 无法获取选择外的图片:当选择完照片后相册里API只能获取到选择的图片,相册外的无法获取; 可以通过 此代码弹起获取图片
//呼起选择图片页面
    [[PHPhotoLibrary sharedPhotoLibrary] presentLimitedLibraryPickerFromViewController:self];
  1. 可以通过在info.plist文件里Prevent limited photos access alert设置YES隐藏获取选择图片弹窗(参考二);
  2. 已选择全部授权的用户,授权再也不会弹出。
  3. 相册发生变化 不能自动获取 拍照后的照片可以自动加入此次权限 无需选择。 5.可以获取到用户授权状态
PHAccessLevel level1 = PHAccessLevelAddOnly;// 仅允许添加照片
    PHAccessLevel level2 = PHAccessLevelReadWrite;// 允许访问照片,limitedLevel 必须为 readWrite
    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatusForAccessLevel:level2];//查询权限
      switch (status) {
          case PHAuthorizationStatusLimited:
              NSLog(@"limited");
              break;
          case PHAuthorizationStatusDenied:
              NSLog(@"denied");
              break;
          case PHAuthorizationStatusAuthorized:
              NSLog(@"authorized");
              break;
          default:
              break;
    }
  1. 获取权限的时候 iOS14新增API 权限枚举PHAccessLevel
PHAccessLevel levelAddOnly = PHAccessLevelAddOnly;// 仅允许添加照片
PHAccessLevel levelReadWrite = PHAccessLevelReadWrite;// 允许访问照片,limitedLevel 必须为 readWrite

此次权限的更新更代表了苹果对隐私的重要性;