
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 mang lại những lợi ích sau:
- Nhiều nhà cung cấp – quy trình đăng nhập cho email/mật khẩu, đường liên kết qua email, xác thực qua điện thoại, Đăng nhập bằng Google, Đăng nhập bằng Facebook, Đăng nhập bằng Twitter và Đăng nhập bằng GitHub.
- Quản lý tài khoản – các quy trình xử lý những 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 – các quy trình để liên kết tài khoản người dùng một cách an toàn trên 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.
- Giao diện tuỳ chỉnh – tuỳ chỉnh giao diện của FirebaseUI cho phù hợp với ứng dụng của bạn. Ngoài ra, vì FirebaseUI là nguồn mở, nên bạn có thể phát triển nhánh dự án và tuỳ chỉnh chính xác theo nhu cầu của mình.
- Trình quản lý thông tin xác thực – tích hợp tự động với Trình quản lý thông tin xác thực để đăng nhập nhanh trên nhiều thiết bị.
Trước khi bắt đầu
Nếu bạn chưa thực hiện, hãy thêm Firebase vào dự án Android.
Thêm các phần phụ thuộc cho FirebaseUI vào tệp
build.gradle(.kts)ở cấp ứng dụng. Nếu bạn muốn hỗ trợ tính năng đăng nhập bằng Facebook hoặc Twitter, hãy thêm cả SDK Facebook và Twitter:dependencies { // ... implementation("com.firebaseui:firebase-ui-auth:9.0.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:8.x") }FirebaseUI Auth SDK có các phần phụ thuộc bắc cầu trên Firebase SDK và Dịch vụ Google Play SDK.
Trong bảng điều khiển Firebase, hãy chuyển đến phần Bảo mật > Xác thực.
Trong thẻ Phương thức đăng nhập, hãy bật những nhà cung cấp dịch vụ đăng nhập mà bạn muốn hỗ trợ. Một số nhà cung cấp dịch vụ đăng nhập yêu cầu thông tin bổ sung, thường có trong bảng điều khiển dành cho nhà phát triển của dịch vụ.
Nếu bạn đã bật tính năng Đăng nhập bằng Google:
Cập nhật tệp cấu hình Firebase.
Khi được nhắc trong bảng điều khiển Firebase, hãy tải tệp cấu hình Firebase mới cập nhật (
google-services.json) xuống. Tệp này hiện chứa thông tin về ứng dụng OAuth cần thiết cho tính năng đăng nhập bằng Google.Di chuyển tệp cấu hình đã cập nhật này vào dự án Android Studio của bạn, thay thế tệp cấu hình tương ứng hiện đã lỗi thời. (Xem phần Thêm Firebase vào dự án Android.)
Chỉ định vân tay số SHA-1 của ứng dụng (nếu bạn chưa thực hiện).
Trong bảng điều khiển Firebase, hãy chuyển đến thẻ
Cài đặt > Chung.Di chuyển xuống thẻ Ứng dụng của bạn, chọn ứng dụng Android của bạn rồi thêm dấu vân tay SHA-1 vào trường Dấu vân tay chứng chỉ SHA.
Hãy xem phần Xác thực ứng dụng của bạn để biết thông tin chi tiết về cách lấy dấu vân tay SHA của ứng dụng.
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 mà mỗi nhà cung cấp yêu cầu:<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> </resources>
Đăng nhập
Tạo một ActivityResultLauncher để đăng ký lệnh gọi lại cho hợp đồng kết quả FirebaseUI Activity:
Kotlin
// See: https://developer.android.com/training/basics/intents/result private val signInLauncher = registerForActivityResult( FirebaseAuthUIActivityResultContract(), ) { res -> this.onSignInResult(res) }
Java
// See: https://developer.android.com/training/basics/intents/result private final ActivityResultLauncher<Intent> signInLauncher = registerForActivityResult( new FirebaseAuthUIActivityResultContract(), new ActivityResultCallback<FirebaseAuthUIAuthenticationResult>() { @Override public void onActivityResult(FirebaseAuthUIAuthenticationResult result) { onSignInResult(result); } } );
Để bắt đầu flow đăng nhập FirebaseUI, hãy tạo một ý định đăng nhập bằng các phương thức đăng nhập mà bạn muốn:
Kotlin
// 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 val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent)
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 Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent);
Khi quy trình đăng nhập hoàn tất, bạn sẽ nhận được kết quả trong onSignInResult:
Kotlin
private fun onSignInResult(result: FirebaseAuthUIAuthenticationResult) { val response = result.idpResponse if (result.resultCode == 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. // ... } }
Java
private void onSignInResult(FirebaseAuthUIAuthenticationResult result) { IdpResponse response = result.getIdpResponse(); if (result.getResultCode() == 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. // ... } }
Thiết lập phương thức đăng nhập
Xác thực bằng đường liên kết trong email
Trong bảng điều khiển Firebase, hãy chuyển đến phần Bảo mật > Xác thực.
Trên thẻ Phương thức đăng nhập, hãy bật phương thức đăng nhập Email/Mật khẩu. Xin lưu ý rằng bạn phải bật tính năng đăng nhập bằng email/mật khẩu để sử dụng tính năng đăng nhập bằng đường liên kết qua email.
Trong cùng một mục, hãy bật phương thức đăng nhập Đường liên kết qua email (đăng nhập không cần mật khẩu) rồi nhấp vào Lưu.
Bạn cũng cần bật Firebase Dynamic Links để sử dụng tính năng đăng nhập bằng đường liên kết qua email:
Trong bảng điều khiển Firebase, hãy chuyển đến DevOps & Engagement (DevOps và mức độ tương tác) > Đường liên kết động.
Nhấp vào Bắt đầu, rồi thêm một miền. Miền mà bạn chọn ở đây sẽ xuất hiện trong các đường liên kết trong email gửi cho người dùng.
Bạn có thể bật tính năng đăng nhập bằng đường liên kết qua email trong FirebaseUI bằng cách gọi
enableEmailLinkSignIntrên một phiên bảnEmailBuilder. Bạn cũng cần cung cấp một đối tượngActionCodeSettingshợp lệ cósetHandleCodeInAppđược đặt thành true.Ngoài ra, bạn cần đưa URL mà bạn truyền vào
setUrlvào danh sách cho phép:Trong bảng điều khiển Firebase, hãy chuyển đến thẻ Bảo mật > Xác thực > Cài đặt.
Trong mục Miền được uỷ quyền, hãy nhấp vào Thêm miền rồi thêm miền của bạn.
Kotlin
val 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() val providers = listOf( EmailBuilder() .enableEmailLinkSignIn() .setActionCodeSettings(actionCodeSettings) .build(), ) val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent)
Java
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(); List<AuthUI.IdpConfig> providers = Arrays.asList( new AuthUI.IdpConfig.EmailBuilder() .enableEmailLinkSignIn() .setActionCodeSettings(actionCodeSettings) .build() ); Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent);
Nếu bạn muốn lấy đường 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 tại đây. Nếu không, đường liên kết sẽ chuyển hướng đến hoạt động trình chạy của bạn.
Sau khi nhận được đường liên kết sâu, bạn sẽ cần gọi để xác minh rằng chúng tôi có thể xử lý đường liên kết đó cho bạn. Nếu có thể, bạn cần gửi thông tin đó cho chúng tôi qua
setEmailLink.Kotlin
if (AuthUI.canHandleIntent(intent)) { val extras = intent.extras ?: return val link = extras.getString("email_link_sign_in") if (link != null) { val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setEmailLink(link) .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent) } }
Java
if (AuthUI.canHandleIntent(getIntent())) { if (getIntent().getExtras() == null) { return; } String link = getIntent().getExtras().getString("email_link_sign_in"); if (link != null) { Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setEmailLink(link) .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent); } }
Không bắt buộc Chúng tôi hỗ trợ tính năng đăng nhập bằng đường liên kết qua email trên nhiều thiết bị. Điều này có nghĩa là bạn có thể dùng đường liên kết được gửi qua ứng dụng Android để đăng nhập trên các ứng dụng web hoặc ứng dụng Apple. Theo mặc định, chế độ hỗ trợ nhiều thiết bị sẽ được bật. Bạn có thể tắt tính năng này bằng cách gọi
setForceSameDevicetrên thực thểEmailBuilder.Hãy xem FirebaseUI-Web và FirebaseUI-iOS để biết thêm thông tin.
Đăng xuất
FirebaseUI cung cấp các phương thức thuận tiện để đă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:
Kotlin
AuthUI.getInstance() .signOut(this) .addOnCompleteListener { // ... }
Java
AuthUI.getInstance() .signOut(this) .addOnCompleteListener(new OnCompleteListener<Void>() { public void onComplete(@NonNull Task<Void> task) { // ... } });
Bạn cũng có thể xoá hoàn toàn tài khoản của người dùng:
Kotlin
AuthUI.getInstance() .delete(this) .addOnCompleteListener { // ... }
Java
AuthUI.getInstance() .delete(this) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { // ... } });
Tùy chỉnh
Theo mặc định, FirebaseUI sử dụng AppCompat để tạo giao diện, tức là FirebaseUI sẽ tự động áp dụng bảng phối màu của ứng dụng. Nếu cần tuỳ chỉnh thêm, bạn có thể truyền một giao diện và một biểu trưng đến trình tạo Intent đăng nhập:
Kotlin
val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setLogo(R.drawable.my_great_logo) // Set logo drawable .setTheme(R.style.MySuperAppTheme) // Set theme .build() signInLauncher.launch(signInIntent)
Java
Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setLogo(R.drawable.my_great_logo) // Set logo drawable .setTheme(R.style.MySuperAppTheme) // Set theme .build(); signInLauncher.launch(signInIntent);
Bạn cũng có thể đặt chính sách quyền riêng tư và điều khoản dịch vụ tuỳ chỉnh:
Kotlin
val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setTosAndPrivacyPolicyUrls( "https://example.com/terms.html", "https://example.com/privacy.html", ) .build() signInLauncher.launch(signInIntent)
Java
Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setTosAndPrivacyPolicyUrls( "https://example.com/terms.html", "https://example.com/privacy.html") .build(); signInLauncher.launch(signInIntent);
Các bước tiếp theo
- Để biết thêm thông tin về cách sử dụng và tuỳ chỉnh FirebaseUI, hãy xem tệp README trên GitHub.
- Nếu bạn phát hiện thấy vấn đề trong FirebaseUI và muốn báo cáo vấn đề đó, hãy sử dụng công cụ theo dõi lỗi của GitHub.