Quyền gửi thông báo khi bắt đầu chạy

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:

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:

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, thì trạng thái của quyền gửi thông báo sẽ 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 đợi 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.

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 quyền gửi thông báo, họ vẫn thấy 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 sẽ không thấy các thông báo đó 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:

  1. Khai báo quyền MANAGE_OWN_CALLS.
  2. Triển khai giao diện ConnectionService.
  3. Đă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. Các bộ lệnh Cầu gỡ lỗi Android (ADB) sau đây cho phép bạn mô phỏng những trình tự phổ biến nhất trong các lựa chọn của người dùng và 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.

Sau khi đăng nhập, người dùng sẽ nhận được lời mời nhận thông báo về thông tin cập nhật chuyến đi. Sau khi người dùng nhấn vào nút Tham gia, ứng dụng sẽ yêu cầu quyền mới, khiến hộp thoại của hệ thống xuất hiện
Hình 1. Quy trình công việc đề xuất cho người dùng để yêu cầu quyền gửi thông báo. Màn hình ở giữa chỉ cần thiết nếu 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.