Is there a way to determine the type of WWAN connection (3G/Edge etc.) in iOS? I'm familiar with Apple's Reachability class, but it can just differ between Wifi/WWAN ...
Thanks a lot for helping!
Is there a way to determine the type of WWAN connection (3G/Edge etc.) in iOS? I'm familiar with Apple's Reachability class, but it can just differ between Wifi/WWAN ...
Thanks a lot for helping!
in iOS 7.0+ we have CoreTelephony
framework which can provide us the required details about network type.
Here is a sample.
CTTelephonyNetworkInfo *telephonyInfo = [[CTTelephonyNetworkInfo alloc] init];
NSString *currentRadio = telephonyInfo.currentRadioAccessTechnology;
if ([currentRadio isEqualToString:CTRadioAccessTechnologyLTE]) {
// LTE
} else if([currentRadio isEqualToString:CTRadioAccessTechnologyEdge]) {
// EDGE
} else if([currentRadio isEqualToString:CTRadioAccessTechnologyWCDMA]){
// 3G
}
An answer here Checking cellular network type in iOS may help you. It says that you can try to determine your mobile network type from their IP address ranges.
Swift 5, iOS12+:
class func gmGetNetWorkName() -> String {
guard let reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, "www.google.com") else {
return "NO INTERNET"
}
var flags = SCNetworkReachabilityFlags()
SCNetworkReachabilityGetFlags(reachability, &flags)
let isReachable = flags.contains(.reachable)
let isWWAN = flags.contains(.isWWAN)
if isReachable {
if isWWAN {
let networkInfo = CTTelephonyNetworkInfo()
let carrierType = networkInfo.serviceCurrentRadioAccessTechnology
guard let carrierTypeName = carrierType?.first?.value else {
return "UNKNOWN"
}
switch carrierTypeName {
case CTRadioAccessTechnologyGPRS, CTRadioAccessTechnologyEdge, CTRadioAccessTechnologyCDMA1x:
return "2G"
case CTRadioAccessTechnologyLTE:
return "4G"
default:
return "3G"
}
} else {
return "WIFI"
}
} else {
return "NO INTERNET"
}
}