2017-06-02 11 views
0

テスト使用事例:私のシナリオではfirebase認証リスナーとネットワーク接続

、私は正常に私のアプリ をfirebaseし、実行するためにログインし、Xcodeで私のアプリを初期化します。私はその後、Xcodeでデバッガを停止し、 私のMAC上で "Wifiをオフにする"。私は再びXcodeで自分のアプリケーションを初期化します。

デバッガでは、コードが認証リスナーを初期化し、 が認証されたユーザー情報の以前にキャッシュされた値に基づいて初期化されるのがわかります。

また、コンソールログに次の例外があります。

2017-06-02 09:29:21.281 MusicPoll [7053] [Fire-Base] [I-NET901017] Encounterネットワークエラーです。コード、エラー:-1009、エラードメイン= NSURLErrorDomainコード= -1009 "インターネット接続がオフラインになっているようです。 UserInfo = {NSUnderlyingError = 0x60800005f7d0 {エラードメイン= kCFErrorDomainCFNetworkコード= -1009 "(ヌル)" のUserInfo = {_ kCFStreamErrorCodeKey = 50、_kCFStreamErrorDomainKey = 1}}、NSErrorFailingURLStringKey = https://play.googleapis.com/log、NSErrorFailingURLKey = https://play.googleapis.com/log、_kCFStreamErrorDomainKey = 1、_kCFStreamErrorCodeKey = 50、NSLocalizedDescription =インターネット接続がオフラインになっています。}

私はネットワークに接続していないので、この の状態を検出して、ネットワーク接続を確認してから、もう一度お試しください。

私の質問は、ネットワーク接続をチェックし、おそらくエラーを取得するためにどのFirebaseメソッドを使用すべきかということです。 (私は はリスナーのコールバックで返される可能性のあるエラー・コードを見つけることができません。)

マイコード:

...

fileprivateするvar authListener:FIRAuthStateDidChangeListenerHandle!

FUIAuth.defaultAuthUI()?。プロバイダー= [FUIGoogleAuth()]

authListener = FIRAuth.auth()?。addStateDidChangeListener {[弱い自己](AUTH:FIRAuth、ユーザー:FIRUser)

 guard let strongSelf = self else { return } 

     if let activeUser = user { 

      strongSelf.hasUserBeenAuthenticated = true 
      strongSelf.user = activeUser 

     } else { 

      strongSelf.hasUserBeenAuthenticated = false 
      strongSelf.user = nil 
     } 

     print("\nFirebaseMgr[setupAuthorization]: hasUserBeenAuthenticated = \(strongSelf.hasUserBeenAuthenticated), user = \(String(describing: strongSelf.user))") 
    } 

答えて

0

FirebaseのFIRDatabase.database()。reference(withPath: ".info/connected")メソッドを使用して、ユーザーのインターネット接続の状態を確認できます。この方法は、ネットワーク接続の変更を観察します。次に例を示します。

//this is a strong reference to the internet connection handle 
    var internetConnectionHandle: UInt! 


    //I have created the observer for internet connectivity in viewWillAppear 
    override func viewWillAppear(_ animated:Bool) { 
     let connectedRef = FIRDatabase.database().reference(withPath: ".info/connected") 

    internetConnectionHandle = connectedRef.observe(.value, with: { snapshot in 

     if let _ = snapshot.value as? Bool { 

      //use is connected to the internet. 


     } 
     else { 

      //user is not connected to the internet. Ask the user to check his/her network connection and try again 
     } 
    }) 
+0

ありがとうございます。あなたが説明したネットワーク接続チェックを行うことができました。 –

関連する問題