通知執行階段權限

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()

以負責任的態度使用權限

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