Определить программно, были ли сброшены настройки конфиденциальности пользователя

#ios #permissions #privacy #user-permissions

#iOS #разрешения #конфиденциальность #пользователь-разрешения

Вопрос:

Есть ли способ программно определить, были ли сброшены настройки конфиденциальности пользователя? Через Settings > General > Reset > Reset Location amp; Privacy

В настоящее время я работаю над фреймворком, чтобы упростить запрос разрешения пользователя и предоставить больше контекста: ISHPermissionKit

В некоторых случаях (например, при сохранении «Не спрашивай меня снова») было бы хорошо, если бы я мог также сбросить внутреннее состояние структуры разрешений, если система перезагрузится.

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

Я проверил оба [[ASIdentifierManager sharedManager] advertisingIdentifier] , и [[UIDevice currentDevice] identifierForVendor] оба остаются неизменными при сбросе конфиденциальности.

Ответ №1:

Извините, но это невозможно сделать. Для этого нет вызова делегата. Лучший способ — проверить

applicationDidBecomeActive:

Комментарии:

1. Как бы вы это проверили, если вы не сохраняете, если пользователь ранее сделал выбор?

2. Вам нужно будет сохранить его. Например, когда пользователь разрешает push-уведомления, вы можете сделать: UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; и сохранить типы. Затем в applicationDidBecomeActive: вы можете проверить, изменилось ли это. Вы можете сделать то же самое с адресной книгой, а также с местоположением.

3. Я знаю об этой технике / стратегии, однако в вопросе конкретно рассматриваются способы, которые работают без проверки разрешений или сохранения предыдущих решений.

4. Это предназначено для общего использования и не должно ограничиваться удаленными уведомлениями или разрешениями местоположения. Я ценю вашу помощь.

5. Я понимаю, и я сказал, что я не знаю, как указано в моем первоначальном ответе. Четыре года работал в Apple в команде iOS. Кроме того, вы должны знать, что в iOS8 появилось много новых разрешений, таких как «продолжение использования фонового местоположения».

Ответ №2:

 [[NSNotificationCenter defaultCenter]addObserver:self
       selector:@selector(privacyWasReset:)  
           name:NSUserDefaultsDidChangeNotification
         object:nil];



[[NSNotificationCenter defaultCenter] removeObserver:self name:NSUserDefaultsDidChangeNotification object:nil];
to ->appDidBecomeActive method and also
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(privacyWasReset) name:NSUserDefaultsDidChangeNotification object:nil];
to-> applicationDidEnterBackground method.
  

Это может вам помочь..

Комментарии:

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

2. developer.apple.com/library/ios/samplecode/AppPrefs/…

3. Комментарии в этом проекте, похоже, подразумевают, что это относится только к настройкам, а не к разрешениям.

4. К сожалению, это уведомление не запускается при сбросе конфиденциальности.