2016-11-10 5 views
0

У меня есть неактивированный iPhone, так что нет сотовых данных, но это WiFi. Я могу получить доступ к Safari, slack и т. Д. Без проблем. Я делаю приложение, которое пытается отправить пакет JSON на сервер и ждет ответа сервера. Но, похоже, приложение, которое я делаю, даже не касается Интернета.Как разрешить моему приложению iOS отправлять информацию на сервер?

Этот код возвращает истину: (google.com это просто пример URL)

func isInternetAvailable() -> Bool 
{ 
    var zeroAddress = sockaddr_in() 
    zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress)) 
    zeroAddress.sin_family = sa_family_t(AF_INET) 

    let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) { 
     $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in 
      SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress) 
     } 
    } 

    var flags = SCNetworkReachabilityFlags() 
    if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) { 
     return false 
    } 
    let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0 
    let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0 
    return (isReachable && !needsConnection) 
} 

В то время как этот код будет возвращать ложь:

func checkInternet(flag:Bool, completionHandler:@escaping (_ internet:Bool) -> Void) 
{ 
    UIApplication.shared.isNetworkActivityIndicatorVisible = true 

    let url = NSURL(string: "http://www.google.com/") 
    let request = NSMutableURLRequest(url: url! as URL) 

    request.httpMethod = "POST" 
    request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringLocalAndRemoteCacheData 
    request.timeoutInterval = 10.0 

    NSURLConnection.sendAsynchronousRequest(request as URLRequest, queue:OperationQueue.main, completionHandler: 
     {(response: URLResponse?, data: Data?, error: Error?) -> Void in 

      UIApplication.shared.isNetworkActivityIndicatorVisible = false 

      let rsp = response as! HTTPURLResponse? 
      self.OutputTextField.text = self.OutputTextField.text + ", \(rsp)" 

      completionHandler(rsp?.statusCode == 200) 
    } as! (URLResponse?, Data?, Error?) -> Void) 
} 

Я перепробовал много способов, чтобы отправить JSON пакет, но большинство просто разбивает приложение или не дает ответа. Я ввел этот код, чтобы продемонстрировать, что приложение делает в отношении подключения к Интернету. Я изменил Info.plist, чтобы разрешить произвольные нагрузки и использовать WiFi. Все, что может заставить это работать, было бы полезно.

+0

Вы используете URL-адрес http или URL-адрес https? – Windindi

+0

Я использую http, но я добавил исключения из info.plist – Michael

ответ

0

Так что было несколько вещей, которые я сделал не так. Во-первых, я обновлял пользовательский интерфейс в фоновом потоке, вызывающем сбои. Отправляясь к серверному соединению, щелкните правой кнопкой мыши на info.plist и отредактируйте его как XML-документ и добавьте исключения сайта таким образом.

Смежные вопросы