将您的 iOS 应用从 Digits 迁移到 Firebase

如果您通过 Digits 允许用户使用电话号码登录,则应将您的应用迁移到 Firebase 身份验证。未来有关电话号码登录功能的所有开发工作都将在 Firebase 中进行,并且 Digits 将于 2017 年 9 月 30 日关停。

按照本页上的说明进行操作,您就可以将自己的应用从 Digits 迁移到 Firebase,而不会中断您当前的 Digits 用户的体验。

概览

要将您的应用从 Digits 迁移到 Firebase 身份验证,请完成以下步骤:

  1. 将您的 Digits 用户帐号迁移到 Firebase
  2. 将 Digits SDK 替换为 Firebase SDK
  3. 将进行中的 Digits 会话迁移到 Firebase

第一步可以立即完成而不影响您的应用或现有用户;其余步骤则应同时完成。

将您的 Digits 用户帐号迁移到 Firebase

首先,按照 Fabric 开发者文档中的说明将您的 Digits 用户帐号迁移到 Firebase。

完成帐号迁移步骤后,等待您的 Digits 用户帐号迁移至 Firebase 项目,这需要几个小时的时间。迁移完成后,您将拥有一个包含您的所有 Digits 用户帐号的 Firebase 项目。此外,启用迁移后创建的所有 Digits 帐号都会自动迁移到 Firebase。

将 Digits SDK 替换为 Firebase SDK

接下来,在您的应用中,将对 Digits SDK 的调用替换为对 Firebase SDK 的调用。

如果您使用预先配置的 Digits 登录按钮 DGTAuthenticateButton,则可以通过执行以下操作之一切换到 Firebase:

  • 安装 FirebaseUI,并将 DGTAuthenticateButton 的父视图替换为 FirebaseUI 中的 authViewController
  • 设置 Firebase SDK 以使用电话号码登录功能。然后,将 DGTAuthenticateButton 替换为 UIButton。当用户按下 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. 将 Digits Migration Helper SDK 添加到您的 Podfile 中:
    pod 'DigitsMigrationHelper'
    然后,运行 pod install 命令。
  2. 在您的应用加载完毕后,查看是否存在进行中的 Digits 会话,如果存在,则将其转换为 Firebase 会话。然后,使用 clearLegacyAuth: 清除 Digits 会话。例如:

    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 会话已迁移的事实进行记录,如果已经完成上一步,则可视情况跳过该步骤。

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面