Hệ thống nhận dạng sinh trắc học
Bản cập nhật mới nhất | Bản phát hành ổn định | Bản phát hành dùng thử | Bản phát hành beta | Bản phát hành alpha |
---|---|---|---|---|
Ngày 7 tháng 8 năm 2024 | 1.1.0 | - | - | 1.4.0-alpha02 |
Khai báo phần phụ thuộc
Để thêm một phần phụ thuộc trên Biometric, bạn phải thêm kho lưu trữ Google Maven vào dự án của mình. Đọc nội dung Kho lưu trữ Maven của Google để biết thêm thông tin.
Thêm các phần phụ thuộc cho cấu phần phần mềm bạn cần trong tệp build.gradle
cho ứng dụng hoặc mô-đun của mình:
Groovy
dependencies { // Java language implementation implementation "androidx.biometric:biometric:1.1.0" // Kotlin implementation "androidx.biometric:biometric-ktx:1.4.0-alpha02" }
Kotlin
dependencies { // Java language implementation implementation("androidx.biometric:biometric:1.1.0") // Kotlin implementation("androidx.biometric:biometric:1.4.0-alpha02") }
Để biết thêm thông tin về các phần phụ thuộc, hãy xem nội dung Thêm phần phụ thuộc cho bản dựng.
Ý kiến phản hồi
Ý kiến phản hồi của bạn có thể giúp chúng tôi cải thiện Jetpack. Hãy cho chúng tôi biết nếu bạn phát hiện lỗi mới hoặc có ý tưởng cải thiện thư viện này. Vui lòng xem các lỗi hiện có trong thư viện này trước khi báo một lỗi mới. Bạn có thể thêm lượt bình chọn cho lỗi hiện có bằng cách nhấp vào nút dấu sao.
Xem tài liệu về Công cụ theo dõi lỗi để biết thêm thông tin.
Phiên bản 1.4
Phiên bản 1.4.0-alpha02
Ngày 7 tháng 8 năm 2024
Phát hành androidx.biometric:biometric:1.4.0-alpha02
và androidx.biometric:biometric-ktx:1.4.0-alpha02
. Phiên bản 1.4.0-alpha02 bao gồm các thay đổi sau.
Tính năng mới
PromptContentView
cho phép nhà phát triển hiển thị thành phần hiển thị nội dung tuỳ chỉnh dưới dạng một tuỳ chọn bổ sung cho thành phần hiển thị văn bản mô tả thuần tuý- Biểu trưng ứng dụng trên lời nhắc sinh trắc học sẽ xuất hiện – được thêm tự động bằng biểu tượng ứng dụng.
Thay đổi về API
- Thêm các API để hỗ trợ khung hiển thị nội dung tuỳ chỉnh
BiometricPrompt.PromptInfo.Builder#setContentView
BiometricPrompt.PromptInfo#getContentView
- Giao diện
PromptContentView
- Lớp
PromptVerticalListContentView
- Lớp
PromptContentViewWithMoreOptionsButton
(chỉ dành cho các ứng dụng đặc quyền)
- Thêm API để hỗ trợ biểu trưng (chỉ dành cho ứng dụng đặc quyền)
BiometricPrompt.PromptInfo.Builder#setLogoBitmap
BiometricPrompt.PromptInfo.Builder#setLogoRes
BiometricPrompt.PromptInfo.Builder#setLogoDescription
BiometricPrompt.PromptInfo#getLogoBitmap
BiometricPrompt.PromptInfo#getLogoRes
BiometricPrompt.PromptInfo#getLogoDescription
58c35c6
Sửa lỗi
- Cập nhật
compileSdk
thành 35 5dc41be
Phiên bản 1.4.0-alpha01
Ngày 29 tháng 5 năm 2024
Phát hành androidx.biometric:biometric:1.4.0-alpha01
và androidx.biometric:biometric-ktx:1.4.0-alpha01
. Phiên bản này được phát triển trong một nhánh nội bộ và nhắm đến Android 15 Beta 2.
Sửa lỗi
- Cập nhật giao diện người dùng để nhất quán với các thay đổi về nền tảng trong Android 15
Phiên bản 1.2.0
Phiên bản 1.2.0-alpha05
Ngày 21 tháng 9 năm 2022
Phát hành androidx.biometric:biometric:1.2.0-alpha05
và androidx.biometric:biometric-ktx:1.2.0-alpha05
. Phiên bản 1.2.0-alpha05 bao gồm các thay đổi sau.
Các thay đổi về API
- Thêm tính năng hỗ trợ
CryptoObject
choandroid.security.identity.PresentationSession
trong Android 13. (C5f1ec, b/197965513)
Sửa lỗi
- Xoá các biến thể tài nguyên không cần thiết để giảm kích thước thư viện. (I3601e, b/220178553)
- Khắc phục vấn đề về
BiometricPrompt
được lưu trữ trong các bối cảnh không hoạt động. (Ife255)
Phiên bản 1.2.0-alpha04
Ngày 17 tháng 11 năm 2021
Phát hành androidx.biometric:biometric:1.2.0-alpha04
và androidx.biometric:biometric-ktx:1.2.0-alpha04
. Phiên bản 1.2.0-alpha04 bao gồm các thay đổi sau.
Các tính năng mới
- Cải thiện khả năng hỗ trợ BiometricPrompt đối với các mảnh được lưu trữ theo bối cảnh không hoạt động (I9312b)
Thay đổi về API
- Hỗ trợ thêm API BiometricManager.Strings cho Android 12 (I12f2d)
- Thay đổi khả năng tương thích nguồn và mục tiêu từ Java 7 sang Java 8 (I16129)
Sửa lỗi
- Khắc phục sự cố trên API 29 khiến thao tác huỷ trên một số thiết bị (bao gồm cả trình mô phỏng) sẽ gặp lỗi khi quay lại mã PIN/hình mở khoá/mật khẩu. Xin lưu ý rằng đối với một số thiết bị sử dụng API 29, thao tác này có thể khiến người dùng nhận được lời nhắc khoá màn hình ngay cả khi có hệ thống nhận dạng sinh trắc học được đăng ký. (b/142740104)
- Khắc phục sự cố trên API 29, trong đó các thiết bị không có phần cứng sinh trắc học sẽ không quay lại mã PIN/hình mở khoá/mật khẩu (b/170517889) một cách chính xác
Phiên bản 1.2.0-alpha03
Ngày 24 tháng 2 năm 2021
Phát hành androidx.biometric:biometric:1.2.0-alpha03
và androidx.biometric:biometric-ktx:1.2.0-alpha03
. Phiên bản 1.2.0-alpha03 bao gồm các thay đổi sau.
Thay đổi về API
- Thêm các phần mở rộng coroutine bị tạm ngưng cho CredentialAuthPrompt, tương tự như các phần mở rộng tồn tại cho các loại AuthPrompt khác. (I9ac70)
Phiên bản 1.2.0-alpha02
Ngày 27 tháng 1 năm 2021
Phát hành androidx.biometric:biometric:1.2.0-alpha02
và androidx.biometric:biometric-ktx:1.2.0-alpha02
. Phiên bản 1.2.0-alpha02 bao gồm các thay đổi sau.
Thay đổi về API
- Tái cấu trúc một số trường
AuthPrompt
trước đây được đặt thông qua trình tạo thành các đối số phương thứcstartAuthentication(...)
. (I18896, b/174098373) - Thêm yêu cầu cấp API tối thiểu đối với các loại
AuthPrompt
có hỗ trợ hạn chế hoặc không hỗ trợ trên các phiên bản Android cũ. (I18896) - Thêm các phương thức getter cho tất cả các trường
AuthPrompt
được đặt thông qua trình tạo. (I18896) - Thêm các tiện ích Kotlin coroutine đã tạm ngưng để xác thực sinh trắc học qua API
AuthPrompt
. Các hàm này sẽ trực tiếp trả vềAuthenticationResult
khi thành công hoặc gửi một ngoại lệ do lỗi hoặc không thành công (lỗi từ chối xác thực). (Iffc9e)
Sửa lỗi
- Khắc phục sự cố đôi khi
BiometricManager.canAuthenticate(int)
trả về mã trạng thái không chính xác cho một thiết bị có cảm biến vân tay trên Android 10 (API cấp 29). (I72420, b/176921662) - Khắc phục sự cố trong đó
BiometricManager.canAuthenticate(int)
trả về mã trạng thái không chính xác cho một thiết bị không có phần cứng hệ thống nhận dạng sinh trắc học và không có mã PIN, hình mở khoá hoặc mật khẩu đã đăng ký trên Android 10 (API cấp 29) và các phiên bản SDK trước đó. (I79b7d, b/174505824) - Khắc phục lỗi rò rỉ bộ nhớ xảy ra khi
BiometricPrompt
được lưu trữ trong một phân đoạn có vòng đời ngắn hơn hoạt động liên quan. (I70864, b/167014923)
Phiên bản 1.2.0-alpha01
Ngày 2 tháng 12 năm 2020
Phát hành androidx.biometric:biometric:1.2.0-alpha01
và androidx.biometric:biometric-ktx:1.2.0-alpha01
. Phiên bản 1.2.0-alpha01 bao gồm các thay đổi sau.
Các tính năng mới
- Giới thiệu mô-đun
androidx.biometric:biometric-ktx
giúp thêm các tiện ích và API dành riêng cho Kotlin bên trênandroidx.biometric:biometric
.
Thay đổi về API
- Thêm API
AuthPrompt
mới để tạoBiometricPrompt
và thực hiện xác thực. Các API này không yêu cầu phải tạoBiometricPrompt
trong phương thức gọi lại trong vòng đời sớm, chẳng hạn nhưonCreate
. (I19022) - Thêm tiện ích Kotlin vào
Fragment
vàFragmentActivity
cho các APIAuthPrompt
mới. (Iaf98c)
Phiên bản 1.1.0
Phiên bản 1.1.0
Ngày 27 tháng 1 năm 2021
Phát hành androidx.biometric:biometric:1.1.0
. Phiên bản 1.1.0 bao gồm các thay đổi sau.
Những thay đổi lớn kể từ phiên bản 1.0.0
- Thêm chức năng hỗ trợ tương thích ngược cho các bản cập nhật tính năng và API xác thực sinh trắc học mới trên Android 11.
- Giảm đáng kể quy mô kích thước của ứng dụng trong thư viện (hơn 100 KB trong một số trường hợp).
- Xoá nhiều nguồn rò rỉ bộ nhớ trước đây do thư viện gây ra.
- Khắc phục các lỗi xác minh lớp có thể ảnh hưởng đến hiệu suất trên các phiên bản Android cũ.
- Thực hiện nhiều cải thiện khác nhau đối với độ ổn định và hoạt động của thư viện.
Phiên bản 1.1.0-rc01
Ngày 11 tháng 11 năm 2020
Phát hành androidx.biometric:biometric:1.1.0-rc01
. Phiên bản 1.1.0-rc01 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục sự cố trên một số thiết bị khiến một số hành động (xác thực, huỷ, v.v.) đôi khi sẽ gửi một
NullPointerException
. (b/151316421) - Khắc phục sự cố một số thiết bị Pixel báo cáo sai trạng thái khi sử dụng
BiometricManager#canAuthenticate(int)
để kiểm tra thông tin sinh trắc học Lớp 3 trên Android 10. (b/170406186)
Phiên bản 1.1.0-beta01
Ngày 1 tháng 10 năm 2020
Phát hành androidx.biometric:biometric:1.1.0-beta01
. Phiên bản 1.1.0-beta01 bao gồm các thay đổi sau.
Các tính năng mới
- Giảm đáng kể kích thước tệp APK của thư viện (hơn 100 KB sau nén, trong một số trường hợp) bằng cách thay thế ảnh động hộp thoại bằng thành phần tĩnh trên Android 8.1 trở xuống. (I4844e)
BiometricPrompt
hiện sẽ tự động quay lại xác thực thông tin đăng nhập thiết bị (nếu được phép) trên tất cả phiên bản Android được hỗ trợ khi xác thực sinh trắc học bị khoá. (b/149579143)
Sửa lỗi
- Khắc phục sự cố trong đó
BiometricPrompt
gây ra lỗi trên một số thiết bị Android 9 không có cảm biến vân tay. (b/151443237) - Khắc phục lỗi
NullPointerException
tiềm ẩn trongFingerprintDialogFragment
. (b/167951429) - Khắc phục sự cố trong đó loại
CryptoObject
được dùng cho lời gọi phương thức phản chiếu trongBiometricManager
. (b/165824669) - Khắc phục sự cố khiến
BiometricPrompt
hiển thị lại ngay sau khi bị loại bỏ làm hệ thống sẽ tự động loại bỏ lời nhắc mới trên một số thiết bị Android 10. (b/157783075) - Sửa lỗi rò rỉ bộ nhớ liên quan đến việc sử dụng
FingerprintManagerCompat
. (b/165840273) - Khắc phục sự cố về giao diện người dùng của hộp thoại vân tay bị ẩn hoặc hiển thị không chính xác trên một số thiết bị Android 9. (b/154868505, b/148350291)
Phiên bản 1.1.0-alpha02
Ngày 19 tháng 8 năm 2020
Phát hành androidx.biometric:biometric:1.1.0-alpha02
. Phiên bản 1.1.0-alpha02 bao gồm các thay đổi sau.
Các tính năng mới
- Hiện tại,
BiometricManager#canAuthenticate()
có thể trả vềBIOMETRIC_STATUS_UNKNOWN
để cho biết rằng người dùng vẫn có thể xác thực được hoặcBIOMETRIC_ERROR_UNSUPPORTED
để cho biết rằng thiết bị không hỗ trợ một tổ hợp trình xác thực nhất định. - Hiện tại, bạn chỉ có thể sử dụng
BiometricPrompt#authenticate()
để xác thực thông tin đăng nhập thiết bị với mộtCryptoObject
được liên kết chỉ trên Android 11 (API cấp 30) trở lên.
Thay đổi về API
- Bạn có thể tuỳ ý cung cấp
Executor
rõ ràng khi tạo một thực thể củaBiometricPrompt
. (I6bb8a) - Thêm phương thức
BiometricManager#canAuthenticate(int)
từ Android 11. (Ia3f1c) - Cập nhật
BiometricPrompt
để thêm sự hỗ trợ cho các hằng sốBiometricManager.Authenticators
trên Android 11. (I39bd8) - Thêm phương thức
BiometricPrompt.AuthenticationResult#getAuthenticationType()
từ Android 11. (Icfad5) - Thêm mã lỗi
BiometricPrompt.ERROR_SECURITY_UPDATE_REQUIRED
từ Android 11. (I6610b) - Cập nhật
BiometricPrompt.CryptoObject
để hỗ trợIdentityCredential
chỉ trên Android 11 (API cấp 30) trở lên. (I1d9f6)
Sửa lỗi
- Khắc phục các sự cố rò rỉ bộ nhớ do LeakCanary báo cáo trong
BiometricFragment
vàBiometricViewModel
. (b/144919472) - Đảm bảo rằng
BiometricViewModel
sẽ không gọiMutableLiveData#setValue()
từ chuỗi trong nền nữa. (b/159983244) - Khắc phục sự cố
BiometricPrompt
không xử lý đúng cách khoá tạm thời ở một số cấp độ API. (9acfce9) - Khắc phục sự cố
BiometricPrompt
trả về mã lỗi không chính xác cho một thiết bị không được bảo mật bằng thông tin xác thực khoá màn hình ở một số cấp độ API. (b/148626482) - Khắc phục sự cố
BiometricManager
vàBiometricPrompt
trả về mã lỗi không chính xác cho thiết bị không triển khai khoá phím ở một số cấp độ API. (891c6e0)
Phiên bản 1.1.0-alpha01
Ngày 24 tháng 6 năm 2020
Phát hành androidx.biometric:biometric:1.1.0-alpha01
. Phiên bản 1.1.0-alpha01 bao gồm các thay đổi sau.
Các tính năng mới
- Điều chỉnh lại cách triển khai thư viện nội bộ để xử lý các nguồn có thể gây rò rỉ bộ nhớ và hành vi không mong muốn khác:
- Giờ đây, các mảnh nội bộ sẽ chia sẻ và lưu giữ dữ liệu bằng cách sử dụng một
ViewModel
gắn liền với vòng đời hoạt động của ứng dụng. - Xác thực thông tin đăng nhập thiết bị trước Android 10 (API cấp 29) không còn bắt đầu hoạt động minh bạch trong ứng dụng.
- Giờ đây, các mảnh nội bộ sẽ chia sẻ và lưu giữ dữ liệu bằng cách sử dụng một
Sửa lỗi
- Giải quyết các cảnh báo về việc ngừng sử dụng liên quan đến việc sử dụng
FingerprintManagerCompat
. (b/142967618) - Thay đổi cách gọi các phương thức nền tảng bằng SDK để tránh các vấn đề liên quan đến việc xác minh lớp trên các phiên bản Android cũ. (94beb4b)
- Phần phụ thuộc Gradle không thuộc API công khai sẽ không còn được thư viện xuất nữa. (f289d9e)
Phiên bản 1.0.1
Phiên bản 1.0.1
Ngày 18 tháng 12 năm 2019
Phát hành androidx.biometric:biometric:1.0.1
. Phiên bản 1.0.1 bao gồm các thay đổi sau.
Sửa lỗi
- Mở rộng giải pháp dự phòng vân tay hiện có cho phương thức xác thực dựa trên mật mã cho các nhà cung cấp bị ảnh hưởng đã biết, đồng thời chỉ giới hạn ở API 28 (b/143361271)
- Khắc phục sự cố trên một số thiết bị mà hộp thoại sinh trắc học hiển thị trong lớp phủ hệ thống (b/143230260)
- Khắc phục một số vấn đề với
setDeviceCredentialAllowed(true)
(b/143091227, b/143097321, b/143653944) - Khắc phục sự cố trên một số phiên bản Android, trong đó
onAuthenticationSuccess
không phải lúc nào cũng được gọi sau khi người dùng xác nhận thông tin đăng nhập thiết bị (b/145232806) - Khắc phục sự cố trên một số phiên bản Android nhất định, trong đó không phải lúc nào
onAuthenticationError
cũng được gọi khi lời nhắc bị loại bỏ lúc xoay vòng (b/145230042) - Khắc phục sự cố trên một số phiên bản Android nhất định, trong đó lời nhắc không bị loại bỏ khi nhận được một số mã lỗi nhất định (b/143683687)
- Khắc phục
NullPointerException
tiềm năng trongBiometricFragment
(b/142599311)
Phiên bản 1.0.0
Phiên bản 1.0.0
Ngày 7 tháng 11 năm 2019
androidx.biometric:biometric:1.0.0
được phát hành mà không có thay đổi nào kể từ 1.0.0-rc02
. Phiên bản 1.0.0 bao gồm các thay đổi sau.
Các tính năng chính của phiên bản 1.0.0
- Phiên bản tương thích của API
BiometricPrompt
vàBiometricManager
, như được triển khai trong Android 10, với sự hỗ trợ tính năng đầy đủ cho Android 6.0 (API 23) - Tính năng quản lý vòng đời tích hợp sẵn cho
BiometricPrompt
trongFragment
hoặcFragmentActivity
- Cách xử lý đặc biệt đối với những thiết bị được xác định là trình bày sai hệ thống nhận dạng sinh trắc học yếu trong quá trình xác thực dựa trên mật mã
Phiên bản 1.0.0-rc02
Ngày 23 tháng 10 năm 2019
Phát hành androidx.biometric:biometric:1.0.0-rc02
. Phiên bản 1.0.0-rc02 bao gồm các thay đổi sau.
Sửa lỗi
- Thêm giải pháp cho một số thiết bị được biết là cung cấp sai hệ thống nhận dạng sinh trắc học yếu khi phương thức xác thực dựa trên mật mã được gọi trên API phiên bản 28 và 29 (b/142150327)
Phiên bản 1.0.0-rc01
Ngày 9 tháng 10 năm 2019
Phát hành androidx.biometric:biometric:1.0.0-rc01
. Phiên bản 1.0.0-rc01 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục sự cố tiềm ẩn với
FingerprintDialogFragment
khi loại bỏ yếu tố này lúc màn hình đang xoay (b/141356362) - Khắc phục sự cố khiến việc nhận được
AuthenticationResult
rỗng từ API khung có thể gây ra sự cố (b/138862251) - Khắc phục các sự cố do loại bỏ
BiometricPrompt
sauonSaveInstanceState()
(b/138825362, b/140447194)
Phiên bản 1.0.0-beta02
Ngày 18 tháng 9 năm 2019
Phát hành androidx.biometric:biometric:1.0.0-beta02
. Phiên bản 1.0.0-beta02 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục các sự cố liên quan đến việc hỗ trợ thông tin đăng nhập thiết bị trong phiên bản
1.0.0-beta01
- Xoá các phần phụ thuộc Java 8 và chuyển sang phụ thuộc vào Java 7 (b/140508526)
FingerprintHelperFragment
hiện đã gửiERROR_HW_NOT_PRESENT
chính xác khi không phát hiện thấy phần cứng xử lý vân tay (b/140427586)
Phiên bản 1.0.0-beta01
Ngày 29 tháng 8 năm 2019
Phát hành androidx.biometric:biometric:1.0.0-beta01
. Phiên bản 1.0.0-beta01 bao gồm các thay đổi sau.
Tính năng mới
Chúng tôi đã giới thiệu một hàm khởi tạo thứ hai cho BiometricPrompt cho phép yếu tố lưu trữ trong một mảnh (thay vì hàm khởi tạo hiện có cần có FragmentActivity).
Chúng tôi cũng rất hân hạnh khi cung cấp chức năng sau từ thư viện Sinh trắc học Android 10 tới AndroidX:
BiometricManager#canAuthenticate
BiometricPrompt.PromptInfo#setConfirmationRequired
BiometricPrompt.PromptInfo#setDeviceCredentialAllowed
Trên Android 10, thư viện sẽ gọi các phương thức tương ứng từ API nền tảng. Ở cấp độ API cũ, thư viện sẽ mô phỏng hành vi đó.
Những thay đổi về API
- Thêm hàm khởi tạo dành riêng cho mảnh để nhận lời nhắc hệ thống nhận dạng sinh trắc học (b/131980596)
- Hãy xem phần “Các tính năng mới” ở trên.
Sửa lỗi
- Thêm sự hỗ trợ bằng chứng xác thực cho thiết bị BiometricPrompt cho L+
- Sửa BiometricPrompt để sử dụng hằng số lỗi công khai (b/137788194)
- Sửa
NullPointerException
trongBiometricPrompt.onAttach()
(b/136103103) - Thay đổi hành vi thành không cho phép hủy BiometricPrompt bằng sự kiện chạm bên ngoài lời nhắc (b/135684487)
- Khắc phục lỗi onAuthenticationError khi giá trị lỗi rỗng được trả về trong Kotlin (b/128350861)
- FingerprintDialogFragment hiện có thể tạo kiểu (b/127878106)
- FingerprintDialog hiện có thể cuộn được (b/126367887)
- Khắc phục lỗi xoay hộp thoại sinh trắc học sẽ đưa ra
IllegalStateException
(b/124153656), (b/123811924) - Khắc phục hành vi không nhất quán trên Cấp độ API từ 23 đến 27. (b/124066957)
- Khắc phục sự cố Hộp thoại đăng nhập bằng vân tay đọc văn bản không chính xác bằng Talkback. (b/123572331)
Phiên bản 1.0.0-alpha04
Ngày 3 tháng 4 năm 2019
Phát hành androidx.biometric:biometric:1.0.0-alpha04
. Bạn có thể xem các thay đổi trong phiên bản này tại đây.
Sửa lỗi
- Khắc phục lỗi các mảnh Hệ thống nhận dạng sinh trắc học không dọn dẹp trong mọi trường hợp. (b/121117380)
- Khắc phục lỗi
BiometricPrompt
chỉ cho phép một bản sao củaBiometricPrompt.AuthenticationCallback
(b/123857949) - Khắc phục hành vi lỗi
BiometricPrompt
không nhất quán giữa các phiên bản hệ thống và khả năng tương thích. (b/123572326) - Khắc phục lệnh gọi lại
onAuthenticationError()
với@NotNull errString
gây raNullPointerException
trong thời gian chạy (b/123167217) - Khắc phục sự cố với nút Hủy
androidx.BiometricPrompt
(b/122054485) - Khắc phục sự cố không thay đổi được tiêu đề/nội dung mô tả
androidx.biometric.PromptInfo
trên Android P (b/122856773)
Phiên bản 1.0.0-alpha03
Ngày 17 tháng 12 năm 2018
Sửa lỗi
- Khắc phục các sự cố liên quan đến mảnh
- Trên các thiết bị O trở về trước, lỗi khoá sẽ được trả lại ngay lập tức để phù hợp với P trở lên