我们可以在iOS上阅读无线数据权限吗?

时间:2018-05-17 09:26:32

标签: ios reachability ios-permissions

如果无法访问互联网,是否可以通过编程方式区分以下权限案例?

  1. 用户拒绝为该应用使用数据的权限。
  2. 用户已授予使用数据权限但手机处于飞行模式(或根本没有SIM / WiFi)的情况。
  3. allow app to use data

    我想阅读这些无线数据权限,以区分上述情况以获得更友好的错误消息(例如,在一种情况下,我建议验证权限,在另一种情况下,我建议检查飞行模式)

    我所能找到的只是基于How to use SCNetworkReachability in Swift获得互联网可访问性,但它并不了解实际权限:

    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 个答案:

答案 0 :(得分:3)

总之,你可能无法区分这些情况,你可能不应该这样做。 Apple甚至不想让你使用可达性。他们的观点是:你的理由不是你的理由,而是你的理由(即尝试使用网络)或死亡(即失败)。如果你要失败,你就会优雅地失败,并且你已经完成了你的工作。

答案 1 :(得分:3)

作为一般规则,您无法直接读取权限。您只能确定功能(我的意思是“当您尝试执行某些操作时它会失败”),这些功能有时会以用户可控制权限以外的方式设置,例如父母控制或企业证书强加的限制。你可能在这里很幸运,而且有一种方法,但我的期望是'不'。