通知執行階段權限

Android 13 (API 級別 33) 以上版本支援 執行階段權限,用於傳送 非豁免 (包括前景服務 (FGS)) 通知 從應用程式: POST_NOTIFICATIONS。 這項變更有助使用者專注處理最重要的通知 具體做法是指示 Kubernetes 建立並維護 一或多個代表這些 Pod 的物件

我們強烈建議您盡快指定 Android 13 以上版本,才能享有這項功能的額外控管功能和彈性。如果繼續指定 12L (API 級別 32) 以下版本, 因為在應用程式的執行情境中要求權限,就能更有彈性 功能

宣告權限

如要透過應用程式要求新的通知權限,請更新應用程式: 並指定 Android 13 並完成類似的程序 要求其他執行階段權限。 。

您需要的權限 在應用程式的資訊清單檔案中進行宣告 出現在以下程式碼片段中:

<manifest ...>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application ...>
        ...
    </application>
</manifest>

使用者在權限對話方塊中的選擇會決定應用程式功能

在這個對話方塊中,使用者可進行下列操作:

以下各節說明應用程式的行為 (根據 所需費用

使用者選取「允許」

如果使用者選取「允許」選項,應用程式就能執行以下操作:

使用者選取「不允許」

如果使用者選取「不允許」選項,應用程式就無法傳送 通知,除非符合豁免條件。所有語言 通知管道會遭到封鎖, 角色。這種情況類似於使用者在系統設定中手動關閉應用程式的所有通知。

注意:如果應用程式指定 12L 以下版本 然後使用者輕觸「不允許」,即使系統只傳回一次,系統也不會提示使用者 ,直到發生以下任一情況為止:

  • 使用者解除安裝應用程式,然後再重新安裝。
  • 您將應用程式更新為指定 Android 13 以上版本。

使用者未從對話方塊選取任何選項

如果使用者滑開對話方塊,也就是沒有選取「允許」或「不允許」,則通知權限狀態維持不變。

對新安裝應用程式的影響

如果使用者在搭載 Android 13 的裝置上安裝應用程式 以上版本,應用程式的通知功能預設為關閉。應用程式必須等待 到 傳送通知,直到您要求新權限和使用者 授予應用程式該權限。

顯示權限對話方塊的時機,視應用程式的目標 SDK 版本而定:

  • 如果應用程式指定 Android 13 以上版本,則應用程式已完成 控制權限對話方塊的顯示時機 請利用這個機會,向使用者說明應用程式需要這項權限的原因,並鼓勵他們授予權限。
  • 如果應用程式指定 12L (API 級別 32) 以下版本,系統會顯示 應用程式首次啟動活動的權限對話方塊 建立通知管道,或 應用程式會啟動一項活動,並建立其第一個通知管道。這個 通常是應用程式啟動時。

對現有應用程式更新版本的影響

為了盡量減少與通知權限相關的干擾情形,當使用者將裝置升級至 Android 13 以上版本時,系統會自動針對所有符合資格的應用程式預先授予這項權限。也就是說,這類應用程式可以繼續傳送通知給使用者,而使用者也不會看到執行階段權限提示。

預先授予權限的資格規定

為了讓您的應用程式符合自動預先授予權限的資格,應用程式必須具有現行的通知管道,且未在搭載 12L 以下版本的裝置上遭到使用者明確停用通知功能。

如果使用者在搭載 12L 以下版本的裝置上停用應用程式的通知功能,當裝置升級至 Android 13 以上版本時,通知功能將持續維持停用狀態。

豁免資格

這個部分包含不受 通知權限行為變更。在 Android 13 (API 級別 33) 以上版本中, 如果使用者拒絕授予通知權限,仍會看到相關通知 前景服務 工作管理員 但不會出現在 通知導覽匣

媒體工作階段

與以下項目相關的通知: 媒體工作階段為 不受這項行為變更的影響。

設定為自行管理通話的應用程式

如果您的應用程式設定為自行管理通話, 不需要 POST_NOTIFICATIONS 權限。 使用 Notification.CallStyle 通知樣式。

系統會判定您的應用程式已設為自行管理手機 就會呼叫函式,如下所示:

  1. 宣告 MANAGE_OWN_CALLS 權限。
  2. 實作 ConnectionService敬上 存取 API
  3. 透過呼叫,向裝置的電信供應商註冊 registerPhoneAccount()

測試應用程式

您可以評估通知權限在適用情況下對應用程式的影響 首次在搭載 Android 13 以上版本的裝置上使用。 追蹤 可以使用這組 Android Debug Bridge (ADB) 指令 以便模擬最常見的使用者選項和裝置升級程序 不必重設測試裝置:

  • 應用程式是新安裝在搭載 Android 13 以上版本的裝置上:

    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
  • 如果在以下裝置上安裝應用程式,使用者將保持啟用通知: 搭載 12L 以下版本的裝置,然後 升級至 Android 13 以上版本:

    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
  • 當使用者手動停用裝置的通知功能, 搭載 12L 以下版本的裝置,然後 升級至 Android 13 以上版本:

    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

最佳做法

本節說明幾種在應用程式中使用新通知權限最有效的方式。

更新應用程式的目標 SDK 版本

為了讓應用程式有更多彈性,更靈活地調整權限對話方塊的顯示時機: 請更新您的應用程式,指定 Android 13 以上版本。

等候顯示通知權限提示

要求使用者授予任何權限前,請先讓他們熟悉 互動情形

新使用者可能會想探索應用程式,並且親自體驗 優點你可以 觸發權限提示 吸引使用者動作以下列舉幾個範例 顯示通知權限提示的好時機:

  • 使用者輕觸「快訊鈴鐺」按鈕。
  • 使用者選擇追蹤他人的社群媒體帳戶。
  • 使用者提交餐點外送訂單。

圖 1 顯示要求通知的建議工作流程 權限。除非 shouldShowRequestPermissionRationale()敬上 會傳回 true,則應用程式不需要顯示中間螢幕,也就是 標題文字為「接收通知!」。

或者,您也可以設定在使用者有機會 熟悉您的應用程式舉例來說,您可能等到 第三次或第四次啟動應用程式

使用者登入後,會看到
   即可接收行程更新通知。使用者按下廣告後
   我按下了按鈕,那應用程式要求新權限,導致系統
   對話方塊
圖 1. 要求時提供的使用者導向建議工作流程 授予通知權限只有在出現 shouldShowRequestPermissionRationale() 會傳回 true

在相關情境中要求權限

在應用程式中要求通知權限時,請在正確的層級中 以便明確瞭解通知的用途,以及 以及使用者選擇啟用的理由舉例來說,電子郵件應用程式可能提供以下選項: 在每次有新電子郵件時傳送通知,或只傳送通知給使用者 僅限收件者。

請善用這個機會公開說明您的意圖,這樣使用者將通知權限授予應用程式的可能性也會提高。

檢查應用程式是否能傳送通知

在應用程式傳送通知前,請先確認使用者是否已啟用 通知應用程式方法是呼叫 areNotificationsEnabled()

以負責任的態度使用權限

獲準傳送通知後,請記得使用這項權限 過度執著於語意可能會讓我們 忘記核心目標,也就是負責任地開發技術使用者可以查看應用程式的每日通知數量 傳送和 他們可以撤銷