Подтвердить что ты не робот

IOS перестала запрашивать у пользователя разрешение на фотобиблиотеку

iOS больше не запрашивает у пользователя разрешение на фотобиблиотеку. Даже когда я удалил приложение с устройства. Это также происходит на Simulator.

switch ([ALAssetsLibrary authorizationStatus])
{
    case ALAuthorizationStatusAuthorized:
        RPMLog(@"authorized");
        break;
    case ALAuthorizationStatusDenied:
        RPMLog(@"denied");
        break;
    case ALAuthorizationStatusNotDetermined:
        RPMLog(@"not determined");
        break;
    case ALAuthorizationStatusRestricted:
        RPMLog(@"restricted");
        break;
}

Я уже авторизовался, когда устанавливаю приложение в первый раз. До этого нет другого события или экрана, который запрашивает, чтобы фотографии вызывали приглашение пользователя.

Затем я запрашиваю numberOfAssets в SavedPhotos и получаю его без подсказки доступа:

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {

    if (!group) return;

    UIActionSheet *actionSheet = nil;
    if (([group numberOfAssets] > 0))
    {
        actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) destructiveButtonTitle:nil otherButtonTitles:NSLocalizedString(@"Take new photo", nil), NSLocalizedString(@"Use last photo taken", nil), NSLocalizedString(@"Choose existing", nil), nil];
    }
    else
    {
        actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) destructiveButtonTitle:nil otherButtonTitles:NSLocalizedString(@"Take new photo", nil), NSLocalizedString(@"Choose existing", nil), nil];
    }

    actionSheet.actionSheetStyle = UIActionSheetStyleBlackTranslucent;
    [actionSheet showFromTabBar:self.tabBar];
    [TestFlight passCheckpoint:@"New Look: Tab Bar"];

} failureBlock:^(NSError *error) {

    NSAssert(!error, [error description]);
}];
4b9b3361

Ответ 1

Что происходит, iOS сохраняет разрешение, предоставленное вашему приложению, сопоставленное с идентификатором пакета, если приложение удалено, эти данные сохраняются в течение 24 часов, это позволяет избежать запроса пользователя, если он переустанавливает приложение (возможно, после ошибочного удаления приложение).

Это также происходит для подсказок Push Notification.

В качестве обходного пути я цитирую Apple в отношении Push-уведомлений:

Сброс уведомлений о предупреждениях Push Push для iOS

Первый iOS запрашивает приложения с поддержкой push-приложений для push-уведомлений. если они хотят получать уведомления для этого приложения. Как только пользователь ответил на это предупреждение, он не будет представлен повторно, если только устройство восстановлено или приложение было удалено хотя бы на день.

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

Источник: Техническая нота Apple TN2265

Ответ 2

В качестве вопроса для разрешений для фотобиблиотеки существует другой способ без изменения системных часов и выключения устройства.

Вы можете просто перейти в приложение "Настройки"

(Общие > Reset > Reset Местоположение и конфиденциальность).

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

Ответ 3

Перезапуск через приложение настроек сложно автоматизировать. Мы используем simctl to reset содержание и настройки симуляторов в автоматическом режиме до reset диалога разрешений. Это потребует повторной установки приложения в симуляторе, но снова simctl может выполнить это.

Ответ 4

Если вы используете iOS Simulator, сбросьте его с помощью Симулятор /Reset Содержание и настройки..., похоже на reset эту настройку. Конечно, вам нужно будет переустановить приложение на нем.

Ответ 5

Вы можете проверить это разрешение двумя типами -

  • В симуляторе
     вы можете сделать Симулятор /Reset Контент и настройки.
  • В физическом устройстве (iPhone, iPad)
     Вы можете изменить дату, по крайней мере разница должна быть 24 часа.

но сначала удалите приложение с устройства, затем перезапустите, затем примените эту вещь, тогда он будет работать.

Ответ 6

Вам просто нужно следовать ниже, нет необходимости переустанавливать или удалять приложение.

  • Приложение удаляется из фона
  • Перейдите в Настройки- > Общие → Reset → нажмите Reset Местоположение и конфиденциальность

Надеюсь, что вам нужна помощь.