前提条件
・xcode11.4
・swift5
Firebaseとは
Firebaseとは、Googleが提供している、すばやく高品質のモバイルアプリやWebアプリケーションを開発することができるプラットフォームです。
Firebaseを使うことで、開発者はアプリケーションの開発に専念でき、バックエンドで動くサービスを作成する必要も管理する必要もありません。
ここでいうバックエンドとは、サービスの内、見えないところでデータの処理や保存などを行う要素のことです。
Firebaseではたくさん役に立つ機能がありますが、今回はログインや新規登録の時に使う認証機能Firebase Authenticationとデータを保管するCloud Firestoreを使っていきます。
ちなみにデータベースにはCloud FirestoreとRealtime Databaseがありますが、Cloud FirestoreはRealtime Databaseをアップグレードさせたものです。
新規会員登録
Firebaseを導入したら進めてください。
導入の仕方は以下の記事が参考になると思います!
https://qiita.com/eKushida/items/54b62d3961a5c74a71af
ちなみにpodfileは 'Firebase/Auth'と'Firebase/Firestore'を入れました。
emailとパスワードをセット
emailとパスワードのtextFieldのtextを現在ログインしているユーザーの妥当するところにいれる。
Auth.auth().createUserが現在ログインしているユーザーのことです。
@IBAction func registerPressed(_ sender: UIButton) {
if let email = emailTextField.text, let password = passwordTextField.text {
Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
if error != nil {
print(error)
//あとでコード書く
} else {
print("会員登録成功")
Cloud FirestoreのAuthenticationを見てみると、emailとパスワードがセットされました。

ログイン
ログインするときは Auth.auth().signInです。
ログインに成功したときはログイン画面にいくようになっています。
@IBAction func loginPassword() {
if let email = emailTextField.text,let password = passwoedTexxtField.text {
Auth.auth().signIn(withEmail: email, password: password) { authResult, error in
if error != nil {
} else {
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let rootViewController = storyboard.instantiateViewController(withIdentifier: "RootTabBarController")
UIApplication.shared.keyWindow?.rootViewController = rootViewController
let ud = UserDefaults.standard
ud.set(true, forKey: "isLogin")
ud.synchronize()
}
}
}
ログアウト
@IBAction func logout() {
let firebaseAuth = Auth.auth()
do {
try firebaseAuth.signOut()
let storyboard = UIStoryboard(name: "SignIn", bundle: Bundle.main)
let rootViewController = storyboard.instantiateViewController(withIdentifier: "RootNavigationController")
UIApplication.shared.keyWindow?.rootViewController = rootViewController
// ログイン状態の保持
let ud = UserDefaults.standard
ud.set(false, forKey: "isLogin")
ud.synchronize()
} catch let signOutError as NSError {
print ("Error signing out: %@", signOutError)
}
}
