2016-11-03 10 views
0

Firebase APIからサインアウトしようとしていますが、発生する可能性のあるエラーをどのように処理するかわかりません。SwiftのFirebaseからのサインアウト

はFirebaseポッドは、サインアウトするための方法を提供する:

FIRAuth.auth()?.signOut() 

これはthrowsが付いているので、私は署名アウトプロセスをテストするための方法でdo/try/catchブロックでそれをラップしています:

do { 
    try FIRAuth.auth()?.signOut() 
} catch (let error) { 
    print((error as NSError).code) 
} 

私はsignOut方法がFirebaseポッドでthrowsでマークされていることがわかり、私はそれが非同期のいずれかのエラーを処理する方法を見ていませんまあ。私は、飛行機モードに入ることを試みました。これは、ネットワークリクエストが発生するコードでネットワークエラーを発生させますが、signOutメソッドでは、実行する完了ハンドラがないので、そのエラーは検出されません。 Firebaseポッドの他のすべての認証方法には、エラーを処理できる完了ハンドラがあります。ここで

はFirebaseポッドからsignOutメソッドのドキュメントです:私は完了ハンドラを持っていないとき

/** @fn signOut: 
    @brief Signs out the current user. 
    @param error Optionally; if an error occurs, upon return contains an NSError object that 
     describes the problem; is nil otherwise. 
    @return @YES when the sign out request was successful. @NO otherwise. 
    @remarks Possible error codes: 
     - @c FIRAuthErrorCodeKeychainError Indicates an error occurred when accessing the keychain. 
      The @c NSLocalizedFailureReasonErrorKey field in the @c NSError.userInfo dictionary 
      will contain more information about the error encountered. 
*/ 
open func signOut() throws 

あなたは、ユーザーのうち、署名を処理するための適切な方法のための任意の提案はありますか私はエラーをチェックすることができますか?

答えて

1

あなたはエラーが発生する可能性は極めて低いですが、それが何かを想定するのは良いことはない。この

do 
{ 
    try Auth.auth().signOut() 
} 
catch let error as NSError 
{ 
    print(error.localizedDescription) 
} 
0

のようなエラーをキャッチすることができます。ドキュメンテーションの音で、キーチェーンを拭き取ります。これは、firebaseアプリケーションに再度ログインできる唯一の方法です。私自身のfirebaseアプリケーションからログアウトしようとすると、私は0エラーが発生したのは驚きでした。ここに元のコードです。

@IBAction func logOutTapped(_ sender: Any) { 

    let firebaseAuth = FIRAuth.auth() 
    do { 
     try firebaseAuth?.signOut() 
    } catch let signOutError as NSError { 
     print ("Error signing out: %@", signOutError) 
    } 

    if Utility.hasFacebook { 
     let login = FBSDKLoginManager() 
     login.logOut() 
    } 

    if Utility.hasTwitter { 
     Twitter.sharedInstance().sessionStore.logOutUserID((Twitter.sharedInstance().sessionStore.session()?.userID)!) 
    } 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 

    let initialViewController = storyboard.instantiateViewController(withIdentifier: "LoginVC") 

    self.present(initialViewController, animated: false) 
} 

とにかくあなたが本当にしたいならば、ここで終了ハンドラは、何かが、私はすぐにアプリの最初のページに戻って、ユーザを送る追加するミリの答えから編集

func logOut(completion:@escaping(_ errorOccured: Bool) -> Void) { 
    let firebaseAuth = FIRAuth.auth() 
    do { 
     try firebaseAuth?.signOut() 

    } catch let signOutError as NSError { 
     completion(true) 
    } 

    completion(false) 


} 
0

まで投げます。

// log out 

func logout(){ 
    do 
    { 
     try Auth.auth().signOut() 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let IntroVC = storyboard.instantiateViewController(withIdentifier: "IntroVC") as! introVC 
     let appDelegate = UIApplication.shared.delegate as! AppDelegate 
     appDelegate.window?.rootViewController = IntroVC 
    } 
    catch let error as NSError 
    { 
     print(error.localizedDescription) 
    } 


} 
関連する問題