iOS アプリを Digits から Firebase に移行する

Digits を使用して電話番号でユーザーをログインさせている場合は、アプリを Firebase Authentication に移行する必要があります。今後の電話番号ログイン機能の開発はすべて Firebase で行われ、Digits は 2017 年 9 月 30 日に停止されます。

このページで説明する操作を行うと、現在の Digits ユーザーを中断することなく、Digits から Firebase にアプリを移行できます。

概要

アプリを Digits から Firebase Authentication に移行するには、次の手順を行います。

  1. Digits ユーザー アカウントを Firebase に移行する
  2. Digits SDK を Firebase SDK に置き換える
  3. アクティブな Digits セッションを Firebase に移行する

最初のステップは、アプリや既存のユーザーに影響を与えずにすぐに完了できます。残りの手順は同時に完了する必要があります。

Digits ユーザー アカウントを Firebase に移行する

まず、Fabric デベロッパーのドキュメントに従って、Digits ユーザー アカウントを Firebase に移行します。

アカウントの移行手順を完了すると、すべての Digits ユーザー アカウントを含む Firebase プロジェクトが作成されます。さらに、移行を有効にした後に作成された Digits アカウントは自動的に Firebase に移行されます。

Digits SDK を Firebase SDK に置き換える

次に、移行するアプリで、Digits SDK の呼び出しを Firebase SDK の呼び出しに置き換えます。

事前設定の Digits ログインボタン DGTAuthenticateButton を使用している場合は、次のいずれかを実行して Firebase に切り替えることができます。

  • FirebaseUI をインストールして、DGTAuthenticateButton の親ビューを FirebaseUI の authViewController に置き換えます。
  • Firebase SDK をセットアップして、電話番号ログインを使用します。次に、DGTAuthenticateButtonUIButton に置き換えます。ユーザーが UIButton を押したら、verifyPhoneNumber:completion: を呼び出します。

Digits SDK の authenticateWithCompletion: メソッドを呼び出すカスタムボタンを使用している場合は、電話番号ログインを使用するように Firebase SDK を設定します。次に、authenticateWithCompletion: の呼び出しを Firebase SDK の verifyPhoneNumber:completion: メソッドに置き換えます。

Digits を Firebase に置き換えたら、Podfile から Digits SDK を削除し、設定をビルドします。

アクティブな Digits セッションを Firebase に移行する

最後に、更新されたアプリのデプロイ後にユーザーが再度ログインする必要がないように、アクティブなユーザー セッションを Digits から Firebase に移行します。

Digits セッションを Firebase セッションに移行するには、Digits Migration Helper SDK を使用して、アクティブ Digits セッションから Firebase 認証トークンを生成します。次に、トークンを使用して Firebase にログインします。最後に、Firebase を使用して正常にログインした後、Digits セッションをクリアします。

  1. Podfile に Digits Migration Helper SDK を追加します。
    pod 'DigitsMigrationHelper'
    次に、pod install コマンドを実行します。
  2. アプリが読み込まれたら、アクティブな Digits セッションがあるかどうか確認します。存在する場合には、それを Firebase セッションに変換します。次に、Digits セッションを clearLegacyAuth: で置き換えます。次に例を示します。

    Swift

    let migrator = DigitsMigrator.init(digitsAppConsumerKey: key as! String, withDigitsAppConsumerSecret: secret as! String)
    
    migrator.getLegacyAuth { (customSignInToken, session) in
      if let customSignInToken = customSignInToken {
        print("Legacy digits session detected: token=\(customSignInToken), session=\(DigitsSession.describe(session))")
    
        Auth.auth().signIn(withCustomToken: customSignInToken) { (user, error) in
          if let error = error {
            print("signInWithCustomToken, user=\(String(describing: user)), error=\(error)")
            return
          }
    
          migrator.clearLegacyAuth { (success, error) in
            print("clearLegacyAuth, success=\(success), error=\(error?.localizedDescription ?? "")")
          }
        }
      }
    }
    

    Objective-C

    FIRDigitsMigrator *migrator = [[FIRDigitsMigrator alloc] initWithDigitsAppConsumerKey:key
                                                              withDigitsAppConsumerSecret:secret];
    
    [migrator getLegacyAuth:^(NSString *customSignInToken, FIRDigitsSession *session){
      if (customSignInToken) {
        NSLog(@"Legacy digits session detected: token=%@, session=%@", customSignInToken, [FIRDigitsSession describe:session]);
    
        [[FIRAuth auth] signInWithCustomToken:customSignInToken
                                   completion:^(FIRUser * _Nullable user, NSError * _Nullable error) {
          NSLog(@"signInWithCustomToken, user=%@, error=%@", user, error);
          if (!error) {
            NSString *msg = [NSString stringWithFormat:@"Converted to firebase user with id as %@", user.uid];
    
            [migrator clearLegacyAuth:^(BOOL success, NSError * _Nullable error){
              NSLog(@"clearLegacyAuth, success=%d, error=%@", success, error);
            }];
          }
        }];
      } else {
        NSLog(@"No legacy digits session detected");
        // ...
      }
    }];
    

    この変換は、アプリの任意の場所で実行できます。多くの場合、AppDelegate で行います。

    getLegacyAuth: がカスタム トークンを生成しない場合、ユーザーは Digits にログインしていないため、引き続き Firebase にログインできます。

  3. 省略可: Digits セッションが移行されたことを記録します。すでに完了している場合には、条件付きで前の手順をスキップします。

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

ご不明な点がありましたら、Google のサポートページをご覧ください。