LoginSignup
3
7

More than 3 years have passed since last update.

【Swift】Firebaseの基本的な使い方まとめ

Last updated at Posted at 2021-04-26

はじめに 

Firebaseを使っていく中で学びになったことをまとめてみようと思います!
Firebaseのセットアップなどは省きます。エラーハンドリングも今回は最低限にしています。

Authentication

メールアドレス認証を有効にする
スクリーンショット 2021-04-26 22.07.50.png

ユーザー情報の作成

guard let email = emailTextField.text,
      let password = passwordTextField.text else { return }
Auth.auth().createUser(withEmail: email, password: password) { result, error in
    if let error = error {
        print("情報の作成に失敗\(error)")
        return
    }
    print("情報の作成に成功")
}

このような感じでユーザー情報がAuthに保存される
スクリーンショット 2021-04-26 22.09.07.png

認証済みかの判定

if Auth.auth().currentUser?.uid == nil {
    print("認証済み")
}

Firestore

Model

import Foundation
import FirebaseFirestore

struct User {

    let email: String
    let username: String
    let createdAt: Timestamp

    init(dic: [String: Any]) {
        self.email = dic["email"] as? String ?? ""
        self.username = dic["username"] as? String ?? ""
        self.createdAt = dic["createdAt"] as? Timestamp ?? Timestamp()
    }

}

Firestoreに情報を保存する

先ほどのAuth.auth().createUser(withEmail: , password: )でresultが返ってくるので、そのresultからuserのuidを取得する。
Firestore.firestore().collection("users").document(uid).setData(docData)でFirestoreのusersという名前をつけた
collectionのuidという名前をつけたdocumentにsetDataで保存している。
スクリーンショット 2021-04-26 22.23.01.png

guard let uid = result?.user.uid else { return }
guard let username = self.usernameTextField.text else { return }
let docData = [
    "email": email,
    "username": username,
    "createdAt": Timestamp(),
] as [String: Any]
Firestore.firestore().collection("users").document(uid).setData(docData) { error in
    if let error = error {
        print("Firestoreへの保存に失敗しました\(error)")
        return
    }
    print("Firestoreへの保存に成功しました")
}

Firestoreから情報を取得する

getDocumentsでFirestoreに保存したユーザー情報を取得する。

Firestore.firestore().collection("users").getDocuments { snapshots, error in
    if let error = error {
        print("ユーザー情報の取得に失敗しました\(error)")
        return
    }
    snapshots?.documents.forEach { snapshot in
        let dic = snapshot.data()
        let user = User(dic: dic)
    }
}

Storage

Storageに画像を保存する

データが大きすぎるので、jpegData(compressionQuality:)でデータを小さくしています。
fileNameはNSUUID().uuidStringを使って適当な文字列にしました。
Storage.storage().reference().child("profile_image").child(fileName)でStorageのreferenceの子要素にprofile_imageフォルダを作り、その中にfileNameという名前をつけたimageを保存していきます。uploadImageをstorageRef.putData(uploadImage, metadata: nil)で実際に保存します。

guard let image = imageView.image else { return }
guard let uploadImage = image.jpegData(compressionQuality: 0.3) else { return }
let fileName = NSUUID().uuidString
let storageRef = Storage.storage().reference().child("profile_image").child(fileName)
storageRef.putData(uploadImage, metadata: nil) { data, error in
    if let error = error {
        print("Storageへの保存に失敗しました\(error)")
        return
    }
    print("Storageへの保存に成功しました")
}

URLを取得する

downloadURLでURLを取得できる。

storageRef.downloadURL { url, error in
    if let error = error {
        print("Storageからのダウンロードに失敗しました\(error)")
        return
    }
    print("Storageからのダウンロードに成功しました")
}

スクリーンショット 2021-04-26 22.55.24.png

スクリーンショット 2021-04-26 23.07.04.png

おわりに

随時更新予定

3
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
7