2016-11-03 5 views
0

Я пытаюсь выйти из API Firebase, но я не могу понять, как обрабатывать любые ошибки, которые могут возникнуть.Выйти из Firebase в Swift

Капсула Firebase обеспечивает способ подписания из:

FIRAuth.auth()?.signOut() 

Он отмечен throws, поэтому я завернул его в блоке do/try/catch в методе, чтобы проверить процесс подписания из:

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

Я вижу, что метод signOut отмечен throws в стручках Firebase, но я не вижу, как он может обрабатывать любые ошибки асинхронных LY. Я попытался войти в режим самолета, который запускает сетевую ошибку в моем коде везде, где выполняется сетевой запрос, но с помощью метода signOut эта ошибка не поймана, потому что у меня нет обработчика завершения для выполнения. Все другие методы проверки подлинности из модулей Firebase имеют обработчик завершения, в котором я могу обрабатывать ошибки.

Вот документация signOut метода из Firebase стручка:

/** @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

Edited от ответа милли, чтобы добавить отправки пользователя на начальной странице приложения.

// 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) 
    } 


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