[iOS]「Firebase」

iOSアプリ開発において、強力なツールであるFirebaseを活用することは重要です。

この記事では、Firebaseの導入方法、、Firebase Authenticationによるユーザー認証の追加方法とCloud Firestoreを使用したデータベースの構築手法を紹介します。

目次

Firebaseの導入方法

Firebaseは初心者でも簡単に導入できる便利なツールです。以下では、Firebaseを導入する手順をステップバイステップで解説します。初めての方でもわかりやすく進めていきましょう。

STEP
Firebaseの公式ウェブサイトへアクセス

Firebaseの公式ウェブサイトにアクセスしましょう。

STEP
アカウントの作成

Firebaseのサービスを利用するためには、Googleアカウントが必要です。既にGoogleアカウントを持っている場合は、ログインしましょう。新規でアカウントを作成する場合は、「アカウントを作成」ボタンをクリックして手続きを進めてください。

STEP
Firebaseコンソールへのログイン

アカウントが作成されたら、Firebaseコンソールにログインします。Firebaseコンソールは、Firebaseのプロジェクトや設定を管理するための画面です。

STEP
新しいプロジェクトの作成

Firebaseコンソールにログインしたら、新しいプロジェクトを作成しましょう。「プロジェクトを追加」ボタンをクリックし、プロジェクトの名前を入力します。任意の名前を選ぶことができます。

プロジェクトを追加
プロジェクトの名前を入力
STEP
iOSアプリの設定

プロジェクトが作成されたら、次はiOSアプリの設定を行います。Firebaseコンソール上で、「iOSアプリを追加」ボタンをクリックします。そこでアプリのバンドルID(Bundle Identifier)を入力し、アプリのニックネームを設定します。

iOSアプリを追加

「AppleバンドルID」に入力する内容は、Xcodeに登録した「Bundle Identifier」に合わせること

STEP
設定ファイルのダウンロードと追加

設定が完了したら、Firebaseコンソール上で設定ファイル(GoogleService-Info.plist)をダウンロードします。ダウンロードが完了したら、Xcodeプロジェクトを開き、プロジェクトのファイルリストにダウンロードしたファイルをドラッグ&ドロップします。

以下の画面が出てきますが、内容に問題がないため「Finish」ボタンを押します。

STEP
Firebase SDKの追加

設定ファイルを追加したら、次はFirebase SDKをプロジェクトに追加します。

「Cocoa Pods」を使用します。
「Podファイル」に導入したいサービスを追記していきます。
ターミナルで「pod install」を実行します。

https://firebase.google.com/docs/ios/setup?hl=ja
STEP
Firebaseの初期化

以下の赤枠の2行のコードをコピーし、Xcode/AppDelegatesの赤枠の場所にコピーします。

ビルド(command + B)実行すると、以下のエラーが出ました。
File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a
Linker command failed with exit code 1 (use -v to see invocation)

解決方法→Podファイルに以下を追加しました
post_install do |installer|
 installer.pods_project.targets.each do |target|
  target.build_configurations.each do |config|
   config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
  end
 end
end

ターミナルで「pod install」を実行し、ビルド(command + B)するとエラーは消えました。

STEP
Firebaseの機能を利用する

Firebaseの導入が完了しました!これでさまざまなFirebaseの機能を使う準備が整いました。例えば、Firebase Realtime DatabaseFirebase Authenticationなどを活用することができます。

以上がFirebaseの導入手順の基本的な流れです。初めてFirebaseを利用する方でも、ステップバイステップで進めることで、簡単にFirebaseを導入することができます。ぜひ手順に従って進めてみてください。

Firebase Authenticationの使い方

Firebase Authenticationは、セキュアなユーザー認証を簡単に実装できる機能です。ユーザー登録やログイン、パスワードリセットなど、一般的な認証機能を提供しています。

1. Firebase Authenticationの基本設定

Firebase Authenticationの導入事例については、次の記事のこちらのページで詳しく解説しています。

2. ユーザーの作成と管理

Firebase Authenticationでは、ユーザーの作成と管理が容易に行えます。
例えば、メールとパスワードでユーザーを作成する場合は以下のようなコードを使います。

ユーザーの作成と管理
Auth.auth().createUser(withEmail: email, 
    password: password) { (authResult, error) in

    if let error = error {
        // ユーザー作成に失敗した場合の処理
        print("ユーザー作成エラー: \(error.localizedDescription)")
    } else {
        // ユーザー作成に成功した場合の処理
        print("ユーザー作成成功")

        if let user = authResult?.user {
            // 新規ユーザーの情報を利用して追加の処理を行う
        }
    }
}
  • createUserメソッドを使ってメールとパスワードでユーザーを作成しています。
  • ユーザー作成の成功や失敗に応じて、適切な処理を行うことができます。

3. 認証プロバイダーの利用

Firebase Authenticationでは、メール/パスワード以外にも多くの認証プロバイダーを利用することができます。
例えば、GoogleやAppleのアカウントでのログインを実装する場合は以下のようなコードを使います。

ユーザーの作成と管理
let provider = GoogleAuthProvider()

Auth.auth().signIn(with: provider) { (authResult, error) in

    if let error = error {
        // ログインに失敗した場合の処理
        print("ログインエラー: \(error.localizedDescription)")
    } else {
        // ログインに成功した場合の処理
        print("ログイン成功")

        if let user = authResult?.user {
            // ログインユーザーの情報を利用して追加の処理を行う
        }
    }
}
  1. GoogleAuthProviderを使ってGoogleアカウントでのログインを実装しています。
  2. 認証プロバイダーには他にもFacebookやTwitterなども利用することができます。

4. パスワードリセットの処理

ユーザーがパスワードを忘れた場合のために、パスワードリセット機能を実装することも重要です。
Firebase Authenticationでは、以下のようなコードでパスワードリセットの処理を行うことができます。

パスワードリセットの処理
Auth.auth().sendPasswordReset(withEmail: email) { (error) in
    if let error = error {
        // パスワードリセットに失敗した場合の処理
        print("パスワードリセットエラー: \(error.localizedDescription)")
    } else {
        // パスワードリセットに成功した場合の処理
        print("パスワードリセット成功")
    }
}
  1. sendPasswordResetメソッドを使ってメールアドレスに対してパスワードリセットのメールを送信しています。
  2. ユーザーはそのメールを受け取り、パスワードのリセット手順を進めることができます。

Firebase Cloud Firestoreの使い方

Firebase Cloud Firestoreは、モバイルアプリのデータベースとして非常にパワフルなツールです。
以下では、Firebase Cloud Firestoreを使ったデータベース設計を具体的なコード例を交えて説明します。

1. Firebase Cloud Firestoreの基本設定

Firebase Authenticationの導入事例については、次の記事のこちらのページで詳しく解説しています。

2. データの構造化

Firebase Cloud Firestoreでは、データをコレクションドキュメントの階層構造で管理します。
データを効果的に構造化するためには、適切なコレクションとドキュメントの設計が重要です。
以下は、Swift言語を使用した例です。

データの構造化
// コレクション "users" 内のドキュメント "user1" にデータを書き込む例
let db = Firestore.firestore()
let userRef = db.collection("users").document("user1")

userRef.setData([
    "name": "John",
    "age": 25,
    "email": "john@example.com"
])
  1. この例では、”users” コレクション内の “user1” ドキュメントに、名前、年齢、メールアドレスのデータを書き込んでいます。
  2. 適切な階層構造を持つデータ設計を行うことで、データの管理や取得が容易になります。

3. データの読み書き

Firebase Cloud Firestoreでは、データの読み書きにはドキュメントの参照と操作が必要です。
以下は、Swift言語を使用した例です。

データの読み書き
// ドキュメントの参照とデータの取得
let db = Firestore.firestore()
let userRef = db.collection("users").document("user1")

userRef.getDocument { (document, error) in
    if let document = document, document.exists {
        let data = document.data()
        // データの取得と処理
    } else {
        print("ドキュメントが存在しません")
    }
}

// データの更新
userRef.updateData([
    "age": 26
])

// データの削除
userRef.delete()
  • この例では、”users” コレクション内の “user1” ドキュメントを参照し、データの取得、更新、削除を行っています。
  • データベースとのやり取りは非同期で行われるため、クロージャを使用してコールバック処理を行うことが重要です。
クロージャを使用してコールバック処理

クロージャを使用してコールバック処理」は、非同期のデータベース操作を行う際に重要な概念です。非同期とは、処理の完了を待たずに次の処理を進めることを意味します。つまり、データベースからの応答を待つ間に他の処理を行うことができます。

Firebase Cloud Firestoreの操作は非同期で行われるため、データベースからの結果を受け取るためには、コードのフローを制御する必要があります。ここで、クロージャと呼ばれる機能が登場します。

クロージャは、コードブロックを変数として扱うための仕組みです。具体的には、非同期のデータベース操作が完了した後に実行される処理を指定するために使用されます。この処理は、通常、クロージャの引数として渡され、データベースからの応答を受け取った後に実行されます。

4. クエリの実行

Firebase Cloud Firestoreでは、クエリを使用してデータベース内のデータを効率的に検索できます。
以下は、Swift言語を使用した例です。

クエリの実行
// "users" コレクション内の特定の条件を満たすドキュメントをクエリで検索
let db = Firestore.firestore()
let query = db.collection("users").whereField("age", isGreaterThan: 20)

query.getDocuments { (querySnapshot, error) in
    if let error = error {
        print("クエリの実行エラー: \(error)")
    } else {
        for document in querySnapshot!.documents {
            let data = document.data()
            // 検索結果の処理
        }
    }
}
  1. この例では、”users” コレクション内の “age” フィールドが20より大きいドキュメントをクエリで検索しています。
  2. クエリの結果は、querySnapshot オブジェクトとして取得できます。

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次