2016-06-06 3 views
7

Я хочу автоматически войти в систему, если он уже подписан и просто направляется к основному виду, но код работает дважды, и вы можете видеть транзистор вместо отображаемого вида. Как это исправить?Swift: Авто-Вход пользователя с Firebase

AppDelegate.swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // Override point for customization after application launch.slideMenuController 
    FIRApp.configure() 
    FIRAuth.auth()?.addAuthStateDidChangeListener { 
     auth, user in 
     if user != nil { 
      // User is signed in. 
      print("Automatic Sign In: \(user?.email)") 

      let storyboard = UIStoryboard(name: "Main", bundle: nil) 
      let initialViewController = storyboard.instantiateViewControllerWithIdentifier("EmployeeRevealViewController") 
      self.window!.rootViewController = initialViewController 

     } else { 
      // No user is signed in. 
     } 
    } 

    return true 
} 

Вход

2016-06-06 01:00:55.585 Untitled[13009:6258910] Configuring the default app. 
2016-06-06 01:00:55.657 Untitled[13009:] <FIRAnalytics/INFO> Firebase Analytics v.3200000 started 
2016-06-06 01:00:55.666 Untitled[13009:] <FIRAnalytics/INFO> To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled 
2016-06-06 01:00:55.714 Untitled[13009:6258910] Firebase Crash Reporting: Successfully enabled 
2016-06-06 01:00:55.739: <FIRInstanceID/WARNING> FIRInstanceID AppDelegate proxy enabled, will swizzle app delegate remote notification handlers. To disable add "FirebaseAppDelegateProxyEnabled" to your Info.plist and set it to NO 
2016-06-06 01:00:55.739: <FIRInstanceID/WARNING> Failed to fetch APNS token Error Domain=com.firebase.iid Code=1001 "(null)" 
2016-06-06 01:00:55.760: <FIRMessaging/INFO> FIRMessaging library version 1.1.0 
2016-06-06 01:00:55.781: <FIRMessaging/WARNING> FIRMessaging AppDelegate proxy enabled, will swizzle app delegate remote notification receiver handlers. Add "FirebaseAppDelegateProxyEnabled" to your Info.plist and set it to NO 
2016-06-06 01:00:55.788 Untitled[13009:] <FIRAnalytics/INFO> Successfully created Firebase Analytics App Delegate Proxy automatically. To disable the proxy, set the flag FirebaseAppDelegateProxyEnabled to NO in the Info.plist 
Automatic Sign In: Optional("[email protected]") 
2016-06-06 01:00:56.759: <FIRInstanceID/WARNING> APNS Environment in profile: development 
Automatic Sign In: Optional("[email protected]") 
2016-06-06 01:00:57.811 Untitled[13009:] <FIRAnalytics/INFO> Firebase Analytics enabled 
+0

Вы зарегистрировали данные авторизации? – Shubhank

+0

следуйте этому документу из firebase: https://firebase.google.com/docs/auth/ios/google-signin#2_implement_google_sign-in –

+0

Я следил за этим документом. Он работает, но код работает только дважды, как вы можете видеть в конце журнала. А затем переход от главного экрана к главному экрану –

ответ

6

Try:

if let alreadySignedIn = FIRAuth.auth()?.currentUser { 
    // segue to main view controller 
} else { 
    // sign in 
} 
+2

И не забывайте не вводить код в 'viewDidLoad()', а скорее в 'viewDidAppear'. Я совершил эту ошибку и не понял, почему сека не прошла, хотя она и была вызвана. – oey

+0

Что происходит, когда пользователь закрывает и снова открывает приложение? –

2

Что касается обновленной документации, это Recommened способ сделать это на основе документации Firebase и это сработало для меня:

if Auth.auth().currentUser != nil { 
    // User is signed in. 
    // ... 
} else { 
    // No user is signed in. 
    // ... 
} 

Firebase изменился, но их именование, наиболее заметно:

FIRAuth получил переименован в AUTH

Кроме того, для достижения наилучших результатов, я кладу это внутри viewDidAppear(), как это:

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(true) 
    if Auth.auth().currentUser != nil { 
     performSegue(withIdentifier: "yourIdentifier", sender: self) 
    } 
} 
0

Без идентификатора для Firebase 4 и swift 4, он отлично работал для меня ...

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(true) 
    if Auth.auth().currentUser != nil { 
     let newViewController: YourViewController = YourViewController() 
     self.present(newViewController, animated: true, completion: nil) 
    } 
}