檢查登入狀態

打開 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()
        }
    }

results matching ""

    No results matching ""