【问题标题】:Determine programmatically if the user's privacy settings were reset以编程方式确定用户的隐私设置是否已重置
【发布时间】:2014-08-20 16:17:54
【问题描述】:

是否有办法以编程方式确定用户的隐私设置是否已重置? 通过Settings > General > Reset > Reset Location & Privacy

我目前正在开发一个框架,以便更轻松地请求用户许可并提供更多上下文:ISHPermissionKit

在某些情况下(例如,当存储“不要再问我”时)如果系统重置时我还可以重置权限框架的内部状态,那就太好了。

一种方法显然是检查以前授予/拒绝的状态现在是否未确定(例如位置)。然而,这需要检查大量权限,并且不可能对所有权限类别进行。

我已经检查了[[ASIdentifierManager sharedManager] advertisingIdentifier][[UIDevice currentDevice] identifierForVendor]在重置隐私时都保持不变。

【问题讨论】:

    标签: ios permissions privacy user-permissions


    【解决方案1】:

    抱歉,这无法完成。没有执行此操作的委托调用。最好的方法是检查

    applicationDidBecomeActive:

    【讨论】:

    • 如果用户之前做出了选择,如果您不存储,您将如何检查?
    • 您必须存储它。例如,当用户允许推送通知时,您可以这样做: UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];并存储类型。然后在 applicationDidBecomeActive: 你可以检查是否已经改变。您可以对地址簿和位置执行相同的操作。
    • 我知道这种技术/策略,但是该问题专门寻找无需检查权限或存储先前决定的工作方式。
    • 这旨在用于一般用途,不应仅限于 remoteNotifications 或位置权限。不过,我感谢您的帮助。
    • 我理解并且我说我不知道​​我原来的答案中所说的那样。在 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.
    

    这可能对你有帮助..

    【讨论】:

    • 如果在应用未运行时已重置设置,是否会在应用重新启动后调用?从文档看来,它仅在更改实际 NSUserDefaults 值时才被调用。
    • 该项目中的 cmets 似乎暗示这仅与设置有关,与权限无关。
    • 很遗憾,重置隐私时不会触发此通知。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2011-03-30
    • 1970-01-01
    相关资源
    最近更新 更多