備忘録
#はじめに
タイトルにも書いてあるようにFirebaseAuthのログイン状態によって起動画面を切り替える方法を
備忘録として書いていきます。
FirebaseAuthの説明や導入方法などは沢山、参考記事がありますので省きます。
そして、ログイン機能も実装している前提で書いていきます。
#実装する前に
Xcodeで最初にプロジェクトを立ち上げるとStoryboard起点
でアプリの画面が表示されます。
このデフォルトのままだと起動画面の切り替えはできないので
まずはコードベースでアプリの画面を表示させないといけません
。
コードベースでアプリの画面を表示する方法は
私が記事にしていますので良かったら参考にしてみて下さい↓
画面遷移に関係あるコードの記述を別ファイルに分けて実装する
#実装コード
まずは、ユーザー認証を行うメソッド
を準備します。
ViewControllerからFirebase関連のコードを分離させる為にAccountManager.swift
を新しく作ります。
それと同時に、ここにメソッドを書いていきます。
import Firebase
final class AccountManager {
static let shared = AccountManager()
private init() {}
// ユーザー認証を行うメソッド
func authenticationStatusCheck(complition: ((Bool) -> Void)? = nil) {
Auth.auth().addStateDidChangeListener { (_, user) in
// ユーザー情報があるかどうかをBool値で判断する
if user == nil {
// 新規ユーザーの場合
complition?(false)
}else {
// ログイン済みユーザーの場合
complition?(true)
}
}
}
}
次はBool値に応じてViewControllerを返すメソッド
を準備します。
UIViewControllerのextentionファイルを作って、そこで場合分けをしていきましょう。
extension UIViewController {
// Bool値に応じてViewControllerを返すメソッド
static func getRoot(isLogined: Bool) -> UIViewController {
// ログイン済みユーザーの場合
if isLogined {
let mainVC = MainViewController()
return mainVC
// 新規ユーザーの場合
}else {
let registerVC = RegisterViewController()
return registerVC
}
}
}
次はアプリの初期画面を表示するメソッド
を準備します。
そして、ここで先ほど準備したメソッドを呼び出していきます。
import UIKit
final class Router {
// アプリの初期画面を表示するメソッド
static func showRoot(window: UIWindow) {
// ユーザーのログイン状態を取得する
AccountManager.shared.authenticationStatusCheck { (bool) in
// ログイン状態に応じたViewControllerを取得する
let rootVC = UIViewController.getRoot(isLogined: bool)
// アプリの初期画面に反映させる
window.rootViewController = rootVC
window.makeKeyAndVisible()
}
}
}
このままでは、まだアプリ起動時の画面には反映されていないので
AppDelegate.swift
内で実装していきます。
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let window = UIWindow(frame: UIScreen.main.bounds)
self.window = window
// ここでアプリの初期画面を端末に反映させる
Router.showRoot(window: window)
return true
}
これでログイン状態によって起動画面を切り替えることが出来ました。
#おわりに
かなり雑に書いてしまいましたが、これでログイン状態によって起動画面が切り替えれます。
因みに、このように正しく起動時に画面を出し分けることを起動経路
と言います。
もし、何かあれば遠慮なくコメントして下さると有り難いです。