Если Интернет недоступен, можно ли программно различить следующие случаи разрешения?
- Случай, когда пользователь отказал в разрешении на использование данных для приложения.
- Случай, когда пользователь предоставил разрешения на использование данных, но телефон находится в режиме полета (или вообще не имеет 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)
}