FirebaseUI là một thư viện được tạo ở đầu SDK xác thực Firebase cung cấp luồng giao diện người dùng thả xuống để 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 email, số điện thoại xác thực, Đă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 - quy trình để 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 tài khoản người dùng giữa danh tính Google Cloud.
- 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. Ngoài ra, vì FirebaseUI là nguồn mở nên bạn có thể phân nhánh dự án và tuỳ chỉnh nó theo đúng nhu cầu của bạn.
- Smart Lock cho Mật khẩu – tích hợp tự động với Smart Lock cho Mật khẩu giúp đăng nhập nhanh trên nhiều thiết bị.
Trước khi bắt đầu
Nếu bạn chưa làm như vậy, thêm Firebase vào dự án Android của bạn.
Thêm các phần phụ thuộc cho FirebaseUI vào tệp
build.gradle
ở cấp ứng dụng. Nếu bạn muốn hỗ trợ đăng nhập bằng Facebook hoặc Twitter, hãy thêm cả SDK của Facebook và Twitter:dependencies { // ... implementation 'com.firebaseui:firebase-ui-auth:7.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:8.x' }
SDK xác thực FirebaseUI có các phần phụ thuộc bắc cầu trên SDK Firebase và SDK Dịch vụ Google Play.
Trong bảng điều khiển Firebase, hãy mở phần Xác thực rồi bật các phương thức đăng nhập mà bạn muốn hỗ trợ. Một số phương thức đăng nhập yêu cầu thông tin bổ sung, thường có sẵn trong nhà phát triển dịch vụ Google Play.
Nếu bạn đã bật tính năng Đăng nhập bằng Google:
Khi được nhắc trong bảng điều khiển, hãy tải tệp cấu hình Firebase đã cập nhật xuống (
google-services.json
), hiện chứa thông tin về ứng dụng OAuth bắt buộc để đă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, thay thế tệp cấu hình tương ứng đã lỗi thời. (Xem bài viết Thêm Firebase vào dự án Android của bạn.)
Nếu bạn chưa chỉ định vân tay số SHA của ứng dụng, hãy thực hiện việc này từ Trang cài đặt của bảng điều khiển Firebase. Xem phần Xác thực ứng dụng của bạn để biết chi tiết về cách lấy vân tay số 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
xác định thông tin nhận dạng bắt buộc theo yêu cầu của mỗi Google Cloud:<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 FirebaseUI
Hợp đồng kết quả hoạt động:
Kotlin+KTX
// 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 quy trình đăng nhập vào FirebaseUI, hãy tạo ý định đăng nhập bằng phương thức đăng nhập ưu tiên:
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 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+KTX
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 đường liên kết email
Trong bảng điều khiển Firebase, hãy mở phần Xác thực. Trên Thẻ Phương pháp đăng nhập, bật nhà cung cấp Email/Mật khẩu. Ghi chú 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 qua đường liên kết email.
Cũng trong phần này, hãy bật tính năng Đăng nhập bằng đườ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 sẽ phải bật Đường liên kết động của Firebase để sử dụng tính năng đăng nhập bằng đường liên kết email. Trong Bảng điều khiển Firebase, hãy nhấp vào Đường liên kết động trong mục Tương tác trên thanh điều hướng. Nhấp vào Bắt đầu và thêm miền. Miền mà bạn chọn ở đây sẽ được phản ánh trong email liên kết được gửi đến người dùng của bạn.
Bạn có thể bật tính năng đăng nhập bằng đường liên kết email trong FirebaseUI bằng cách gọi
enableEmailLinkSignIn
trên Thực thểEmailBuilder
. Bạn cũng cần cung cấp đối tượngActionCodeSettings
hợp lệ cùng với Đã đặtsetHandleCodeInApp
thành true. Ngoài ra, bạn cần đưa URL mà bạn chuyển đến vào danh sách trắngsetUrl
mà bạn có thể thiết lập trong bảng điều khiển của Firebase, trong phần Xác thực -> Phương thức đăng nhập -> Miền được uỷ quyền.Kotlin+KTX
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 nhận đường liên kết trong một hoạt động cụ thể, vui lòng làm theo các bước đã nêu tại đây. Nếu không, đường liên kết này sẽ chuyển hướng đến hoạt động của trình chạy.
Sau khi tìm được đường liên kết sâu, bạn sẽ cần gọi điện để xác minh rằng chúng tôi có thể xử lý giúp bạn. Nếu chúng tôi có thể, bạn cần chuyển nó cho chúng tôi qua
setEmailLink
.Kotlin+KTX
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 Đăng nhập bằng đường liên kết email trên nhiều thiết bị được hỗ trợ, tức là đường liên kết đó được gửi qua ứng dụng Android của bạn có thể được dùng để đăng nhập trên web hoặc ứng dụng của Apple. Theo mặc định, hỗ trợ nhiều thiết bị đã được bật. Bạn có thể tắt chế độ này bằng cách gọi
setForceSameDevice
trên thực thểEmailBuilder
.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 tính năng Xác thực Firebase cũng như mọi nhà cung cấp danh tính xã hội:
Kotlin+KTX
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 người dùng:
Kotlin+KTX
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 để tuỳ chỉnh giao diện, nghĩa là giao diện này sẽ tự nhiên
á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+KTX
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ể thiết lập chính sách quyền riêng tư và điều khoản dịch vụ tuỳ chỉnh:
Kotlin+KTX
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 ĐỌC trên GitHub.
- Nếu bạn phát hiện 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 GitHub.