Swift: проверка в сети Wi-Fi или сотовой связи и определение скорости сети?

Мне интересно, есть ли простой способ узнать, использует ли пользователь Wi-Fi или сотовые данные (возможно, CoreTelephony)?

Меня в основном интересует только фактическая скорость сети, чтобы определить уровень качества видео, которое я должен установить для AVPLayer (через предпочитаемый пикбитрейт).


person JasonAddFour    schedule 27.09.2017    source источник


Ответы (1)


есть два шага. Сначала определите, в какой сети вы находитесь. во-вторых, какова пропускная способность. Ниже приведены две функции для выполнения каждой задачи.

Эта функция предназначена для идентификации сети, в которой вы находитесь.

enum ReachabilityType: CustomStringConvertible {
case wwan
case wiFi
var description: String {
    switch self {
    case .wwan: return "WWAN"
    case .wiFi: return "WiFi"
    }
}

}

Эта функция предназначена для получения скорости полосы пропускания.

func bandWidthCheck()  {
let sample = URL(string: "http:exampleURL")
let request = URLRequest(url: sample!)
let session = URLSession.shared
let startTime = Date()
let task =  session.dataTask(with: request) { (data, resp, error) in
    guard error == nil && data != nil else{
        print("connection error or data is nill")
        return
    }
    guard resp != nil else{
        print("response is nill")
        return
    }
    let size  = CGFloat( (resp?.expectedContentLength)!) / 1000000.0
    print(size)

    let time = CGFloat( Date().timeIntervalSince(startTime))
    print("elapsed: \(time)")
    print("Speed: \(size/time) Mb/sec")
}
task.resume()

}

person kalyan ganta    schedule 27.09.2017
comment
Я бы воздержался от тестирования подключения пользователя, потребляя данные. Вы должны измерить пинг или что-то еще, что не сделает ваше приложение пользователем данных. - person absmiths; 03.09.2019