2016-06-21 14 views
-1

自分のユーザーがインターネットにアクセスして、自分のユーザーアカウントにログインするなどの特定のタスクを実行できるかどうかを確認しようとしています。私は現在、を使用していた到達可能性クラスを使用していますが、現在はWi-Fi接続があるかどうかを確認するためにのみ機能します。私の電話が4Gまたはモバイルデータに接続されている場合、インターネットに接続できないと言われます。インターネット接続を確認できる別の方法はありますか?インターネットが利用可能かどうかを確認する4G

ご協力いただきありがとうございます。 :-)

import Foundation 
import SystemConfiguration 

public class Reachability { 

class func isConnectedToNetwork() -> Bool { 
    var zeroAddress = sockaddr_in(sin_len: 0, sin_family:0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)) 
    zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) 
    zeroAddress.sin_family = sa_family_t(AF_INET) 

    let defaultRouteReachability = withUnsafePointer(&zeroAddress) { 
     SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, UnsafePointer($0)) 
    } 

    var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0) 
    if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false { 
     return false 
    } 

    let isReachable = flags == .Reachable 
    let needsConnection = flags == .ConnectionRequired 

    return isReachable && !needsConnection 
} 

}

+2

[iOSまたはOSXでアクティブなインターネット接続を確認するにはどうすればよいですか?](http://stackoverflow.com/questions/1083701/how-to-check-for-an-active-internet-connection- on-ios-or-osx) – Adrian

+0

^私の記事で触れた到達可能性クラスを使っています。残念ながら、私はそのクラスを使用すると、WiFiのみを検出し、4Gを検出しません。 – Tim

+0

あなたの投稿を編集し、コメントを投稿した後に 'Reachability'部分に追加しました。 http://stackoverflow.com/a/19378112/4475605 – Adrian

答えて

1

を開き、新しいスウィフトファイルとこのクラスを含める: -

import Foundation 
import SystemConfiguration 

public class Reachability { 

    class func isConnectedToNetwork() -> Bool { 

     var zeroAddress = sockaddr_in() 
     zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) 
     zeroAddress.sin_family = sa_family_t(AF_INET) 

     guard let defaultRouteReachability = withUnsafePointer(&zeroAddress, { 
      SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)) 
     }) else { 
      return false 
     } 

     var flags : SCNetworkReachabilityFlags = [] 
     if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) { 
      return false 
     } 

     let isReachable = flags.contains(.Reachable) 
     let needsConnection = flags.contains(.ConnectionRequired) 
     return (isReachable && !needsConnection) 
    } 
} 

次に、あなたは

if Reachability.isConnectedToNetwork() { 
    //Has Connectivity 
} else { 
    //No connection 
} 
0

スウィフトのような別のクラスでの接続性を確認することができます3版

class func isConnectedToNetwork() -> Bool { 

    var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)) 
    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) == false { 
     return false 
    } 

    let isReachable = flags.contains(.reachable) 
    let needsConnection = flags.contains(.connectionRequired) 
    return (isReachable && !needsConnection) 
} 
関連する問題