Android 13 中的通知採用選用模型, 。於 在 Android 13 中,所有應用程式都必須事先要求使用者授予權限 。這個模型有助於減少通知 盡可能減少資訊超載,並協助使用者 也能根據他們重視的需求顯示通知為了支持 選用模型,原始設備製造商 (OEM) 必須在通知和執行階段中進行變更 權限系統
本頁將說明原始設備製造商 (OEM) 必須採用哪些實作項目才能支援這項變更,並說明做法。 驗證實作內容。
導入選擇接受通知的變更
從 Android 13 開始,應用程式必須宣告
要求傳送通知,方法是要求
android.permission.POST_NOTIFICATION
系統啟動執行階段權限要求後,應用程式才能傳送通知。
在 Android 13 以上版本中,這項設定會決定 應用程式能否傳送通知給使用者。 在 Android 13 之前,這項設定儲存在 通知系統因此,原始設備製造商 (OEM) 必須遷移現有的通知資料 是否允許應用程式透過通知傳送通知 將系統寫入執行階段權限系統原始設備製造商 (OEM) 也必須維護現有的 API 會出現在向應用程式開發人員顯示該資料的通知系統中。
通知和權限系統的變更是以 選擇加入使用者通知行為模式,且 中所述的「導入指南」一節。
在選擇採用模式中,使用者通知的行為
下表說明各種應用程式的通知行為 版本:
搭載 Android 13 的裝置 | 指定 Android 13 以上版本的應用程式 | 指定 Android 13 以下版本的應用程式 |
---|---|---|
新安裝 | 系統會封鎖通知,直到應用程式發出提示為止。
應用程式可控管何時要求權限。 |
通知會遭到封鎖,直到 OS 發出提示為止。
系統會在應用程式首次執行時要求權限。 |
現有應用程式 (升級) | 系統會允許通知,直到應用程式顯示提示為止。
除非應用程式要求首次執行符合資格的執行作業,否則系統會授予臨時權限。 |
允許通知直到 OS 提示為止。
系統會在應用程式首次執行前授予臨時權限。 |
實作指南
如需參考實作,請參閱 通知服務 權限服務和 政策服務。如何實施例外狀況 如要使用預設權限處理常式,請參閱 執行階段權限。
在實作期間,請遵循下列使用者通知指南 指定 Android 13 以下版本 SDK 的應用程式行為:
- 最新安裝至 Android 13 裝置的應用程式必須
在使用者未核准權限提示的情況下傳送通知。
- 如果應用程式指定 Android 13 版本為目標 更高,必須封鎖通知,直到應用程式顯示提示為止 控制何時要求使用者授權
- 如果應用程式指定的版本低於 Android 13,您必須封鎖通知,直到 OS 提供的提示作業系統必須在應用程式首次執行 應用程式
升級前安裝在裝置上的任何應用程式 Android 13 或任何透過備份還原的應用程式 以及還原作業,必須讓使用者能傳送通知到使用者初次使用 從該應用程式啟動活動。
適用於指定 Android 13 SDK 版本的應用程式 如果使用者先前未自訂 該應用程式或
NotificationChannel
層級的該應用程式,撤銷 授予的權限。應用程式必須先要求使用者授予權限 允許系統繼續傳送通知。如果指定 Android 13 的升級版應用程式並未 目前透過臨時升級取得通知權限 且使用者已啟動至少一次,則應用程式必須顯示 允許在日後執行任何前景前發出的通知權限提示 免費 Google Cloud 服務
目標 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/。