Как использовать PHAuthorizationStatusLimited в iOS 14

Чтобы получить дату создания фотографии, используйте requestAuthorizationForAccessLevel перед показом PHPickerViewController.

    PHAccessLevel level = PHAccessLevelReadWrite;
    [PHPhotoLibrary requestAuthorizationForAccessLevel:level handler:^(PHAuthorizationStatus status) {
            if (status == PHAuthorizationStatusLimited || status == PHAuthorizationStatusAuthorized) {
                dispatch_async(dispatch_get_main_queue(), ^{
                    PHPickerConfiguration *configuration = [[PHPickerConfiguration alloc] initWithPhotoLibrary:[PHPhotoLibrary sharedPhotoLibrary]];
                    configuration.filter = [PHPickerFilter imagesFilter];
                    configuration.selectionLimit = 1;
                    PHPickerViewController *picker = [[PHPickerViewController alloc] initWithConfiguration:configuration];
                    picker.delegate = self;
                    [self showViewController:picker sender:nil];
                });
            }
    }];

хотя статус ограничен, но iOS 14 по-прежнему отображает все изображения.

Как я могу получить только ограниченное количество фотографий с помощью PHPickerViewController?

1 ответ

Итак, в iOS 14 изменилось несколько вещей, давайте рассмотрим шаг за шагом.

1. Как прочитать статус разрешения доступа к PHPhotoLibrary

Старый

       let status = PHPhotoLibrary.authorizationStatus()

Новый

       let status = PHPhotoLibrary.authorizationStatus(for: .readWrite)

2. Как запросить разрешение на доступ к PHPhotoLibrary

Старый

       PHPhotoLibrary.requestAuthorization { status in
 //your code               
 }

Новый

       PHPhotoLibrary.requestAuthorization(for: .readWrite) { status in
      switch status {
          case .limited:
               print("limited access granted")
                
          default:
               print("denied, .restricted ,.authorized")
                
      }
  }

Вы обязаны показать галерею, как показано ниже, в случае, если пользователь предоставил вам ограниченное разрешение.

       if status == .limited {
     PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: self)
}

Когда вы представляете LimitedLibraryPicker, выбранные изображения из предыдущего сеанса будут уже отмечены флажком вместе с сообщением в верхней части экрана - " Выберите больше фотографий или отмените выбор, чтобы закрыть доступ "

В случае, если пользователь предоставил вам ограниченный доступ, вы по-прежнему представляете обычную галерею, используя UIImagePickerController или стороннюю библиотеку, такую ​​как BSImagePicker, галерея со всеми изображениями будет отображаться, даже если вы можете выбрать и импортировать в свое приложение, но в консоли Xcode 12 она будет отображаться предупреждения, как показано ниже

       Failed to decode image
[ImageManager] Failed to get sandbox extension for url: file///filepath/5003.JPG, error: Error Domain=com.apple.photos.error Code=41008 "Invalid asset uuid for client" UserInfo={NSLocalizedDescription=Invalid asset uuid for client}
Другие вопросы по тегам