Lớp học lập trình này nằm trong khóa học Nâng cao về Android trong Kotlin. Bạn sẽ nhận được nhiều giá trị nhất từ khóa học này nếu bạn làm việc qua các lớp học lập trình theo trình tự, nhưng bạn không bắt buộc phải làm vậy. Tất cả các lớp học lập trình đều có trên trang đích của các lớp học lập trình Android nâng cao trong Kotlin.
Giới thiệu
Khi tạo ứng dụng Android, có nhiều lợi ích mà ứng dụng của bạn có thể đem lại cho người dùng khi đăng nhập. Bằng cách cho phép người dùng tạo danh tính trong ứng dụng của bạn, bạn có thể cung cấp cho họ thêm nhiều cách để tương tác với ứng dụng.
Với tài khoản được cá nhân hóa, người dùng có thể tùy chỉnh trải nghiệm trong ứng dụng, tương tác với người dùng khác, đồng thời giữ nguyên dữ liệu của họ nếu họ đang sử dụng ứng dụng trên thiết bị khác (chẳng hạn như web hoặc điện thoại mới).
Trong lớp học lập trình này, bạn sẽ tìm hiểu những thông tin cơ bản về cách hỗ trợ đăng nhập cho ứng dụng của mình bằng cách sử dụng thư viện FirebaseUI. Ngoài nhiều tính năng khác, thư viện FirebaseUI còn giúp nhà phát triển muốn xây dựng quy trình đăng nhập dễ dàng và xử lý công việc quản lý tài khoản người dùng cho bạn.
Kiến thức bạn cần có
- Kiến thức cơ bản về cách xây dựng ứng dụng Android
- LiveData và ViewModel
Kiến thức bạn sẽ học được
- Cách thêm Firebase vào dự án
- Cách hỗ trợ thông tin đăng nhập cho ứng dụng Android
- Cách quan sát trạng thái xác thực hiện tại của ứng dụng
- Cách đăng xuất người dùng
Bạn sẽ thực hiện
- Sử dụng bảng điều khiển của Firebase để tích hợp Firebase trong ứng dụng của bạn.
- Triển khai tính năng đăng nhập.
- Thêm tùy chỉnh trong ứng dụng cho người dùng đã đăng nhập.
- Triển khai việc đăng xuất người dùng.
Tìm hiểu thêm về LiveData và ViewModel
Để sử dụng ứng dụng trong lớp học lập trình này, bạn cần có kiến thức cơ bản về LiveData và ViewModel. Hãy đọc qua tổng quan về LiveData và ViewModel nếu bạn muốn xem thông tin tổng quan ngắn gọn về những khái niệm này.
Bạn cũng có thể tham gia khóa học Phát triển ứng dụng Android bằng Kotlin để tìm hiểu về những chủ đề cơ bản của Android mà bạn sẽ gặp qua trong lớp học lập trình này. Khóa học này có ở cả khóa học trên Udacity và khóa học lập trình.
Trong lớp học lập trình này, bạn sẽ xây dựng một ứng dụng hiển thị các thông tin thú vị về Android. Quan trọng hơn, ứng dụng sẽ có nút Đăng nhập/đăng xuất. Khi người dùng đăng nhập vào ứng dụng, mọi thông tin thực tế mà Android hiển thị sẽ bao gồm lời chào của người dùng, giúp người dùng thêm nội dung được cá nhân hóa.
Tải ứng dụng mẫu xuống, bạn có thể:
... hoặc sao chép kho lưu trữ GitHub từ dòng lệnh bằng cách dùng lệnh sau đây và chuyển sang nhánh start
của repo:
$ git clone https://github.com/googlecodelabs/android-kotlin-login
Lưu ý quan trọng: Vì bạn sẽ tích hợp ứng dụng để sử dụng Firebase nên ứng dụng dành cho người mới bắt đầu cần một số thiết lập để có thể tạo và chạy. Bạn sẽ làm việc đó trong bước tiếp theo của lớp học lập trình.
Bước 1: Tạo một dự án Firebase
Để có thể thêm Firebase vào ứng dụng Android, bạn cần tạo một dự án Firebase để kết nối với ứng dụng Android của mình.
- Trong bảng điều khiển của Firebase, hãy nhấp vào Thêm dự án.
- Chọn hoặc nhập Tên dự án. Bạn có thể đặt tên cho dự án của mình, nhưng hãy cố gắng chọn tên liên quan đến ứng dụng mà bạn đang xây dựng.
- Nhấp vào Tiếp tục.
- Bạn có thể bỏ qua bước thiết lập Google Analytics và chọn tùy chọn Không ngay bây giờ.
- Nhấp vào Tạo dự án để hoàn tất quá trình thiết lập dự án Firebase.
Bước 2: Đăng ký ứng dụng của bạn với Firebase
Bây giờ, bạn đã có một dự án Firebase và có thể thêm ứng dụng Android đó vào dự án đó.
- Ở giữa trang Tổng quan về dự án trên bảng điều khiển của Firebase, hãy nhấp vào biểu tượng Android để chạy quy trình thiết lập.
- Nhập mã ứng dụng của ứng dụng vào trường tên gói Android. Hãy nhớ nhập mã mà ứng dụng đang sử dụng vì bạn không thể thêm hoặc sửa đổi giá trị này sau khi đã đăng ký ứng dụng bằng dự án Firebase.
- Mã ứng dụng đôi khi được gọi là tên gói.
- Tìm mã ứng dụng này trong tệp Gradle mô-đun (cấp ứng dụng), thường là
app/build.gradle
(mã ví dụ:com.yourcompany.yourproject
). - Nhập chứng chỉ ký gỡ lỗi SHA-1. Bạn có thể tạo khóa này bằng cách nhập lệnh sau vào thiết bị đầu cuối của dòng lệnh.
keytool -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v -storepass android
- Nhấp vào Đăng ký ứng dụng.
Bước 3: Thêm tệp cấu hình Firebase vào dự án
Thêm tệp cấu hình Android Firebase vào ứng dụng của bạn:
- Nhấp vào Tải google-services.json xuống để tải tệp cấu hình Android trên Firebase của bạn (
google-services.json
).
- Bạn có thể tải lại tệp cấu hình Android trên Firebase xuống bất cứ lúc nào.
- Đảm bảo tệp cấu hình không được nối thêm ký tự và chỉ được đặt tên là
google-services.json
- Di chuyển tệp cấu hình vào thư mục mô-đun (cấp ứng dụng) của ứng dụng.
Bước 4: Định cấu hình dự án Android để bật các sản phẩm của Firebase
- Để bật các sản phẩm của Firebase trong ứng dụng của bạn, hãy thêm trình bổ trợ dịch vụ của google vào tệp Gradle của bạn.
- Trong tệp Gradle cấp gốc (cấp dự án) (
build.gradle
), hãy thêm các quy tắc để đưa trình bổ trợ Dịch vụ của Google vào. Ngoài ra, hãy kiểm tra để đảm bảo bạn cũng có kho lưu trữ Maven của Google.
build.gradle
buildscript {
repositories {
// Check that you have the following line (if not, add it):
google() // Google's Maven repository
}
dependencies {
// ...
// Add the following line:
classpath 'com.google.gms:google-services:4.3.0' // Google Services plugin
}
}
allprojects {
// ...
repositories {
// Check that you have the following line (if not, add it):
google() // Google's Maven repository
// ...
}
}
- Trong tệp Gradle mô-đun (cấp ứng dụng) (thường là
app/build.gradle
), hãy thêm một dòng vào cuối tệp.
app/build.gradle
apply plugin: 'com.android.application'
android {
// ...
}
// Add the following line to the bottom of the file:
apply plugin: 'com.google.gms.google-services' // Google Play services Gradle plugin
Bước 4: Thêm phần phụ thuộc Firebase
Trong lớp học lập trình này, lý do chính để tích hợp Firebase là đưa ra cách để tạo và quản lý người dùng. Để thực hiện việc này, bạn cần thêm một thư viện Firebase cho phép bạn triển khai hoạt động đăng nhập.
- Thêm phần phụ thuộc sau vào tệp
build.gradle (Module:app)
để bạn có thể sử dụng SDK trong ứng dụng của mình. SDKfirebase-auth
cho phép quản lý người dùng đã xác thực ứng dụng của bạn.
app/build.gradle:
implementation 'com.firebaseui:firebase-ui-auth:5.0.0'
- Đồng bộ hóa dự án của bạn với các tệp gradle để đảm bảo rằng ứng dụng của bạn có tất cả phần phụ thuộc. Nếu bạn không được nhắc, hãy chọn File > Sync Project with Gradle Files (Tệp Gradle) trong Android Studio hoặc từ thanh công cụ.
Bước 5: Chạy ứng dụng và kiểm tra mã
- Chạy ứng dụng trên trình mô phỏng hoặc thiết bị thực để đảm bảo rằng môi trường của bạn đã được thiết lập để bắt đầu phát triển.
Nếu thành công, bạn sẽ thấy màn hình chính hiển thị một thông tin thú vị về Android và nút đăng nhập ở góc trên cùng bên trái. Việc nhấn vào nút đăng nhập chưa thực hiện hành động nào.
Nhìn chung, đây là một ứng dụng hoạt động đơn lẻ với nhiều mảnh. MainFragment
chứa tất cả giao diện người dùng mà bạn thấy ở màn hình dưới đây. (Bạn sẽ làm việc với LoginFragment
và SettingsFragment
trong một lớp học lập trình tiếp theo.)
- Làm quen với mã. Cụ thể, hãy lưu ý:
FirebaseUserLiveData
là lớp mà bạn sẽ triển khai để quan sát người dùng Firebase hiện tại được liên kết với ứng dụng. Bạn sẽ sử dụng phiên bảnFirebaseAuth
làm điểm truy cập để lấy thông tin người dùng này trong một bước sau.MainFragment
gắn vớiLoginViewModel
.LoginViewModel
là lớp bạn sẽ triển khai để sử dụngFirebaseUserLiveData
nhằm tạo biếnauthenticationState
. Khi dùng biếnauthenticationState
này,MainFragment
có thể quan sát giá trị để cập nhật giao diện người dùng cho phù hợp.
Ở bước này, bạn sẽ sử dụng Bảng điều khiển của Firebase để thiết lập các phương thức xác thực mà bạn muốn ứng dụng của mình hỗ trợ. Đối với lớp học lập trình này, bạn sẽ tập trung vào việc cho phép người dùng đăng nhập bằng địa chỉ email mà họ cung cấp hoặc Tài khoản Google của họ.
- Chuyển đến bảng điều khiển của Firebase. (Lưu ý: Nếu bạn vẫn đang trong quy trình Thêm Firebase, hãy nhấp vào dấu X ở góc trên cùng bên trái để quay lại bảng điều khiển.
- Hãy chọn dự án nếu bạn chưa tham gia dự án đó.
- Mở thanh điều hướng bên trái và chọn Phát triển &g; Xác thực.
- Chọn thẻ Phương thức đăng nhập trên thanh điều hướng ở phía trên cùng.
- Nhấp vào hàng Email/Mật khẩu.
- Trong cửa sổ bật lên, hãy gạt nút chuyển Đã bật sang rồi nhấp vào Lưu.
- Tương tự như vậy, hãy nhấp vào hàng Google.
- Bật/tắt nút chuyển Đã bật, nhập Email hỗ trợ dự án rồi nhấp vào Lưu.
Trong tác vụ này, bạn sẽ triển khai tính năng đăng nhập cho người dùng của mình.
- Mở
MainFragment.kt
. - Trong bố cục của
MainFragment
, hãy chú ý đếnauth_button
. Tính năng này hiện không được thiết lập để xử lý bất kỳ hoạt động đầu vào nào của người dùng. - Trong
onViewCreated(),
, hãy thêmonClickListener
vàoauth_button
để gọilaunchSignInFlow()
.
MainFragment.kt
binding.authButton.setOnClickListener { launchSignInFlow() }
- Tìm phương thức
launchSignInFlow()
trongMainFragment.kt
. Kết quả này hiện cóTODO
. - Hoàn thành hàm
launchSignInFlow()
như trình bày bên dưới.
MainFragment.kt
private fun launchSignInFlow() {
// Give users the option to sign in / register with their email or Google account.
// If users choose to register with their email,
// they will need to create a password as well.
val providers = arrayListOf(
AuthUI.IdpConfig.EmailBuilder().build(), AuthUI.IdpConfig.GoogleBuilder().build()
// This is where you can provide more ways for users to register and
// sign in.
)
// Create and launch sign-in intent.
// We listen to the response of this activity with the
// SIGN_IN_REQUEST_CODE
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(providers)
.build(),
MainFragment.SIGN_IN_REQUEST_CODE
)
}
Điều này cho phép người dùng đăng ký và đăng nhập bằng địa chỉ email hoặc Tài khoản Google của họ. Nếu người dùng chọn đăng ký bằng địa chỉ email của mình, thì tổ hợp email và mật khẩu họ tạo là duy nhất cho ứng dụng của bạn. Điều đó có nghĩa là họ có thể đăng nhập vào ứng dụng của bạn bằng kết hợp địa chỉ email và mật khẩu, nhưng điều đó không có nghĩa là họ cũng có thể đăng nhập vào bất kỳ ứng dụng Firebase nào khác được hỗ trợ bằng thông tin đăng nhập tương tự.
- Trong
MainFragment.kt
, bạn có thể theo dõi kết quả của quá trình đăng nhập bằng cách triển khai phương thứconActivityResult()
, như minh họa bên dưới. Vì bạn đã bắt đầu quá trình đăng nhập bằngSIGN_IN_REQUEST_CODE
, nên bạn cũng có thể nghe kết quả của quá trình đăng nhập bằng cách lọc cho biết khi nàoSIGN_IN_REQUEST_CODE
được chuyển lại choonActivityResult()
. Hãy bắt đầu bằng cách cung cấp một số câu lệnh nhật ký để biết người dùng đã đăng nhập thành công hay chưa.
MainFragment.kt
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == SIGN_IN_REQUEST_CODE) {
val response = IdpResponse.fromResultIntent(data)
if (resultCode == Activity.RESULT_OK) {
// User successfully signed in
Log.i(TAG, "Successfully signed in user ${FirebaseAuth.getInstance().currentUser?.displayName}!")
} 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.
Log.i(TAG, "Sign in unsuccessful ${response?.error?.errorCode}")
}
}
}
Bây giờ, ứng dụng của bạn có thể xử lý việc đăng ký và đăng nhập cho người dùng!
- Chạy ứng dụng và xác minh rằng nhấn vào nút Đăng nhập sẽ hiển thị màn hình đăng nhập.
- Giờ đây, bạn có thể đăng nhập bằng địa chỉ email và mật khẩu hoặc bằng Tài khoản Google của mình.
- Sẽ không có thay đổi nào trong giao diện người dùng sau khi bạn đăng nhập (bạn sẽ triển khai cập nhật giao diện người dùng trong bước tiếp theo), nhưng nếu mọi thứ đang hoạt động chính xác, bạn sẽ thấy thông báo nhật ký
Successfully signed in user ${your name}!
sau khi thực hiện quy trình đăng ký. - Bạn cũng có thể truy cập bảng điều khiển của Firebase và chuyển đến Phát triển > Xác thực > Người dùng để kiểm tra xem ứng dụng hiện đã có một người dùng đã đăng ký hay chưa.
- Xin lưu ý rằng khi người dùng tạo một tài khoản cho ứng dụng của bạn, tài khoản này sẽ chỉ liên kết với ứng dụng của bạn chứ không liên kết với bất kỳ ứng dụng nào sử dụng Firebase cho chức năng đăng nhập.
Trong tác vụ này, bạn sẽ triển khai việc cập nhật giao diện người dùng dựa trên trạng thái xác thực. Khi người dùng đăng nhập, bạn có thể cá nhân hóa màn hình chính của họ bằng cách hiển thị tên của họ. Bạn cũng sẽ cập nhật nút Đăng nhập thành nút Đăng xuất khi người dùng đăng nhập.
- Mở lớp học
FirebaseUserLiveData.kt
mà bạn đã tạo cho bạn. Điều đầu tiên bạn cần làm là cung cấp cho các lớp khác trong ứng dụng một cách để biết thời điểm người dùng đăng nhập hoặc đăng xuất. Tuy nhiên, lớp này sẽ không thực hiện bất kỳ hành động nào vì giá trị củaLiveData
không được cập nhật. - Vì bạn đang sử dụng thư viện
FirebaseAuth
, nên bạn có thể theo dõi các thay đổi đối với người dùng đã đăng nhập bằng lệnh gọi lạiFirebaseUser.AuthStateListener
được triển khai cho bạn như một phần của thư viện FirebaseUI. Lệnh gọi lại này được kích hoạt bất cứ khi nào người dùng đăng nhập hoặc đăng xuất khỏi ứng dụng. - Xin lưu ý rằng
FirebaseUserLiveData.kt
xác định biếnauthStateListener
. Bạn sẽ dùng biến này để lưu trữ giá trị củaLiveData
. BiếnauthStateListener
đã được tạo để bạn có thể bắt đầu và dừng nghe đúng cách các thay đổi ở trạng thái xác thực dựa trên trạng thái của ứng dụng. Ví dụ: nếu người dùng đặt ứng dụng vào nền, thì ứng dụng nên dừng nghe các thay đổi về trạng thái xác thực để ngăn chặn mọi sự cố rò rỉ bộ nhớ. - Cập nhật
authStateListener
để giá trị củaFirebaseUserLiveData
tương ứng với người dùng Firebase hiện tại.
FirebaseUserLiveData.kt
private val authStateListener = FirebaseAuth.AuthStateListener { firebaseAuth ->
value = firebaseAuth.currentUser
}
- Mở
LoginViewModel.kt
. - Trong
LoginViewModel.kt
, hãy tạo biếnauthenticationState
dựa trên đối tượngFirebaseUserLiveData
mà bạn vừa triển khai. Bằng cách tạo biếnauthenticationState
này, các lớp khác hiện có thể truy vấn về việc liệu người dùng có đăng nhập thông quaLoginViewModel
hay không.
LoginViewModel.kt
val authenticationState = FirebaseUserLiveData().map { user ->
if (user != null) {
AuthenticationState.AUTHENTICATED
} else {
AuthenticationState.UNAUTHENTICATED
}
}
- Mở
MainFragment.kt.
- Trong
MainFragment.kt
\39;sobserveAuthenticationState()
, bạn có thể dùng biếnauthenticationState
mà bạn vừa thêm vàoLoginViewModel
và thay đổi giao diện người dùng cho phù hợp. Nếu có một người dùng đã đăng nhập,authButton
sẽ hiển thị Đăng xuất.
MainFragment.kt
private fun observeAuthenticationState() {
val factToDisplay = viewModel.getFactToDisplay(requireContext())
viewModel.authenticationState.observe(viewLifecycleOwner, Observer { authenticationState ->
when (authenticationState) {
LoginViewModel.AuthenticationState.AUTHENTICATED -> {
binding.authButton.text = getString(R.string.logout_button_text)
binding.authButton.setOnClickListener {
// TODO implement logging out user in next step
}
// TODO 2. If the user is logged in,
// you can customize the welcome message they see by
// utilizing the getFactWithPersonalization() function provided
}
else -> {
// TODO 3. Lastly, if there is no logged-in user,
// auth_button should display Login and
// launch the sign in screen when clicked.
}
}
})
}
- Nếu người dùng đăng nhập, bạn cũng có thể tùy chỉnh thư chào mừng mà họ nhìn thấy bằng cách sử dụng hàm
getFactWithPersonalization()
được cung cấp trongMainFragment
.
MainFragment.kt
binding.welcomeText.text = getFactWithPersonalization(factToDisplay)
- Cuối cùng, nếu không có người dùng đăng nhập nào (khi
authenticationState
không phải là người dùngLoginViewModel.AuthenticationState.AUTHENTICATED
), thìauth_button
cần hiển thị Thông tin đăng nhập và mở màn hình đăng nhập khi người dùng nhấp vào. Bạn cũng không nên cá nhân hóa thông báo hiển thị.
MainFragment.kt
binding.authButton.text = getString(R.string.login_button_text)
binding.authButton.setOnClickListener { launchSignInFlow() }
binding.welcomeText.text = factToDisplay
Với tất cả các bước đã hoàn tất, phương thức observeAuthenticationState()
cuối cùng của bạn sẽ trông giống như mã bên dưới.
MainFragment.kt
private fun observeAuthenticationState() {
val factToDisplay = viewModel.getFactToDisplay(requireContext())
viewModel.authenticationState.observe(viewLifecycleOwner, Observer { authenticationState ->
// TODO 1. Use the authenticationState variable you just added
// in LoginViewModel and change the UI accordingly.
when (authenticationState) {
// TODO 2. If the user is logged in,
// you can customize the welcome message they see by
// utilizing the getFactWithPersonalization() function provided
LoginViewModel.AuthenticationState.AUTHENTICATED -> {
binding.welcomeText.text = getFactWithPersonalization(factToDisplay)
binding.authButton.text = getString(R.string.logout_button_text)
binding.authButton.setOnClickListener {
// TODO implement logging out user in next step
}
}
else -> {
// TODO 3. Lastly, if there is no logged-in user,
// auth_button should display Login and
// launch the sign in screen when clicked.
binding.welcomeText.text = factToDisplay
binding.authButton.text = getString(R.string.login_button_text)
binding.authButton.setOnClickListener {
launchSignInFlow()
}
}
}
})
}
- Chạy ứng dụng của bạn. Giao diện người dùng sẽ cập nhật theo việc người dùng có đăng nhập hay không. Nếu mọi thứ hoạt động bình thường và bạn đã đăng nhập, màn hình chính giờ đây sẽ chào đón bạn bằng tên của bạn ngoài việc hiển thị dữ kiện Android. Nút Đăng nhập cũng sẽ hiển thị Đăng xuất.
Trong tác vụ này, bạn sẽ triển khai tính năng đăng xuất.
Do ứng dụng cho phép người dùng đăng nhập nên ứng dụng cũng phải cung cấp cho họ một cách đăng xuất. Dưới đây là ví dụ về cách đăng xuất người dùng chỉ bằng một dòng mã:
AuthUI.getInstance().signOut(requireContext())
- Mở
MainFragment.kt
. - Trong
observeAuthenticationState()
củaMainFragment.kt
, hãy thêm logic đăng xuất đểauth_button
hoạt động chính xác khi có một người dùng đã đăng nhập. Kết quả cuối cùng của phương thức trông giống như mã bên dưới.
MainFragment.kt
private fun observeAuthenticationState() {
val factToDisplay = viewModel.getFactToDisplay(requireContext())
viewModel.authenticationState.observe(viewLifecycleOwner, Observer { authenticationState ->
when (authenticationState) {
LoginViewModel.AuthenticationState.AUTHENTICATED -> {
binding.welcomeText.text = getFactWithPersonalization(factToDisplay)
binding.authButton.text = getString(R.string.logout_button_text)
binding.authButton.setOnClickListener {
AuthUI.getInstance().signOut(requireContext())
}
}
else -> {
binding.welcomeText.text = factToDisplay
binding.authButton.text = getString(R.string.login_button_text)
binding.authButton.setOnClickListener {
launchSignInFlow()
}
}
}
})
}
- Chạy ứng dụng.
- Nhấn vào nút Đăng xuất và xác minh rằng người dùng đã đăng xuất và trạng thái của nút sẽ thay đổi thành Đăng nhập.
Bạn có thể tìm thấy phiên bản cuối cùng của ứng dụng hoàn chỉnh tại đây https://github.com/googlecodelabs/android-kotlin-login.
Trong lớp học lập trình này, bạn đã tìm hiểu:
- Cách thêm Firebase vào dự án bằng cách thêm các phần phụ thuộc cần thiết vào tệp gradle của bạn và thiết lập dự án trong bảng điều khiển của Firebase.
- Cách triển khai tính năng đăng nhập cho ứng dụng bằng thư viện FirebaseUI và chỉ định cách bạn muốn cho phép người dùng đăng nhập. Xin lưu ý rằng mọi tài khoản mà người dùng tạo trong ứng dụng của bạn chỉ dành riêng cho ứng dụng của bạn và không được chia sẻ với tất cả các ứng dụng sử dụng Firebase cho chức năng đăng nhập.
- Cách quan sát trạng thái xác thực hiện tại của ứng dụng bằng
LiveData
. - Cách đăng xuất người dùng.
Lớp học lập trình này trình bày những thông tin cơ bản về cách hỗ trợ tính năng đăng nhập cho một ứng dụng Android.
Trong lớp học lập trình này, bạn cho phép người dùng đăng ký và đăng nhập bằng địa chỉ email của họ. Tuy nhiên, với thư viện FirebaseUI, bạn cũng có thể hỗ trợ các phương thức xác thực khác như đăng nhập bằng số điện thoại. Để tìm hiểu thêm về các chức năng của thư viện FirebaseUI và cách sử dụng các chức năng khác của thư viện, hãy xem các tài nguyên sau:
Để biết thêm về các phương pháp hay nhất liên quan đến việc đăng nhập, hãy xem các tài nguyên khác sau đây:
Lớp học lập trình:
Tài liệu dành cho nhà phát triển Android:
Video:
Để xem đường liên kết đến các lớp học lập trình khác trong khóa học này, hãy xem trang đích Nâng cao cho Android trong Kotlin.