Google is committed to advancing racial equity for Black communities. See how.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Dễ dàng thêm đăng nhập vào ứng dụng Android của bạn với FirebaseUI

FirebaseUI là một thư viện được xây dựng dựa trên SDK xác thực Firebase, cung cấp các luồng giao diện người dùng thả vào để sử dụng trong ứng dụng của bạn. FirebaseUI cung cấp các lợi ích sau:

  • Nhiều nhà cung cấp - quy trình đăng nhập cho email / mật khẩu, liên kết email, xác thực điện thoại, Đăng nhập bằng Google, Đăng nhập Facebook, Đăng nhập Twitter và Đăng nhập GitHub.
  • Quản lý tài khoản - các luồng xử lý các tác vụ quản lý tài khoản, chẳng hạn như tạo tài khoản và đặt lại mật khẩu.
  • Liên kết tài khoản - quy trình liên kết an toàn các tài khoản người dùng giữa các nhà cung cấp danh tính.
  • Nâng cấp người dùng ẩn danh - quy trình nâng cấp người dùng ẩn danh một cách an toàn.
  • Chủ đề tùy chỉnh - tùy chỉnh giao diện của FirebaseUI để phù hợp với ứng dụng của bạn. Ngoài ra, vì FirebaseUI là mã nguồn mở, bạn có thể phân nhánh dự án và tùy chỉnh chính xác theo nhu cầu của mình.
  • Smart Lock cho Mật khẩu - tích hợp tự động với Smart Lock cho Mật khẩu để đăng nhập trên nhiều thiết bị nhanh chóng.

Trước khi bắt đầu

  1. Nếu bạn chưa có, hãy thêm Firebase vào dự án Android của bạn .

  2. Trong dự án cấp của bạn build.gradle tập tin, hãy chắc chắn để bao gồm kho Maven của Google trong cả hai bạn buildscriptallprojects phần.

  3. Thêm các phần phụ thuộc cho FirebaseUI vào tệp build.gradle cấp ứng dụng của bạn. Nếu bạn muốn hỗ trợ đăng nhập bằng Facebook hoặc Twitter, hãy bao gồm SDK Facebook và Twitter:

    dependencies {
        // ...
    
        implementation 'com.firebaseui:firebase-ui-auth:6.2.0'
    
        // Required only if Facebook login support is required
        // Find the latest Facebook SDK releases here: https://goo.gl/Ce5L94
        implementation 'com.facebook.android:facebook-android-sdk:4.x'
    
        // Required only if Twitter login support is required
        // Find the latest Twitter SDK releases here: https://goo.gl/E5wZvQ
        implementation 'com.twitter.sdk.android:twitter-core:3.x'
    }
    

    SDK xác thực FirebaseUI có các phụ thuộc mang tính bắc cầu vào SDK Firebase và SDK dịch vụ của Google Play.

  4. Trong bảng điều khiển Firebase , hãy mở phần Xác thực và bật các phương thức đăng nhập bạn muốn hỗ trợ. Một số phương pháp đăng nhập yêu cầu thông tin bổ sung, thường có sẵn trong bảng điều khiển dành cho nhà phát triển của dịch vụ.

  5. Nếu bạn hỗ trợ Đăng nhập bằng Google và chưa chỉ định tệp tham chiếu SHA-1 của ứng dụng, hãy làm như vậy từ trang Cài đặt của bảng điều khiển Firebase. Xem Xác thực khách hàng của bạn để biết chi tiết về cách lấy vân tay SHA-1 của ứng dụng.

  6. Nếu bạn hỗ trợ đăng nhập bằng Facebook hoặc Twitter, hãy thêm tài nguyên chuỗi vào strings.xml để chỉ định thông tin nhận dạng theo yêu cầu của từng nhà cung cấp:

    
    <resources>
      <!-- Facebook application ID and custom URL scheme (app ID prefixed by 'fb'). -->
      <string name="facebook_application_id" translatable="false">YOUR_APP_ID</string>
      <string name="facebook_login_protocol_scheme" translatable="false">fbYOUR_APP_ID</string>
      <!-- Twitter consumer key and secret -->
      <string name="twitter_consumer_key" translatable="false">YOUR_CONSUMER_KEY</string>
      <string name="twitter_consumer_secret" translatable="false">YOUR_CONSUMER_SECRET</string>
    </resources>
    

Đăng nhập

Để bắt đầu quy trình đăng nhập FirebaseUI, hãy tạo mục đích đăng nhập bằng các phương pháp đăng nhập ưa thích của bạn:

Java

// Choose authentication providers
List<AuthUI.IdpConfig> providers = Arrays.asList(
        new AuthUI.IdpConfig.EmailBuilder().build(),
        new AuthUI.IdpConfig.PhoneBuilder().build(),
        new AuthUI.IdpConfig.GoogleBuilder().build(),
        new AuthUI.IdpConfig.FacebookBuilder().build(),
        new AuthUI.IdpConfig.TwitterBuilder().build());

// Create and launch sign-in intent
startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .build(),
        RC_SIGN_IN);

Kotlin + KTX

// Choose authentication providers
val providers = arrayListOf(
        AuthUI.IdpConfig.EmailBuilder().build(),
        AuthUI.IdpConfig.PhoneBuilder().build(),
        AuthUI.IdpConfig.GoogleBuilder().build(),
        AuthUI.IdpConfig.FacebookBuilder().build(),
        AuthUI.IdpConfig.TwitterBuilder().build())

// Create and launch sign-in intent
startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .build(),
        RC_SIGN_IN)

Khi quy trình đăng nhập hoàn tất, bạn sẽ nhận được kết quả trong onActivityResult :

Java

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RC_SIGN_IN) {
        IdpResponse response = IdpResponse.fromResultIntent(data);

        if (resultCode == RESULT_OK) {
            // Successfully signed in
            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
            // ...
        } else {
            // Sign in failed. If response is null the user canceled the
            // sign-in flow using the back button. Otherwise check
            // response.getError().getErrorCode() and handle the error.
            // ...
        }
    }
}

Kotlin + KTX

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == RC_SIGN_IN) {
        val response = IdpResponse.fromResultIntent(data)

        if (resultCode == Activity.RESULT_OK) {
            // Successfully signed in
            val user = FirebaseAuth.getInstance().currentUser
            // ...
        } else {
            // Sign in failed. If response is null the user canceled the
            // sign-in flow using the back button. Otherwise check
            // response.getError().getErrorCode() and handle the error.
            // ...
        }
    }
}

Thiết lập các phương thức đăng nhập

  1. Trong bảng điều khiển Firebase , hãy mở phần Xác thực . Trên tab Phương thức đăng nhập , hãy bật nhà cung cấp Email / Mật khẩu . Lưu ý rằng đăng nhập email / mật khẩu phải được bật để sử dụng đăng nhập liên kết email.

  2. Trong cùng phần này, hãy bật phương pháp đăng nhập liên kết Email (đăng nhập không cần mật khẩu) và nhấp vào Lưu .

  3. Bạn cũng sẽ phải bật Liên kết động Firebase để sử dụng đăng nhập liên kết email. Trong bảng điều khiển Firebase , hãy nhấp vào Liên kết động trong Phát triển trong thanh điều hướng. Nhấp vào Bắt đầu và thêm miền. Miền bạn chọn ở đây sẽ được phản ánh trong các liên kết email được gửi đến người dùng của bạn.

  4. Bạn có thể bật đăng nhập liên kết email trong FirebaseUI bằng cách gọi enableEmailLinkSignIn trên bản EmailBuilder . Bạn cũng sẽ cần cung cấp một đối tượng ActionCodeSettings hợp lệ với setHandleCodeInApp được đặt thành true. Ngoài ra, bạn cần lập danh sách trắng URL mà bạn chuyển đến setUrl , có thể được thực hiện trong bảng điều khiển Firebase , trong Xác thực -> Phương thức đăng nhập -> setUrl được ủy quyền.

    ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder()
            .setAndroidPackageName(/* yourPackageName= */ ..., /* installIfNotAvailable= */ true,
            /* minimumVersion= */ null)
            .setHandleCodeInApp(true) // This must be set to true
            .setUrl("https://google.com") // This URL needs to be whitelisted
            .build();
    
    startActivityForResult(
            AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setAvailableProviders(Arrays.asList(
                            new AuthUI.IdpConfig.EmailBuilder().enableEmailLinkSignIn()
                            .setActionCodeSettings(actionCodeSettings).build())
                    .build(),
            RC_SIGN_IN);
    
    
  5. Nếu bạn muốn nắm bắt liên kết trong một hoạt động cụ thể, vui lòng làm theo các bước được nêu ở đây . Nếu không, liên kết sẽ chuyển hướng đến hoạt động trình khởi chạy của bạn.

  6. Khi bạn nắm được liên kết sâu, bạn sẽ cần phải gọi xác minh để chúng tôi có thể xử lý nó cho bạn. Nếu chúng tôi có thể, bạn cần chuyển nó cho chúng tôi qua setEmailLink .

    if (AuthUI.canHandleIntent(getIntent())) {
        if (getIntent().getExtras() == null) {
                return;
            }
            String link = getIntent().getExtras().getString(ExtraConstants.EMAIL_LINK_SIGN_IN);
            if (link != null) {
                startActivityForResult(
                        AuthUI.getInstance()
                                .createSignInIntentBuilder()
                                .setEmailLink(link)
                                .setAvailableProviders(getAvailableProviders())
                                .build(),
                        RC_SIGN_IN);
            }
    }
    
  7. Đăng nhập liên kết email trên nhiều thiết bị tùy chọn được hỗ trợ, có nghĩa là liên kết được gửi qua ứng dụng Android của bạn có thể được sử dụng để đăng nhập trên web hoặc ứng dụng iOS của bạn. Theo mặc định, hỗ trợ thiết bị chéo được bật. Bạn có thể tắt nó bằng cách gọi setForceSameDevice trên phiên bản EmailBuilder .

    Xem FirebaseUI-WebFirebaseUI-iOS để biết thêm thông tin.

Đăng xuất

FirebaseUI cung cấp các phương pháp tiện lợi để đăng xuất khỏi Xác thực Firebase cũng như tất cả các nhà cung cấp danh tính xã hội:

Java

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin + KTX

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener {
            // ...
        }

Bạn cũng có thể xóa hoàn toàn tài khoản của người dùng:

Java

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin + KTX

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener {
            // ...
        }

Tùy biến

Theo mặc định, FirebaseUI sử dụng AppCompat cho chủ đề, có nghĩa là nó sẽ áp dụng bảng màu ứng dụng của bạn một cách tự nhiên. Nếu bạn yêu cầu tùy chỉnh thêm, bạn có thể chuyển một chủ đề và biểu trưng cho trình tạo Intent đăng nhập:

Java

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setLogo(R.drawable.my_great_logo)      // Set logo drawable
                .setTheme(R.style.MySuperAppTheme)      // Set theme
                .build(),
        RC_SIGN_IN);

Kotlin + KTX

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setLogo(R.drawable.my_great_logo) // Set logo drawable
                .setTheme(R.style.MySuperAppTheme) // Set theme
                .build(),
        RC_SIGN_IN)

Bạn cũng có thể đặt chính sách bảo mật tùy chỉnh và điều khoản dịch vụ:

Java

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setTosAndPrivacyPolicyUrls(
                        "https://example.com/terms.html",
                        "https://example.com/privacy.html")
                .build(),
        RC_SIGN_IN);

Kotlin + KTX

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setTosAndPrivacyPolicyUrls(
                        "https://example.com/terms.html",
                        "https://example.com/privacy.html")
                .build(),
        RC_SIGN_IN)

Bước tiếp theo

  • Để biết thêm thông tin về cách sử dụng và tùy chỉnh FirebaseUI, hãy xem tệp README trên GitHub.
  • Nếu bạn tìm thấy sự cố trong FirebaseUI và muốn báo cáo, hãy sử dụng trình theo dõi sự cố GitHub .