将您的 Android 应用从 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 的调用。

要将使用 Firebase 身份验证进行电话号码登录的功能添加到您的应用,请执行以下操作之一:

  • 如果您需要界面插件解决方案,请安装 FirebaseUI,并将显示您的 DigitsAuthButton 的 Activity 替换为 FirebaseUI 中的 AuthUI Activity。例如:
    startActivityForResult(
        AuthUI.getInstance()
            .createSignInIntentBuilder()
            .setProviders(Arrays.asList(
                new AuthUI.IdpConfig.Builder(AuthUI.PHONE_VERIFICATION_PROVIDER).build(),
                // Other providers you want to support
                // ...
            ))
            .build(),
        RC_SIGN_IN);
    
    这是向您的应用添加 Firebase 身份验证的最简单的方法。
  • 如果您不想使用 FirebaseUI,而更希望构建您自己的界面或与现有的登录界面集成,请设置 Firebase SDK 以使用电话号码登录功能,并对您的 Digits 代码进行以下更改:

    • 在您的 Activity 的布局中,将 com.digits.sdk.android.DigitsAuthButton 元素替换为标准的 ButtonImageButton 元素。
    • AuthCallback 中的逻辑替换为 PhoneAuthProvider.OnVerificationStateChangedCallbacks 中的等效代码。
    • 在您的电话登录按钮的 onClick 侦听器中,将对 Digits.authenticate 的调用替换为对 verifyPhoneNumber 的调用,如以下示例中所示:
      PhoneAuthProvider.getInstance().verifyPhoneNumber(
          phoneNumber,        // Phone number to verify
          60,                 // Timeout duration
          TimeUnit.SECONDS,   // Unit of timeout
          mCallbacks);        // OnVerificationStateChangedCallbacks
      

在将 Digits 替换为 Firebase 后,从您的 build.gradle 文件中移除 Digits SDK。

将进行中的 Digits 会话迁移到 Firebase

最后,将所有进行中的用户会话从 Digits 迁移到 Firebase,以便在您部署更新后的应用后,用户不必再次登录。

要将您的 Digits 会话迁移为 Firebase 会话,请使用 Digits Migration Helper SDK 从进行中的 Digits 会话生成一个 Firebase 身份验证令牌。然后,使用该令牌通过 Firebase 进行登录。最后,在使用 Firebase 成功登录后,清除 Digits 会话。

  1. 将 Digits Migration Helper 的依赖项添加到您的模块级 build.gradle 文件中:
    compile 'com.google.firebase:firebase-auth:11.8.0'
    compile 'com.firebase:digitsmigrationhelpers:0.1.1'
    
  2. 确保您的 AndroidManifest.xml 中包含您的 Fabric 和 Digits 键:
    <!--You may already have io.fabric.ApiKey entry. Continue using it -->
    <meta-data
        android:name="io.fabric.ApiKey"
        android:value="@string/FABRIC_API_KEY"
        tools:replace="android:value"/>
    <meta-data
        android:name="com.digits.sdk.android.ConsumerKey"
        android:value="@string/CONSUMER_KEY"/>
    <meta-data
        android:name="com.digits.sdk.android.ConsumerSecret"
        android:value="@string/CONSUMER_SECRET"/>
    
  3. 在 Application 或主要 Activity 的 onCreate 方法中,查看是否存在进行中的 Digits 会话,如果存在,则通过调用 AuthMigrator.migrate 将其转换为 Firebase 会话。例如:
    AuthMigrator.getInstance().migrate().addOnSuccessListener(this,
            new OnSuccessListener() {
                @Override
                public void onSuccess(Void authResult) {
                    FirebaseUser u = FirebaseAuth.getInstance().getCurrentUser();
                    if (u != null) {
                        // Either a user was already logged in or token exchange succeeded
                        Log.d("MyApp", "Digits id preserved:" + u.getUid());
                        Log.d("MyApp", "Digits phone number preserved: " + u.getPhoneNumber());
                    } else {
                        // No tokens were found to exchange and no Firebase user logged in.
                    }
                }
            }).addOnFailureListener(this,
            new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    // Error migrating Digits token
                }
            });
    
    如果调用成功完成,则说明 Digits 会话已转换为 Firebase 会话,原来的 Digits 会话已被删除。
  4. 可选:对 Digits 会话已迁移的事实进行记录,如果已经完成上一步,则可视情况跳过该步骤。

发送以下问题的反馈:

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