【问题标题】:Can we read Wireless Data permissions on iOS?我们可以在 iOS 上读取无线数据权限吗?
【发布时间】:2018-05-17 09:26:31
【问题描述】:

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

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

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

我只能找到基于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)
}

【问题讨论】:

    标签: ios reachability ios-permissions


    【解决方案1】:

    总而言之,您可能无法区分这些情况,而且您可能不应该这样做。 Apple 甚至不希望您使用可达性。他们的观点是:你不去解释为什么,你自己去做(即尝试使用网络)或死(即失败)。如果你要失败,就优雅地失败,你已经完成了你的工作。

    【讨论】:

      【解决方案2】:

      一般来说,您不能直接读取权限。您只能确定功能(我的意思是“当您尝试做某事时它会失败”),这些功能有时以用户可控制权限以外的方式设置,例如家长控制或企业证书施加的限制。您可能会在这里走运并且有办法,但我的期望是“不”。

      【讨论】:

        猜你喜欢
        • 2012-11-02
        • 1970-01-01
        • 2021-10-06
        • 1970-01-01
        • 1970-01-01
        • 2017-09-14
        • 1970-01-01
        • 1970-01-01
        • 2020-12-04
        相关资源
        最近更新 更多