Android 13 (API cấp 33) trở lên hỗ trợ quyền khi bắt đầu chạy để gửi thông báo không được miễn trừ (bao gồm cả Dịch vụ trên nền trước (FGS)) từ ứng dụng:
POST_NOTIFICATIONS
.
Thay đổi này giúp người dùng tập trung vào các thông báo quan trọng nhất với họ.
Bạn nên nhắm đến Android 13 trở lên càng sớm càng tốt để hưởng lợi từ khả năng kiểm soát và tính linh hoạt bổ sung của tính năng này. Nếu tiếp tục nhắm đến 12L (API cấp 32) trở xuống, bạn sẽ bị mất sự linh hoạt khi yêu cầu quyền truy cập trong bối cảnh chức năng của ứng dụng.
Khai báo quyền .
Để yêu cầu quyền gửi thông báo mới từ ứng dụng của bạn, hãy cập nhật ứng dụng để nhắm đến Android 13 và hoàn tất một quy trình tương tự so với việc yêu cầu các quyền khi bắt đầu chạy khác, như minh hoạ trong các phần sau.
Quyền mà bạn cần để khai báo trong tệp kê khai của ứng dụng sẽ xuất hiện trong đoạn mã sau:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
Chức năng của ứng dụng phụ thuộc vào lựa chọn của người dùng trong hộp thoại cấp quyền
Trong hộp thoại này, người dùng có thể thực hiện các thao tác sau:
- Chọn cho phép
- Chọn không cho phép
- Vuốt khỏi hộp thoại mà không cần nhấn vào nút nào
Các phần sau mô tả hành vi của ứng dụng dựa trên hành động mà người dùng thực hiện.
Người dùng chọn "Cho phép"
Nếu người dùng chọn tuỳ chọn cho phép, ứng dụng của bạn có thể thực hiện các thao tác sau:
- Gửi thông báo. Mọi kênh thông báo đều được cho phép.
- Đăng các thông báo liên quan đến dịch vụ trên nền trước. Các thông báo này xuất hiện trong ngăn thông báo.
Người dùng chọn "Không cho phép"
Nếu người dùng chọn tuỳ chọn không cho phép, thì ứng dụng không thể gửi thông báo trừ khi ứng dụng đủ điều kiện được miễn xác minh. Tất cả các kênh thông báo đều bị chặn, ngoại trừ một số vai trò cụ thể. Điều này tương tự như hành vi xảy ra khi người dùng tắt tất cả thông báo cho ứng dụng trong phần cài đặt hệ thống theo cách thủ công.
Thận trọng: Nếu ứng dụng của bạn nhắm đến 12L trở xuống và người dùng nhấn vào Không cho phép dù chỉ một lần, họ sẽ không được nhắc lại cho đến khi một trong những điều sau xảy ra:
- Người dùng gỡ cài đặt và cài đặt lại ứng dụng của bạn.
- Bạn cập nhật ứng dụng của mình để nhắm đến Android 13 trở lên.
Người dùng vuốt khỏi hộp thoại
Nếu người dùng vuốt khỏi hộp thoại, tức là họ không chọn cho phép hoặc không cho phép – trạng thái của quyền gửi thông báo không thay đổi.
Ảnh hưởng đối với ứng dụng mới cài đặt
Nếu người dùng cài đặt ứng dụng của bạn trên một thiết bị chạy Android 13 trở lên, thì thông báo của ứng dụng sẽ tắt theo mặc định. Ứng dụng của bạn phải chờ đến gửi thông báo cho đến khi bạn yêu cầu quyền mới và người dùng cấp quyền đó cho ứng dụng của bạn.
Thời điểm hộp thoại cấp quyền xuất hiện dựa trên phiên bản SDK mục tiêu của ứng dụng:
- Nếu ứng dụng của bạn nhắm đến Android 13 trở lên, thì ứng dụng đó có toàn quyền kiểm soát thời điểm hộp thoại cấp quyền được hiển thị. Hãy tận dụng cơ hội này để giải thích cho người dùng lý do ứng dụng cần quyền này, khuyến khích họ cấp quyền.
- Nếu ứng dụng của bạn nhắm đến 12L (API cấp 32) trở xuống, thì hệ thống sẽ hiển thị hộp thoại cấp quyền vào lần đầu tiên ứng dụng của bạn bắt đầu một hoạt động sau khi bạn tạo kênh thông báo, hoặc khi ứng dụng bắt đầu một hoạt động và sau đó tạo kênh thông báo đầu tiên. Bước này thường rơi vào thời điểm khởi động ứng dụng.
Ảnh hưởng đối với bản cập nhật cho các ứng dụng hiện có
Để giảm thiểu tình trạng gián đoạn liên quan đến quyền gửi thông báo này, hệ thống sẽ tự động cấp trước quyền này cho tất cả ứng dụng đủ điều kiện khi người dùng nâng cấp thiết bị lên Android 13 trở lên. Nói cách khác, các ứng dụng này có thể tiếp tục gửi thông báo cho người dùng, và người dùng sẽ không thấy lời nhắc cấp quyền khi bắt đầu chạy.
Điều kiện để được cấp quyền trước
Để đủ điều kiện được cấp trước tự động, ứng dụng của bạn phải có một kênh thông báo có sẵn, và không bị người dùng tắt thông báo một cách rõ ràng trên thiết bị chạy 12L trở xuống.
Nếu người dùng tắt thông báo cho ứng dụng của bạn trên một thiết bị chạy 12L trở xuống, thì việc từ chối đó vẫn tồn tại khi thiết bị nâng cấp lên Android 13 trở lên.
Miễn trừ
Phần này chứa tập hợp các thông báo và ứng dụng được miễn trừ khỏi những thay đổi về hành vi cấp quyền gửi thông báo. Trên Android 13 (API cấp 33) trở lên, nếu người dùng từ chối cấp quyền gửi thông báo, họ vẫn sẽ thấy các thông báo liên quan đến các dịch vụ trên nền trước trong Trình quản lý tác vụ nhưng không thấy chúng trong ngăn thông báo.
Phiên phát nội dung đa phương tiện
Các thông báo liên quan đến phiên phát nội dung đa phương tiện không được áp dụng cho thay đổi về hành vi này.
Ứng dụng được định cấu hình để tự quản lý các cuộc gọi điện thoại
Nếu ứng dụng của bạn tự định cấu hình để tự quản lý các cuộc gọi điện thoại, thì bạn không cần cấp quyền POST_NOTIFICATIONS
để ứng dụng có thể gửi thông báo sử dụng kiểu thông báo Notification.CallStyle
.
Hệ thống sẽ coi ứng dụng của bạn đã tự định cấu hình để tự quản lý các cuộc gọi điện thoại nếu ứng dụng đó thực hiện từng thao tác sau:
- Khai báo quyền
MANAGE_OWN_CALLS
. - Triển khai giao diện
ConnectionService
. - Đăng ký với nhà cung cấp dịch vụ viễn thông của thiết bị bằng cách gọi
registerPhoneAccount()
.
Kiểm thử ứng dụng
Bạn có thể đánh giá mức độ ảnh hưởng của quyền gửi thông báo đối với ứng dụng của mình khi quyền này được sử dụng lần đầu trên thiết bị chạy Android 13 trở lên. Chiến lược phát hành đĩa đơn đang theo dõi các tập hợp lệnh Cầu gỡ lỗi Android (ADB) cho phép bạn mô phỏng các trình tự phổ biến nhất trong lựa chọn của người dùng và quá trình nâng cấp thiết bị mà không cần đặt lại thiết bị thử nghiệm:
Ứng dụng mới được cài đặt trên thiết bị chạy Android 13 trở lên:
adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-set
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixed
Người dùng luôn bật thông báo khi ứng dụng được cài đặt trên thiết bị chạy 12L trở xuống, sau đó thiết bị nâng cấp lên Android 13 trở lên:
adb shell pm grant PACKAGE_NAME android.permission.POST_NOTIFICATIONS
adb shell pm set-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-set
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixed
Người dùng tắt thông báo theo cách thủ công khi ứng dụng được cài đặt trên thiết bị chạy 12L trở xuống, sau đó thiết bị nâng cấp lên Android 13 trở lên:
adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
adb shell pm set-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-set
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixed
Các phương pháp hay nhất
Phần này mô tả một số cách mà bạn có thể sử dụng quyền gửi thông báo mới hiệu quả nhất trong ứng dụng của mình.
Cập nhật phiên bản SDK mục tiêu của ứng dụng.
Để giúp ứng dụng của bạn linh hoạt hơn khi hộp thoại cấp quyền xuất hiện, hãy cập nhật ứng dụng nhắm đến Android 13 trở lên.
Chờ để hiển thị lời nhắc cấp quyền thông báo
Trước khi bạn yêu cầu người dùng cấp bất kỳ quyền nào, hãy để người dùng làm quen với ứng dụng của bạn.
Người dùng mới có thể muốn khám phá ứng dụng và tận mắt nhận ra các lợi ích của từng yêu cầu thông báo riêng lẻ. Bạn có thể kích hoạt lời nhắc cấp quyền từ một hành động của người dùng. Danh sách sau đây cho thấy một số ví dụ về thời điểm thích hợp để hiển thị lời nhắc cấp quyền thông báo:
- Người dùng nhấn vào nút "chuông cảnh báo".
- Người dùng chọn theo dõi tài khoản mạng xã hội của người nào đó.
- Người dùng tạo một đơn đặt đồ ăn giao tận nơi.
Hình 1 cho thấy một quy trình đề xuất để yêu cầu cấp quyền gửi thông báo. Trừ khi
shouldShowRequestPermissionRationale()
trả về true
, ứng dụng của bạn không cần hiển thị màn hình ở giữa — màn hình
có văn bản tiêu đề "Nhận thông báo!".
Ngoài ra, bạn có thể thiết lập yêu cầu xuất hiện sau khi cho phép người dùng làm quen với ứng dụng. Ví dụ: bạn có thể chờ đến lần thứ ba hoặc thứ tư người dùng chạy ứng dụng của bạn.
shouldShowRequestPermissionRationale()
trả về true
.
Yêu cầu quyền trong ngữ cảnh
Khi bạn yêu cầu quyền gửi thông báo trong ứng dụng của mình, hãy làm điều này trong ngữ cảnh phù hợp để thể hiện rõ ràng mục đích sử dụng thông báo và lý do người dùng nên chọn tham gia. Ví dụ: một ứng dụng email có thể bao gồm các tuỳ chọn gửi thông báo cho mọi email mới hoặc chỉ những email mà người dùng là người nhận duy nhất.
Hãy tận dụng cơ hội này để làm minh bạch ý định của bạn, qua đó người dùng có nhiều khả năng sẽ cấp quyền thông báo cho ứng dụng của bạn hơn.
Kiểm tra xem ứng dụng của bạn có thể gửi thông báo hay không
Trước khi ứng dụng gửi một thông báo, hãy xác nhận xem người dùng đã bật thông báo cho ứng dụng của bạn hay chưa. Để thực hiện việc này, hãy gọi
areNotificationsEnabled()
.
Sử dụng quyền một cách có trách nhiệm
Sau khi được người dùng chấp thuận để gửi thông báo, bạn nhớ sử dụng quyền này một cách có trách nhiệm. Người dùng có thể xem số lượng thông báo hằng ngày mà ứng dụng của bạn gửi, và họ có thể thu hồi quyền bất cứ lúc nào.