#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. К сожалению, это уведомление не запускается при сбросе конфиденциальности.