通知執行階段權限

Android 13 (API 級別 33) 以上版本支援 執行階段權限,用於傳送 非豁免 (包括前景服務 (FGS)) 通知 從應用程式: POST_NOTIFICATIONS。 這項變更可協助使用者關注自己最重視的通知。

我們強烈建議您盡快指定 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()

以負責任的態度使用權限

在獲得核准可傳送通知後,請務必以負責的態度使用這項權限。使用者可以查看應用程式的每日通知數量 傳送 他們可以撤銷