Android 13 中的通知採用選擇加入模式,這與先前使用選擇退出模式的 Android 版本有所不同。在 Android 13 中,所有應用程式都必須先向使用者要求權限,才能傳送通知提示。這個模型有助於減少通知中斷情形、盡量減少資訊過載的情況,並協助使用者根據自己重視的事項控制要顯示的通知。為了支援選擇加入模式,原始設備製造商必須在通知和執行階段權限系統中實作變更。
本頁說明原始設備製造商 (OEM) 必須實作哪些內容才能支援這項變更,以及如何驗證實作內容。
實作選擇加入通知的變更
自 Android 13 起,應用程式必須先向系統要求 android.permission.POST_NOTIFICATION
執行階段權限,才能傳送通知,並宣告傳送通知的意圖。
在 Android 13 以上版本中,決定應用程式是否可向使用者傳送通知的設定會儲存在權限系統中。在 Android 13 之前,這項設定會儲存在通知系統中。因此,原始設備製造商必須將現有通知資料 (關於應用程式是否允許傳送通知) 從通知系統遷移至執行階段權限系統。原始設備製造商 (OEM) 也必須維護通知系統中現有的 API,以便向應用程式開發人員顯示該資料。
通知和權限系統的變更是取決於選擇採用的使用者通知行為模式,詳情請參閱「實作指南」一節。
在選擇採用模式中,使用者通知的行為
下表說明在搭載 Android 13 的裝置上,不同應用程式版本的通知行為:
搭載 Android 13 的裝置 | 指定 Android 13 以上版本的應用程式 | 指定 Android 13 以下版本的應用程式 |
---|---|---|
新安裝 | 系統會封鎖通知,直到應用程式發出提示為止。 應用程式可控制要求權限的時機。 |
系統會在作業系統提示前封鎖通知。 系統會在應用程式首次執行時要求權限。 |
現有應用程式 (升級) | 在應用程式提示前,系統會允許通知。 系統會授予臨時權限,直到應用程式在首次符合資格的執行階段要求權限為止。 |
系統會允許通知,直到 OS 顯示提示為止。 系統會在應用程式首次執行前授予臨時權限。 |
導入指南
如需參考實作說明,請參閱通知服務、權限服務和政策服務。如要為預設權限處理常式實作例外狀況,請參閱「執行階段權限」。
在導入期間,請針對指定 Android 13 以下 SDK 的應用程式,遵循以下有關使用者通知行為的規範:
- 在 Android 13 裝置上新安裝的應用程式,必須在使用者核准權限提示後,才能傳送通知。
- 如果應用程式指定 Android 13 以上版本,則必須在應用程式提示前阻擋通知,因為應用程式會控制何時要求使用者授權,以及是否要求使用者授權。
- 如果應用程式指定的目標版本低於 Android 13,則必須在作業系統提示前封鎖通知。OS 必須在應用程式首次執行時顯示權限提示。
在升級到 Android 13 之前裝置上已存在的任何應用程式,或是透過備份與還原功能還原的任何應用程式,都必須允許使用者在首次從該應用程式啟動活動之前傳送通知。
如果應用程式指定的 SDK 為 Android 13 以上版本,且使用者先前未在應用程式或
NotificationChannel
層級為此應用程式自訂通知設定,請撤銷臨時權限授予作業。應用程式必須先向使用者要求權限,才能繼續傳送通知。如果指定 Android 13 為目標版本的升級應用程式目前沒有透過臨時升級授權取得通知權限,且使用者至少已啟動一次,則應用程式必須先顯示通知權限提示,才能執行任何其他前景服務。
如果應用程式指定的 SDK 版本低於 Android 13,請在應用程式建立至少一個
NotificationChannel
後攔截首次啟動的活動,以便顯示權限提示,詢問使用者是否要接收來自應用程式的通知。如果使用者先前在升級裝置或備份中還原至裝置的應用程式,在應用程式或
NotificationChannel
層級自訂通知設定,則必須使用FLAG_PERMISSION_USER_SET
標記將應用程式層級設定遷移至權限系統。除非應用程式特別要求,否則不得向使用者顯示其他通知權限提示。
備份和還原功能必須在 Android 13 裝置和舊版作業系統的裝置之間回溯和前向相容。從 Android 13 裝置產生的備份資料必須還原至較舊的 OS 版本,而較舊 OS 版本的備份資料則必須還原至 Android 13 裝置。
與持續進行的媒體播放相關的媒體通知必須排除在通知權限之外。
驗證通知和權限系統的變更
如要驗證導入作業,請執行下列測試:
如
PreferencesHelperTest
、NotificationManagerServiceTest
所述的單元測試。任何測試升級、備份和還原功能的手動測試。
任何傳送通知的 CTS 權限與通知系統測試。部分測試位於 cts/tests/tests/permission/、NotificationManagerTest.java 和 cts/tests/tests/notificationlegacy/ 中。