Можем ли мы прочитать разрешения Wireless Data на iOS?
Если Интернет недоступен, возможно ли программно провести различие между следующими случаями разрешения?
- Случай, когда пользователь отказал в разрешении на использование данных для приложения.
- Случай, когда пользователь предоставил разрешения на использование данных, но телефон находится в режиме полета (или вообще не имеет SIM/WiFi).
Я хотел бы прочитать эти разрешения на беспроводную передачу данных, чтобы различать вышеприведенные случаи для более понятных сообщений об ошибках (т.е. в одном случае я бы порекомендовал проверить разрешения, а в другом случае я бы порекомендовал проверить режим полета).
Все, что я мог найти, это получить доступ к Интернету, основываясь на том, как использовать SCNetworkReachability в 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 ответа
Как правило, вы не можете читать права доступа напрямую. Вы можете определить только возможности (под которыми я подразумеваю "он терпит неудачу, когда вы пытаетесь что-то сделать"), которые иногда задаются иными способами, чем контролируемые пользователем разрешения, такие как родительский контроль или ограничения, налагаемые корпоративным сертификатом. Вам может повезти здесь, и есть способ, но я ожидал бы "нет".
Одним словом, вы, вероятно, не можете различить эти случаи, и вы, вероятно, не должны хотеть. Apple даже не хочет, чтобы вы использовали доступность. Их точка зрения такова: вы не должны думать почему, ваши, но должны делать (то есть пытаться использовать сеть) или умереть (то есть потерпеть неудачу). Неудачный изящный, если вы собираетесь потерпеть неудачу, и вы сделали свою работу.