Đăng nhập vào Android bằng FirebaseUI

Lớp học lập trình này nằm trong khoá học Kotlin nâng cao cho Android. Bạn sẽ nhận được nhiều giá trị nhất qua khoá học này nếu thực hiện các lớp học lập trình theo trình tự, nhưng đó không phải là yêu cầu bắt buộc. Tất cả các lớp học lập trình của khoá học đều được liệt kê trên trang đích của lớp học lập trình Kiến thức nâng cao về cách tạo ứng dụng Android bằng Kotlin.

Giới thiệu

Khi tạo một ứng dụng Android, bạn có thể nhận được nhiều lợi ích khi hỗ trợ người dùng đă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ọ nhiều cách hơn để tương tác với ứng dụng.

Với tài khoản được cá nhân hoá, người dùng có thể tuỳ chỉnh trải nghiệm trong ứng dụng, tương tác với những người dùng khác, đồng thời dữ liệu của họ sẽ được duy trì và chuyển nếu họ đang sử dụng ứng dụng trên một 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 kiến thức cơ bản về cách hỗ trợ đăng nhập cho ứng dụng 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 giúp các nhà phát triển muốn xây dựng một quy trình đăng nhập dễ dàng hơn 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ó

  • Nguyên tắc cơ bản về cách tạo ứ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ợ đăng nhập cho ứng dụng Android
  • Cách theo dõi 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 vào ứng dụng của bạn.
  • Triển khai tính năng đăng nhập.
  • Thêm các nội dung tuỳ chỉnh trong ứng dụng cho những người dùng đã đăng nhập.
  • Triển khai tính năng đăng xuất người dùng.

Tìm hiểu thêm về LiveData và ViewModel

Đối với ứng dụng trong lớp học lập trình này, bạn cần nắm được kiến thức cơ bản về LiveData và ViewModel. Đọc phần tổng quan về LiveDataViewModel 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 khoá học Phát triển ứng dụng Android bằng Kotlin để tìm hiểu về các chủ đề cơ bản về Android mà bạn sẽ gặp phải trong lớp học lập trình này. Khoá học đó có cả dưới dạng khoá học trên Udacitykhoá học trên codelabs.

Trong lớp học lập trình này, bạn sẽ tạo 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ế về Android được hiển thị sẽ có lời chào dành cho người dùng để tăng thêm nét cá nhân hoá.

Để tải ứng dụng mẫu xuống, bạn có thể:

Tải tệp Zip xuống

... hoặc sao chép kho lưu trữ GitHub từ dòng lệnh bằng cách sử dụng lệnh sau và chuyển sang nhánh start của kho lưu trữ:

$  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 để dùng Firebase, nên ứng dụng khởi động cần một số bước thiết lập để có thể tạo và chạy. Bạn sẽ thực hiện việc đó trong bước tiếp theo của lớp học lập trình.

Bước 1: Tạo dự án Firebase

Trước khi 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.

  1. Trong bảng điều khiển của Firebase, hãy nhấp vào Thêm dự án.
  2. Chọn hoặc nhập Tên dự án. Bạn có thể đặt tên cho dự án của mình theo ý muốn, nhưng hãy cố gắng chọn một tên phù hợp với ứng dụng mà bạn đang tạo.
  3. Nhấp vào Tiếp tục.
  4. Bạn có thể bỏ qua bước thiết lập Google Analytics và chọn mục Không phải bây giờ.
  5. Nhấp vào Tạo dự án để hoàn tất việc thiết lập dự án Firebase.

Bước 2: Đăng ký ứng dụng của bạn với Firebase

Giờ đây, khi đã có một dự án Firebase, bạn có thể thêm ứng dụng Android của mình vào dự án đó.

  1. Ở giữa trang tổng quan về dự án của bảng điều khiển Firebase, hãy nhấp vào biểu tượng Android để chạy quy trình thiết lập.
  2. 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ã nhận dạng mà ứng dụng của bạn đ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 với dự án Firebase.
  1. Đôi khi, mã ứng dụng còn được gọi là tên gói.
  2. Tìm mã ứng dụng này trong tệp Gradle của mô-đun (cấp ứng dụng), thường là app/build.gradle (ví dụ về mã: com.yourcompany.yourproject).
  3. Nhập SHA-1 của chứng chỉ gỡ lỗi để ký. Bạn có thể tạo khoá này bằng cách nhập lệnh sau vào cửa sổ dòng lệnh.
keytool -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v -storepass android
  1. 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 của bạn

Thêm tệp cấu hình Firebase Android vào ứng dụng của bạn:

  1. Nhấp vào Tải google-services.json xuống để lấy tệp cấu hình Firebase Android (google-services.json).
  • Bạn có thể tải lại tệp cấu hình Firebase Android bất cứ lúc nào.
  • Đảm bảo rằng tệp cấu hình không có thêm ký tự và chỉ được đặt tên là google-services.json
  1. 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

  1. Để bật các sản phẩm của Firebase trong ứng dụng, hãy thêm trình bổ trợ google-services vào tệp Gradle.
  1. 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ụ Google vào. Đồng thời, hãy kiểm tra để đảm bảo bạn 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
    // ...
  }
}
  1. Trong tệp Gradle của 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 của Firebase

Trong lớp học lập trình này, lý do chính để tích hợp Firebase là để có cách tạo và quản lý người dùng. Để làm việc này, bạn cần thêm một thư viện Firebase cho phép bạn triển khai tính năng đăng nhập.

  1. Thêm phần phụ thuộc sau vào tệp build.gradle (Module:app) để bạn có thể dùng SDK trong ứng dụng. SDK firebase-auth cho phép quản lý người dùng đã xác thực của ứng dụng.

app/build.gradle:

implementation 'com.firebaseui:firebase-ui-auth:5.0.0'
  1. Đồng bộ hoá 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ó sẵn tất cả các phần phụ thuộc. Nếu không được nhắc, hãy chọn File > Sync Project with Gradle Files (Tệp > Đồng bộ hoá dự án với các tệp Gradle) trong Android Studio hoặc trên thanh công cụ.

Bước 5: Chạy ứng dụng và kiểm tra mã

  1. Chạy ứng dụng trên trình mô phỏng hoặc thiết bị thực để đảm bảo bạn đã thiết lập thành công môi trường để 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à một nút đăng nhập ở góc trên cùng bên trái. Hiện tại, việc nhấn vào nút đăng nhập vẫn chưa có tác dụng.

Nhìn chung, đây là một ứng dụng có một hoạt động duy nhất với nhiều mảnh. MainFragment chứa tất cả giao diện người dùng mà bạn thấy trên màn hình bên dưới. (Bạn sẽ làm việc với LoginFragmentSettingsFragment trong một lớp học lập trình tiếp theo.)

  1. Làm quen với đoạn mã. Cụ thể, hãy lưu ý:
  • FirebaseUserLiveData là lớp mà bạn sẽ triển khai để theo dõi 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 thực thể FirebaseAuth làm điểm truy cập để lấy thông tin người dùng này ở bước sau.
  • MainFragment được liên kết với LoginViewModel. LoginViewModel là lớp mà bạn sẽ triển khai để sử dụng FirebaseUserLiveData nhằm tạo biến authenticationState. Khi sử dụng biến authenticationState 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.

Trong bước này, bạn sẽ sử dụng Bảng điều khiển Firebase để thiết lập các phương thức xác thực mà bạn muốn ứng dụng hỗ trợ. Trong 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 bằng Tài khoản Google của họ.

  1. 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.
  2. Chọn dự án của bạn, nếu bạn chưa ở trong dự án của mình.
  3. Mở bảng điều hướng bên trái rồi chọn Phát triển > Xác thực.

  1. Chọn thẻ Phương thức đăng nhập trên thanh điều hướng trên cùng.

  1. Nhấp vào hàng Email/Mật khẩu.
  2. Trong cửa sổ bật lên, hãy bật nút chuyển Đã bật rồi nhấp vào Lưu.
  3. Tương tự, hãy nhấp vào hàng Google.
  4. Bật nút chuyển Đã bật, nhập Email hỗ trợ dự án rồi nhấp vào Lưu.

Trong nhiệm vụ này, bạn sẽ triển khai tính năng đăng nhập cho người dùng.

  1. Mở MainFragment.kt.
  2. Trong bố cục của MainFragment, hãy lưu ý đến auth_button. Hiện tại, ứng dụng này chưa được thiết lập để xử lý mọi dữ liệu đầu vào của người dùng.
  3. Trong onViewCreated(),, hãy thêm onClickListener vào auth_button để gọi launchSignInFlow().

MainFragment.kt

binding.authButton.setOnClickListener { launchSignInFlow() }
  1. Tìm phương thức launchSignInFlow() trong MainFragment.kt. Thư mục này hiện chứa một TODO.
  2. Hoàn tất hàm launchSignInFlow() như minh hoạ 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, thì tổ hợp email và mật khẩu mà họ tạo sẽ là duy nhất cho ứng dụng của bạn. Điều đó có nghĩa là họ sẽ có thể đăng nhập vào ứng dụng của bạn bằng tổ hợp email và mật khẩu, nhưng không có nghĩa là họ cũng có thể đăng nhập vào bất kỳ ứng dụng nào khác được Firebase hỗ trợ bằng chính thông tin đăng nhập đó.

  1. Trong MainFragment.kt, bạn có thể theo dõi kết quả của quy trình đăng nhập bằng cách triển khai phương thức onActivityResult(), như minh hoạ bên dưới. Vì bạn đã bắt đầu quy trình đăng nhập bằng SIGN_IN_REQUEST_CODE, nên bạn cũng có thể nghe kết quả của quy trình đăng nhập bằng cách lọc thời điểm SIGN_IN_REQUEST_CODE được truyền trở lại onActivityResult(). Bắt đầu bằng cách thêm 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}")
       }
   }
}

Giờ đây, ứng dụng của bạn có thể xử lý việc đăng ký và đăng nhập người dùng!

  1. Chạy ứng dụng rồi xác minh rằng thao tác nhấn vào nút Login (Đăng nhập) sẽ hiển thị màn hình đăng nhập.
  2. 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.
  3. 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 việc cập nhật giao diện người dùng ở bước tiếp theo), nhưng nếu mọi thứ hoạt động bình thường, 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ý.
  4. Bạn cũng có thể chuyển đến bảng điều khiển Firebase rồi 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 không.
  5. Xin lưu ý rằng khi người dùng tạo tài khoản cho ứng dụng của bạn, tài khoản này chỉ được liên kết cụ thể 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 nhiệm 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 hoá 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.

  1. Mở lớp FirebaseUserLiveData.kt đã được tạo cho bạn. Điều đầu tiên bạn cần làm là cung cấp một cách để các lớp khác trong ứng dụng biết khi nào người dùng đã đăng nhập hoặc đăng xuất. Tuy nhiên, lớp này vẫn chưa thực hiện hành động nào vì giá trị của LiveData chưa được cập nhật.
  2. Vì đang dùng thư viện FirebaseAuth, 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ại FirebaseUser.AuthStateListener được triển khai cho bạn trong thư viện FirebaseUI. Lệnh gọi lại này sẽ đượ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 của bạn.
  3. Lưu ý rằng FirebaseUserLiveData.kt xác định biến authStateListener. Bạn sẽ dùng biến này để lưu trữ giá trị của LiveData. Biến authStateListener được tạo để bạn có thể bắt đầu và dừng theo dõi các thay đổi về trạng thái uỷ quyền một cách thích hợp dựa trên trạng thái của ứng dụng. Ví dụ: nếu người dùng đưa ứng dụng vào chế độ nền, thì ứng dụng sẽ ngừng theo dõi các thay đổi về trạng thái uỷ quyền để ngăn chặn mọi rò rỉ bộ nhớ có thể xảy ra.
  4. Cập nhật authStateListener để giá trị của FirebaseUserLiveData 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
}
  1. Mở LoginViewModel.kt.
  2. Trong LoginViewModel.kt, hãy tạo một biến authenticationState dựa trên đối tượng FirebaseUserLiveData mà bạn vừa triển khai. Bằng cách tạo biến authenticationState này, các lớp khác hiện có thể truy vấn xem người dùng đã đăng nhập hay chưa thông qua LoginViewModel.

LoginViewModel.kt

val authenticationState = FirebaseUserLiveData().map { user ->
   if (user != null) {
       AuthenticationState.AUTHENTICATED
   } else {
       AuthenticationState.UNAUTHENTICATED
   }
}
  1. Mở MainFragment.kt.
  2. Trong observeAuthenticationState() của MainFragment.kt, bạn có thể dùng biến authenticationState mà bạn vừa thêm vào LoginViewModel và thay đổi giao diện người dùng cho phù hợp. Nếu có 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.
           }
       }
   })
}
  1. Nếu người dùng đã đăng nhập, bạn cũng có thể tuỳ chỉnh thông điệp chào mừng mà họ thấy bằng cách sử dụng hàm getFactWithPersonalization() có trong MainFragment.

MainFragment.kt

binding.welcomeText.text = getFactWithPersonalization(factToDisplay)
  1. Cuối cùng, nếu không có người dùng nào đăng nhập (khi authenticationState không phải là LoginViewModel.AuthenticationState.AUTHENTICATED), thì auth_button sẽ hiển thị Đăng nhập và khởi chạy màn hình đăng nhập khi người dùng nhấp vào. Thông báo hiển thị cũng không được cá nhân hoá.

MainFragment.kt

binding.authButton.text = getString(R.string.login_button_text)
binding.authButton.setOnClickListener { launchSignInFlow() }
binding.welcomeText.text = factToDisplay

Sau khi hoàn tất tất cả các bước, phương thức observeAuthenticationState() cuối cùng của bạn sẽ có dạ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()
               }
           }
       }
   })
}
  1. Chạy ứng dụng của bạn. Giao diện người dùng sẽ cập nhật tuỳ theo việc người dùng đã đăng nhập hay chưa. Nếu mọi thứ hoạt động bình thường và bạn đã đăng nhập, thì màn hình chính sẽ chào bạn bằng tên của bạn, ngoài ra còn hiển thị một thông tin về Android. Giờ đây, nút Login (Đăng nhập) cũng sẽ hiển thị Logout (Đăng xuất).

Trong nhiệm vụ này, bạn sẽ triển khai tính năng đăng xuất.

Vì ứ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ọ cách đăng xuất. Sau đâ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())
  1. Mở MainFragment.kt.
  2. Trong observeAuthenticationState() của MainFragment.kt, hãy thêm logic đăng xuất để auth_button hoạt động chính xác khi có người dùng đã đăng nhập. Kết quả cuối cùng của phương thức này sẽ có dạ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()
               }
           }
       }
   })
}
  1. Chạy ứng dụng.
  2. Nhấn vào nút Đăng xuất và xác minh rằng người dùng đã đăng xuất, đồng thời trạng thái của nút này 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 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 đó 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 theo dõi 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 kiến thức cơ bản về cách hỗ trợ đă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, chẳng hạn 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 tận dụng các chức năng khác mà thư viện này cung cấp, hãy tham khảo 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 hoạt động đă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:

Để biết đường liên kết đến các lớp học lập trình khác trong khoá học này, hãy xem trang đích của các lớp học lập trình trong khoá học Kiến thức nâng cao về cách tạo ứng dụng Android bằng Kotlin.