Firebase.com から iOS アプリをアップグレード

このドキュメントでは、既存の Firebase.com のアプリを新規の Firebase console および API にアップグレードする方法について説明します。

アップグレードには次の 4 つの手順が必要になります。

  1. プロジェクトを新規の Firebase console にアップグレードする
  2. 新規の Firebase SDK をインストールする
  3. データベースのコードを更新する
  4. 認証コードを更新する

プロジェクトは、新規の firebase.google.com コンソールにいつでもアップグレードすることができます。アプリケーションの動作は継続します。アプリケーションで Firebase の新機能の一部を使用できるようになったら、コードを更新することができます。

新規の Firebase console にプロジェクトをインポート

  • Firebase console に進み、「現在 Firebase.com に存在するプロジェクト」で対象のプロジェクトを見つけます。
  • アップグレードしたいプロジェクトの [インポート] ボタンをクリックします。
    • プロジェクトが firebase.com の有料プランに属する場合は、新規コンソールでプロジェクトのお支払い先を指定する必要があります。お支払い情報が自動的に移行することはありません。
    • 請求先アカウントを選択または作成します。インポートの完了後、プロジェクトのすべての請求はこのアカウントで行われます。
  • Realtime Database と Hosting のコンテンツは、Firebase console に即座に自動インポートされます。
  • ユーザーデータは新たな認証バックエンドに自動的に移行します。データの移行はバックグラウンドで実行されるため、ユーザーはアプリの使用を続行できます。ユーザーの登録やログインも影響を受けません。ユーザー アカウントの移行中は、Firebase console の Auth タブにスピナーが表示されます。
  • Firebase.com アプリにアクティブなプロモーション コードがある場合は、お問い合わせください

新規の Firebase SDK をインストール

アプリケーションのコードを即座に更新する必要はありません。既存のデータベースと認証コードは、移行を終えたプロジェクトでも動作を続けます。ただし、アプリケーションで Firebase の新機能の一部を使用する準備ができたら、新規の Firebase SDK をインストールできます。

新規 SDK の使用を開始すると、Firebase Analytics が自動的に有効になります。デフォルトでは、Firebase Analytics のデータにより Firebase の他の機能や Google サービスが向上します。Firebase Analytics のデータを共有する方法は、設定でいつでも変更できます。 詳細

アプリを設定

Firebase console からダウンロード可能な GoogleService-Info.plist ファイルを使用して、アプリを設定できます。ダウンロードした GoogleService-Info.plist を XCode プロジェクトにドラッグすると、設定をプロジェクトに簡単に追加できます(自分のプロジェクトのディレクトリに追加されるように、必ず [Copy items if needed] を選択してください)。

GoogleService-Info.plist ファイルは FIRApp クラスで処理されます。AppDelegate クラスの application:didFinishLaunchingWithOptions: メソッドで、以下の呼び出しを追加します。

Objective-C

[FIRApp configure];

Swift

FIRApp.configure()

データベースのコードを更新

CocoaPods の依存関係を更新

最も簡単な開始方法は、CocoaPods の依存関係を変更することです。verison 3.x では、Firebase ポッドは各 API 向けに別々のサブスペックを持っています。

変更前
pod 'Firebase', '>= 2.5.1'
変更後
pod 'Firebase/Core'
pod 'Firebase/Database'

pod update を実行して新たなポッドを取得します。API 名が変更されたことで、アプリでは数多くのコンパイル エラーや警告が発生しているはずです。ここからは、こういった問題を解決する方法について説明します。

最初に、Objective-C を使用している場合は #import 行を置換します(Swift を使用している場合は変更不要です)。

変更前
#import <Firebase/Firebase.h>
変更後
@import Firebase

データベース参照を作成

3.x SDK では、Firebase 参照を FIRDatabaseReference に置き換え、FIRDatabase クラスを使用してデータベースへの初期参照を取得します。 FIRApp の設定後、データベース参照をコードで以下のように取得できます。

変更前

Objective-C

Firebase *rootRef = [[Firebase alloc] initWithUrl:@"https://<YOUR-FIREBASE-APP>.firebaseio.com"];

Swift

var rootRef = Firebase(url:"https://<YOUR-FIREBASE-APP>.firebaseio.com")
変更後

Objective-C

FIRDatabaseReference *rootRef= [[FIRDatabase database] reference];

Swift

var rootRef = FIRDatabase.database().reference()

Database URL は、GoogleService-Info.plist ファイルに基づいて自動的に決定されるため、手動で指定する必要はありません。

ディスクの永続性を有効にする

アプリでディスクの永続性を使用している場合は、FIRDatabase オブジェクトでこれを有効にできます。

変更前

Objective-C

[Firebase defaultConfig].persistenceEnabled = YES;

Swift

Firebase.defaultConfig().persistenceEnabled = true
変更後

Objective-C

[FIRDatabase database].persistenceEnabled = YES;

Swift

FIRDatabase.database().persistenceEnabled = true

2.x SDK の場合と同様、ディスクの永続性の有効化は、データベースへのその他の呼び出しが行われる前に完了している必要があります。

クラス / メソッドの参照を更新

データベースのいくつかのタイプは、他の API との整合性を保つために 3.x SDK で名前変更が行われました。実施する必要がある主な変更を表に示します。

変更前 変更後
Firebase FIRDatabaseReference
FDataSnapshot FIRDataSnapshot
FirebaseHandle FIRDatabaseHandle
FEventType FIRDataEventType
FQuery FIRDatabaseQuery
FMutableData FIRMutableData
FTransactionResult FIRTransactionResult
FConfig FIRDatabase
FirebaseApp FIRDatabase
kFirebaseServerValueTimestamp [FIRServerValue timestamp]

対象のクラスやメソッドが見つからない場合は、データベース参照ドキュメントを参照してください。

認証コードを更新

Firebase Authentication 機能は現在、独自の FIRAuth クラスの背後で動作しているため、認証は現在 Firebase 参照ではなく FIRAuth インスタンスで動作しています。

CocoaPods の依存関係を更新

Authentication 機能は独自のモジュールで動作しているため、最初に依存関係を Podfile に追加する必要があります。

pod 'Firebase/Auth'

依存関係を追加したら、pod update を再度実行する必要があります。

ユーザーをログイン

認証メソッドは以前と同様に動作しますが、現在は FIRAuth オブジェクトでのメソッドとして新たな名前が付けられています。FAuthData は現在 FIRUser に置き換えられています。以下に例を示します。

変更前

Objective-C

[ref authAnonymouslyWithCompletionBlock:^(NSError *error, FAuthData *authData) {
    if (error) {
        NSLog(@"Sign in failed: %@", error.localizedDescription);
    } else {
        NSLog(@"Signed in with uid: %@", authData.uid);
    }
}];

Swift

ref.authAnonymouslyWithCompletionBlock { error, authData in
    if let error = error {
        print("Sign in failed:", error.localizedDescription)
    } else {
        print("Signed in with uid:", authData.uid)
    }
}
変更後

Objective-C

[[FIRAuth auth] signInAnonymouslyWithCompletion:^(FIRUser *_Nullable user,
                                                  NSError *_Nullable error) {
    if (error) {
        NSLog(@"Sign in failed: %@", error.localizedDescription);
    } else {
        NSLog(@"Signed in with uid: %@", user.uid);
    }
}];

Swift

FIRAuth.auth()!.signInAnonymouslyWithCompletion() { (user, error) in
    if let error = error {
        print("Sign in failed:", error.localizedDescription)
    } else {
        print ("Signed in with uid:", user!.uid)
    }
}

他の認証プロバイダに関するドキュメントについては、FIRAuth クラスまたは Firebase Authentication ガイドを参照してください。

ユーザーをログアウト

変更前

Objective-C

[ref unauth];

Swift

ref.unauth()
変更後

Objective-C

[[FIRAuth auth] signOut:nil];

Swift

try! FIRAuth.auth()!.signOut()

認証状態をモニタリング

変更前

Objective-C

[ref observeAuthEventWithBlock:^(FAuthData *authData) {
    if (authData) {
        NSLog(@"User is signed in with uid: %@", authData.uid);
    } else {
        NSLog(@"No user is signed in.");
    }
}];

Swift

ref.observeAuthEventWithBlock({ authData in
    if authData != nil {
        print("User is signed in with uid:", authData.uid)
    } else {
        print("No user is signed in.")
    }
})
変更後

Objective-C

[[FIRAuth auth] addAuthStateDidChangeListener:^(FIRAuth * _Nonnull auth, FIRUser * _Nullable user) {
    if (user) {
        NSLog(@"User is signed in with uid: %@", user.uid);
    } else {
        NSLog(@"No user is signed in.");
    }
  }];

Swift

FIRAuth.auth()!.addAuthStateDidChangeListener() { (auth, user) in
    if let user = user {
        print("User is signed in with uid:", user.uid)
    } else {
        print("No user is signed in.")
    }
}

FIRAuth には、アカウントのリンク機能、認証プロバイダの追加機能などの多くの新機能が備わっています。詳細については、Authentication ガイドおよび Authentication 参照ドキュメントを参照してください。

既存のログインを移行

ユーザーが以前の SDK でアプリにログインしている場合、新しい SDK でログインし続けるためにはコードの修正が必要になります。それ以外の場合は、再度サインインする必要があります。これを行うためのオープンソースのサンプルコードは Firebase Auth Migration Helpers GitHub リポジトリで提供されています。

新しいパスワードのリセット テンプレートを更新

アプリで、メールとパスワードの認証によるユーザー ログインを許可する場合、パスワードのリセット オプションをユーザーに付与するものと思います。

新規の SDK へのアップグレードが完了すると、パスワード リセットのメールでは、Firebase console で指定された新たなテンプレートが使用されます。アプリでのニーズに応じてこれを更新してください。

Firebase のライブラリを更新

以下のいずれかのライブラリを使用している場合は、最新バージョンへのアップグレードが必須になります。

ライブラリ サポートされているバージョン リソース
GeoFire 1.2.x Github

フィードバックを送信...