我们能在iOS上读取无线数据权限吗?

6
如果网络不可达,是否可以通过编程区分以下权限情况?
  1. 用户拒绝了应用使用数据的权限。
  2. 用户已授予应用使用数据的权限,但手机处于飞行模式(或根本没有SIM卡/ WiFi)。

allow app to use data

我希望能够阅读那些无线数据权限以区分上述情况,以便获得更友好的错误信息(例如,在某种情况下,我建议验证权限,在另一种情况下,我建议检查飞行模式)。
我所能找到的只是获取基于如何在Swift中使用SCNetworkReachability的互联网可达性,但它并不知道实际权限。
import SystemConfiguration

@available(iOS 9.0, macOS 10.11, *)
static func internetConnectionIsReachable() -> Bool {
    var zeroAddress = sockaddr_in6()
    zeroAddress.sin6_len = UInt8(MemoryLayout<sockaddr_in6>.size)
    zeroAddress.sin6_family = sa_family_t(AF_INET6)
    guard let reachability = withUnsafePointer(to: &zeroAddress, {
        $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
            SCNetworkReachabilityCreateWithAddress(nil, $0)
        }
    }) else {
        return false
    }
    var flags: SCNetworkReachabilityFlags = []
    guard SCNetworkReachabilityGetFlags(reachability, &flags) else {
        return false
    }
    return flags.contains(.reachable)
}
2个回答

3
总之,您可能无法区分这些情况,也不应该想要这样做。苹果甚至并不想让您使用可达性。他们的观点是:你没有必要去考虑为什么,你只需要去尝试使用网络或者失败。如果你要失败,那就优雅地失败,这就是你的工作。

3

通常情况下,你无法直接读取权限。你只能确定功能(我的意思是“当你尝试做某事时它会失败”),这些功能有时以其他方式设置,而不是用户可控的权限,例如家长控制或企业证书强制执行的限制。你可能会偶尔走运,找到一种方法,但我的预期是“不行”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接