Tính năng Khôi phục thông tin đăng nhập của Credential Manager cho phép người dùng khôi phục tài khoản ứng dụng khi thiết lập một thiết bị mới. API này đang ở giai đoạn xem trước dành cho nhà phát triển và có trên tất cả các thiết bị chạy Android 9 trở lên và Dịch vụ Google Play (GMS) Core phiên bản 242200000 trở lên. Sau đây là các lợi ích của tính năng Khôi phục thông tin đăng nhập:
- Trải nghiệm người dùng liền mạch: Người dùng có thể khôi phục tài khoản ứng dụng mà không cần đăng nhập thủ công vào từng ứng dụng.
- Tăng mức độ tương tác của người dùng: Người dùng có nhiều khả năng tiếp tục sử dụng ứng dụng của bạn hơn nếu họ có thể khôi phục tài khoản khi thiết lập một thiết bị mới.
- Giảm nỗ lực phát triển: tính năng Khôi phục thông tin xác thực được tích hợp với Trình quản lý thông tin xác thực, vì vậy, những nhà phát triển đã hỗ trợ khoá truy cập có thể thêm các chức năng khôi phục thông tin xác thực.
Cách hoạt động
Bạn có thể sử dụng Restore Credentials (Khôi phục thông tin đăng nhập) để tạo, nhận và xoá thông tin đăng nhập có liên quan.
- Tạo Restore Credential: Khi người dùng đăng nhập vào ứng dụng của bạn, hãy tạo một Restore Credential được liên kết với tài khoản của họ. Thông tin đăng nhập này được lưu trữ cục bộ và đồng bộ hoá với đám mây nếu người dùng đã bật tính năng Sao lưu của Google và có sẵn tính năng mã hoá hai đầu (các ứng dụng có thể chọn không đồng bộ hoá với đám mây)
- Nhận thông tin xác thực khôi phục: Khi người dùng thiết lập một thiết bị mới, ứng dụng của bạn có thể yêu cầu thông tin xác thực khôi phục từ Trình quản lý thông tin xác thực. Điều này cho phép bạn tự động đăng nhập người dùng mà không cần họ nhập thêm thông tin.
- Xoá thông tin đăng nhập khôi phục: Khi người dùng đăng xuất khỏi ứng dụng, bạn nên xoá thông tin đăng nhập khôi phục được liên kết.
Tính năng Khôi phục thông tin xác thực có thể tích hợp mượt mà với các hệ thống phụ trợ đã triển khai khoá truy cập. Khả năng tương thích này xuất phát từ việc cả khoá truy cập và khoá khôi phục (loại thông tin đăng nhập mà tính năng Khôi phục thông tin đăng nhập sử dụng) đều tuân thủ cùng một quy cách kỹ thuật cơ bản. Việc điều chỉnh này đảm bảo rằng quy trình Khôi phục thông tin đăng nhập có thể truy xuất và khôi phục hiệu quả thông tin đăng nhập của người dùng được lưu trữ trong các hệ thống hỗ trợ khoá truy cập, mang lại trải nghiệm nhất quán và thân thiện với người dùng trên nhiều nền tảng và phương thức xác thực.
Triển khai
Bạn có thể sử dụng Restore Credentials API thông qua thư viện Jetpack Trình quản lý thông tin xác thực. Để bắt đầu, hãy làm theo các bước sau:
Thêm phần phụ thuộc Credential Manager vào dự án của bạn.
// build.gradle.kts implementation("androidx.credentials:credentials:1.5.0-alpha03")
Tạo đối tượng
CreateRestoreCredentialRequest
.Gọi phương thức
createCredential()
trên đối tượngCredentialManager
.val credentialManager = CredentialManager.create(context) // On a successful authentication create a Restore Key // Pass in the context and CreateRestoreCredentialRequest object val response = credentialManager.createCredential(context, createRestoreRequest)
Thông tin xác thực khôi phục được tạo này là một loại thông tin xác thực webauthn và được gọi là khoá khôi phục.
Khi người dùng thiết lập một thiết bị mới, hãy gọi phương thức
getCredential()
trên đối tượngCredentialManager
.// Fetch the Authentication JSON from server val authenticationJson = fetchAuthenticationJson() // Create the GetRestoreCredentialRequest object val options = GetRestoreCredentialOption(authenticationJson) val getRequest = GetCredentialRequest(listOf(options)) // The restore key can be fetched in two scenarios to // 1. On the first launch of app on the device, fetch the Restore Key // 2. In the onRestore callback (if the app implements the Backup Agent) val response = credentialManager.getCredential(context, getRequest)
Khi người dùng đăng xuất khỏi ứng dụng, hãy gọi phương thức
clearCredentialState()
trên đối tượngCredentialManager
.// Create a ClearCredentialStateRequest object val clearRequest = ClearCredentialStateRequest(TYPE_CLEAR_RESTORE_CREDENTIAL) // On user log-out, clear the restore key val response = credentialManager.clearCredentialState(clearRequest)
Nếu bạn đang sử dụng một tác nhân sao lưu, hãy thực hiện phần getCredential
trong lệnh gọi lại onRestore
. Điều này đảm bảo rằng thông tin đăng nhập của ứng dụng được khôi phục ngay sau khi dữ liệu ứng dụng được khôi phục.
Câu hỏi thường gặp
Câu hỏi 1. Khoá khôi phục và khoá truy cập khác nhau ở điểm nào?
Khoá khôi phục hoạt động tương tự như khoá truy cập nhưng được thiết kế riêng cho việc khôi phục tài khoản trên thiết bị mới. Khi bạn sử dụng một trình quản lý mật khẩu như Trình quản lý mật khẩu của Google để xác thực, các khoá truy cập và mật khẩu mà bạn có thể sử dụng sẽ xuất hiện, còn khoá khôi phục thì không vì khoá này không dùng cho hoạt động đăng nhập thông thường.
Câu hỏi 2. Khoá khôi phục có phải là thông tin xác thực dùng một lần không?
Không, khoá khôi phục không phải là thông tin đăng nhập dùng một lần. Credential Manager (Trình quản lý thông tin đăng nhập) không trạng thái và không nhận biết được hoạt động của người dùng, vì vậy, công cụ này không thể tự động xoá khoá sau khi sử dụng.
Khoá khôi phục chỉ bị xoá trong các trường hợp sau:
- Hành động ở cấp hệ thống: Người dùng gỡ cài đặt ứng dụng hoặc xoá dữ liệu của ứng dụng.
- Cuộc gọi cấp ứng dụng: Bạn xoá khoá theo phương thức lập trình bằng cách gọi
CredentialManager#clearCredentialState()
khi xử lý việc đăng xuất của người dùng trong mã của ứng dụng.
Câu hỏi 3. Tính năng Khôi phục thông tin xác thực có chỉ hoạt động trên thiết bị mới không?
Có. Tính năng này được thiết kế để thiết lập ban đầu cho một thiết bị mới chạy Android, vì tính năng này được liên kết trực tiếp với chức năng Sao lưu và khôi phục của hệ thống.
Câu hỏi 4. Tôi có thể sử dụng API Khôi phục thông tin đăng nhập để đăng nhập thầm lặng người dùng vào mọi thiết bị đã đăng nhập bằng cùng một Tài khoản Google không?
Không. Tính năng Khôi phục thông tin đăng nhập không được dùng cho mục đích đăng nhập chung trên các thiết bị. API này chỉ hoạt động trong một trường hợp cụ thể: khi người dùng thiết lập một thiết bị mới bằng cách khôi phục bản sao lưu từ thiết bị cũ. Cả hai thiết bị phải được liên kết với cùng một Tài khoản Google thì quy trình khôi phục một lần này mới thành công.
Câu hỏi 5. Tổ chức của tôi có một ứng dụng chính và nhiều ứng dụng phụ. Một khoá khôi phục có thể dùng cho tất cả các ứng dụng này không?
Không. Khoá khôi phục được liên kết với tên gói duy nhất của một ứng dụng. Vì ứng dụng chính và mỗi ứng dụng phụ đều có tên gói riêng, nên bạn cần tạo một khoá khôi phục riêng cho mỗi ứng dụng.
Câu hỏi 6. Có cần khoá truy cập để tạo khoá khôi phục cho tài khoản của người dùng không?
Không, bạn không bắt buộc phải dùng khoá truy cập. Khả năng tạo Khoá khôi phục không phụ thuộc vào phương thức đăng nhập của người dùng. Mục đích của tham số này là lưu trạng thái xác thực hiện tại của người dùng. Miễn là người dùng đang đăng nhập vào ứng dụng của bạn, bạn có thể tạo Khoá khôi phục cho họ.
Câu hỏi 7. Người dùng có thể xoá khoá khôi phục không?
Không, người dùng không có quyền kiểm soát trực tiếp đối với khoá khôi phục. Logic của ứng dụng chịu trách nhiệm quản lý các khoá khôi phục.
Để đảm bảo an toàn, bạn nên để ứng dụng tự động xoá khoá bất cứ khi nào người dùng đăng xuất. Điều này đảm bảo rằng vào lần tiếp theo mở ứng dụng trên cùng một thiết bị đó, họ sẽ được đăng xuất đúng cách và được nhắc đăng nhập lại.
Câu hỏi 8. Tôi có thể sử dụng Restore Credentials mà không cần đặt allowBackup thành true trong tệp kê khai của mình không?
Có, tính năng Khôi phục thông tin đăng nhập hoạt động bất kể allowBackup được đặt thành true hay không.
Câu hỏi 9. Tính năng Khôi phục thông tin đăng nhập sẽ hoạt động như thế nào đối với những người dùng có nhiều tài khoản đã đăng nhập trên cùng một ứng dụng?
Tính năng Khôi phục thông tin đăng nhập được thiết kế để chỉ hoạt động với một tài khoản tại một thời điểm.