2016-01-29 3 views
2

Для тестирования я пытался воссоздать всплывающее окно «Запрос доступа».PHPhotoLibrary requestAuthorization, не запрашивая

Update:
Под прошивкой 11, после удаления приложения, система всплывающее окно будет отображаться снова.


(предыдущий вопрос)

Первый раз запустить приложение (и только время), система всплывающих показал, запрашивающий доступ. После этого , даже не удалив приложение и перезагрузив устройство, снова вызовет это всплывающее окно.

Другими словами, устройство «запоминает» запрос пользователя, и нет возможности его сбросить.

Вот код:

[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { 

    switch (status) { 
     case PHAuthorizationStatusAuthorized: 
      NSLog(@"PHAuthorizationStatusAuthorized"); 
      break; 

     case PHAuthorizationStatusDenied: 
      NSLog(@"PHAuthorizationStatusDenied"); 
      break; 
     case PHAuthorizationStatusNotDetermined: 
      NSLog(@"PHAuthorizationStatusNotDetermined"); 
      break; 
     case PHAuthorizationStatusRestricted: 
      NSLog(@"PHAuthorizationStatusRestricted"); 
      break; 
    } 

}]; 

Когда доступ выключен в настройках, он держит печать "PHAuthorizationStatusDenied". Но не появляется всплывающее окно. Возвращается немедленно.

Было предложено добавить «Дисплейное имя пучка» на plist. Пробовал это безрезультатно, с пустым значением, $ (PRODUCT_NAME) и разными строками.

Очищенный проект, удаленный DrivedData (и удалять приложение из симулятора каждый раз). Не повезло.

Подробнее:

компании Apple образец кода «SamplePhotosApp», происходит сбой, когда вы отключите доступ фото в настройках.

ответ

1

Последующее чтение, кажется, по дизайну.

От Apple:

Этот метод всегда возвращает немедленно. Если пользователь имеет ранее предоставил или отклонил разрешение доступа к библиотеке фотографий, он выполняет при обработке вызывающий блок ; в противном случае он отображает предупреждение, а выполняет блок только после того, как пользователь ответил на предупреждение.

поговорка «Этот метод всегда возвращает сразу», если пользователь был подскажи один раз. После этого он не будет снова показывать запрос. Кажется, что не нужно (но какое-то пользовательское сообщение) снова использовать системное сообщение.

+0

Пожалуйста, взгляните на мой ответ здесь: http://stackoverflow.com/questions/26595343/determine-if-the-access-to-photo-library-is-set-or-not-ios-8/38395022 # 38395022 –

+0

Из связанного ответа путь вокруг него заключается в изменении идентификатора связки. Кажется, проблема все еще открыта; то есть нет возможности «сбросить» идентификатор пакета приложения после его написания, за исключением полного сброса устройства. Конечно, на симуляторе это сделает удаление устройства. – bauerMusic

0

Важно добавить это в свой файл Info.plist приложения. «Privacy - Photo Library Usage Description»

Я использовал что-то вроде этого: «Используется для доступа к фотографиям в библиотеке фотографий».

Это описание должно быть указано в запрошенном окне оповещения доступа.Может быть локализован, если вы хотите.

+ (void)imageLibraryCheckAccess:(UIViewController *)presenting 
         handler:(void (^)(PHAuthorizationStatus status))handler 
{ 
     PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus]; 
     if (status == PHAuthorizationStatusNotDetermined) { 
       [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { 
         if (status != PHAuthorizationStatusAuthorized) { 
           if (handler != nil) 
             handler(status); 
           NSString *title = NSLocalizedStringWithDefaultValue(@"photo.library.access.disabled.alert.title", 
                        @"Localizable", [NSBundle mainBundle], 
                        @"Photos access", @"Alert title."); 
           NSString *text = NSLocalizedStringWithDefaultValue(@"photo.library.access.disabled.alert.text", 
                        @"Localizable", [NSBundle mainBundle], 
                        @"You explicitly disabled photo library access. This results in inability to work with photos.", 
                        @"Alert text."); 
           [self alertWithPresenting:presenting title:title text:text buttons:@[[L10n okButton]] 
                handler:nil]; 
         } else if (status == PHAuthorizationStatusAuthorized) { 
           if (handler != nil) 
             handler(status); 
         } 
       }]; 
     } else if (status != PHAuthorizationStatusAuthorized) { 
       if (handler != nil) 
         handler(status); 
       NSString *title = NSLocalizedStringWithDefaultValue(@"photo.library.access.notauthorized.alert.title", 
                    @"Localizable", [NSBundle mainBundle], 
                    @"Photos access", @"Alert title."); 
       NSString *text = NSLocalizedStringWithDefaultValue(@"photo.library.access.notauthorized.alert.text", 
                    @"Localizable", [NSBundle mainBundle], 
                    @"Photo library access is disabled. Please check the application permissions or parental control settings in order to work with photos.", @"Alert text."); 
       [self alertWithPresenting:presenting title:title text:text buttons:@[[L10n okButton]] 
            handler:nil]; 
     } else if (status == PHAuthorizationStatusAuthorized) { 
       if (handler != nil) 
         handler(status); 
     } 
} 

А вот как я использую его:

[YourClassName imageLibraryCheckAccess:self handler:^(PHAuthorizationStatus status) { 
     if (status == PHAuthorizationStatusAuthorized) { 
     } 
}]; 

Успехов!

+0

У меня есть как «Конфиденциальность - описание библиотеки фотографий», так и «Конфиденциальность - Добавление библиотек» Описание использования »(новое, под iOS 11). Приложение будет просто сбой без них. Проблема состояла в том, чтобы запустить первое всплывающее окно системы. Теперь он разрешен в iOS 11. После повторного удаления приложения система снова запросит разрешение. – bauerMusic

+0

@bauerMusic Получил это, кажется, я не закончил с чтением вашего вопроса и прыгнул, чтобы ответить на него.)) Должен ли я удалить сообщение или по-прежнему полезно? –

+0

До вас. Я подумал о том, чтобы удалить весь пост (поскольку это уже не актуально), но оставит его для записи. Благодаря! – bauerMusic

Смежные вопросы