在 Android 上使用 Twitter 进行身份验证

您可以将 Twitter 身份验证机制集成到您的应用中,让用户可使用自己的 Twitter 帐号进行 Firebase 身份验证。

开始之前

  1. 将 Firebase 添加至您的 Android 项目
  2. 如果您尚未将您的应用与 Firebase 项目相关联,请在 Firebase 控制台中将其关联。
  3. 将 Firebase 身份验证的依赖项添加至您的应用级 build.gradle 文件:
    implementation 'com.google.firebase:firebase-auth:16.0.3'
  4. 在 Twitter 上将您的应用注册为开发者应用,并获取您的应用的 API 密钥API 密码
  5. 启用 Twitter 登录:
    1. Firebase 控制台中,打开 Auth(身份验证)部分。
    2. 登录方法标签上,启用 Twitter 登录方法,然后指定从 Twitter 获取的 API 密钥API 密码
    3. 然后,请务必转到 Twitter 应用配置,在您的应用的设置页面上,将 Firebase OAuth 重定向 URI(例如 my-app-12345.firebaseapp.com/__/auth/handler)设置为回调网址

      在 Twitter 控制台中设置重定向 URI 时,请务必选择 Enable Callback Locking

      回调锁定默认处于停用状态,为了防止 Firebase 安全令牌被未经授权的第三方拦截,必须启用此功能。

进行 Firebase 身份验证

  1. 在登录 Activity 的 onCreate 方法中,获取 FirebaseAuth 对象的共享实例:
    private FirebaseAuth mAuth;
    
    // ...
    
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
    
  2. 初始化您的 Activity 时,请检查用户当前是否已登录:
    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }
    
  3. 开发者文档中的说明操作,将 Twitter 登录机制集成到您的应用中。在 Twitter 登录流程结束后,您会收到一个 OAuth 访问令牌和一个 OAuth 密钥。您的 Activity 中的代码如下所示:
    private TwitterLoginButton mLoginButton;
    
    // ...
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // ...
        mLoginButton = findViewById(R.id.buttonTwitterLogin);
        mLoginButton.setCallback(new Callback<TwitterSession>() {
            @Override
            public void success(Result<TwitterSession> result) {
                Log.d(TAG, "twitterLogin:success" + result);
                handleTwitterSession(result.data);
            }
    
            @Override
            public void failure(TwitterException exception) {
                Log.w(TAG, "twitterLogin:failure", exception);
                updateUI(null);
            }
        });
    }
    
    // ...
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        // Pass the activity result to the Twitter login button.
        mLoginButton.onActivityResult(requestCode, resultCode, data);
    }
    
  4. 在用户成功使用 Twitter 帐号登录之后,使用 OAuth 访问令牌和 OAuth 密钥换取 Firebase 凭据,然后使用此 Firebase 凭据进行 Firebase 身份验证:
    private void handleTwitterSession(TwitterSession session) {
        Log.d(TAG, "handleTwitterSession:" + session);
    
        AuthCredential credential = TwitterAuthProvider.getCredential(
                session.getAuthToken().token,
                session.getAuthToken().secret);
    
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information
                            Log.d(TAG, "signInWithCredential:success");
                            FirebaseUser user = mAuth.getCurrentUser();
                            updateUI(user);
                        } else {
                            // If sign in fails, display a message to the user.
                            Log.w(TAG, "signInWithCredential:failure", task.getException());
                            Toast.makeText(TwitterLoginActivity.this, "Authentication failed.",
                                    Toast.LENGTH_SHORT).show();
                            updateUI(null);
                        }
    
                        // ...
                    }
                });
    }
    
    如果对 signInWithCredential 的调用成功,您可以使用返回的 FirebaseUser 继续操作。

后续步骤

在用户首次登录后,系统会创建一个新的用户帐号,并将其与该用户登录时使用的凭据(即用户名、密码、电话号码或者身份验证提供方信息)相关联。此新帐号存储在您的 Firebase 项目中,无论用户采用何种方式登录,您项目中的每个应用都可以使用此帐号来识别用户。

  • 在您的应用中,您可以从 FirebaseUser 对象获取用户的个人资料基本信息。请参阅管理用户

  • 在您的 Firebase 实时数据库和 Cloud Storage 安全规则中,您可以从 auth 变量获取已登录用户的唯一身份用户 ID,然后用此 ID 来控制用户可以访问哪些数据。

您可以通过将身份验证提供方凭据关联至现有用户帐号,让用户可以使用多个身份验证提供方服务登录您的应用。

要让用户退出帐号,请调用 signOut

FirebaseAuth.getInstance().signOut();

发送以下问题的反馈:

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