檢查登入狀態
打開 ViewController.swift
在import UIKit之後加入
import FirebaseAuth
import SVProgressHUD
新增一個 override func
override func viewDidAppear(_ animated: Bool) {
guard let user = FIRAuth.auth()?.currentUser else {
// TODO: a.尚未登入,前往登入、註冊介面
return
}
// 驗證token是否還有效
user.getTokenWithCompletion {[unowned self] (_, error) in
if let error = error {
// TODO: b.顯示錯誤訊息,並前往登入、註冊介面
return
}
// TODO: c.token 驗證成功前往聊天室列表
}
}
上面程式不可寫在viewDidLoad,原因在於這段程式會需要處理畫面跳轉,然而如果在viewDidApear之前會造成部分UI功能異常
新增檔案 > Cocoa Touch Class AuthViewController 登入/註冊的ViewController
新增檔案 > Cocoa Touch Class RoomListViewController 聊天室列表的ViewController
建立跳轉至兩個畫面的func
func showAuthViewController() {
navigationController?.setViewControllers([AuthViewController()], animated: false)
}
func showRoomListViewController() {
navigationController?.setViewControllers([RoomListViewController()], animated: false)
}
這邊使用 setViewControllers 來替換navigationController的rootController
實作 TODO 的部分
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
guard let user = FIRAuth.auth()?.currentUser else {
// 尚未登入,前往登入、註冊介面
self.showAuthViewController()
return
}
// 驗證token是否還有效
user.getTokenWithCompletion {[unowned self] (_, error) in
if let error = error {
// 顯示錯誤訊息,並前往登入、註冊介面
SVProgressHUD.showError(withStatus: error.localizedDescription)
SVProgressHUD.dismiss(withDelay: 3, completion: {
self.showAuthViewController()
})
return
}
// token 驗證成功前往聊天室列表
self.showRoomListViewController()
}
}