設定及管理訊息優先順序

在 Android 上,您可以選擇將一般或高優先順序指派給下游訊息。一般和高優先順序訊息的傳送方式如下:

  • 一般優先順序。這是資料和通知訊息的預設優先順序。 如果裝置未處於休眠狀態,系統會立即傳送優先層級為「一般」的訊息。裝置處於打盹模式時,為了節省電力,系統可能會延遲傳送訊息,直到裝置退出打盹模式為止。如果是時間敏感度較低的訊息,例如新郵件通知、保持 UI 同步,或在背景同步處理應用程式資料,請選擇一般傳送優先順序。

  • 高優先順序。FCM 會嘗試立即傳送高優先順序訊息,允許 FCM 在必要時喚醒休眠裝置,並執行部分有限的處理作業 (包括非常有限的網路存取權)。高優先權訊息通常會促使使用者與應用程式或通知互動。

決定郵件的優先順序 (高或一般)

一般優先順序訊息適用於一般更新,但如需確保緊急事項或動作能立即送達,請選擇高優先順序。由於一般優先順序訊息的傳送時間可能會受到「微休眠」模式影響,因此將大部分使用者可見的通知設為高優先順序,可確保通知及時傳送。舉例來說,即時通訊訊息、帳戶問題或外送進度等通知應設為高優先順序。

處理高優先順序和一般優先順序訊息

在 Android 裝置上收到高優先順序和一般優先順序通知時,系統會提供幾秒時間,在 onMessageReceived 處理常式中處理訊息酬載。如果任何通知需要非同步處理訊息酬載,建議您使用 WorkManager 等建構函式,因為這可能會超過提供給 onMessageReceived 處理常式的時間。

如果是優先順序較高的訊息,您可以透過 Android WorkManager 排定急件工作,確保這些通知的優先順序較高,並順利執行完畢。

如果是優先順序一般的訊息,您可以使用 Android WorkManager 排定一般 OneTimeWorkRequest。這樣一來,系統就會處理額外必要工作,但不會使用優先處理程序。

設定郵件優先順序

您可以使用 Admin SDKFCM REST API 和 Firebase 控制台,向使用者傳送通知。如要透過 Admin SDK 和 FCM REST API 變更優先順序設定,請更新訊息 JSON 酬載。您可以參考下列程式碼範例,瞭解如何將優先順序設為高。如果是從控制台傳送的通知,則不支援設定 Android 專屬通知欄位。

 {
  "message": {
      "notification": {
          "body": "Purchase exceeding $500 detected",
          "title": "Credit card purchase"
      },
      "data": {
          "purchaser": "Your child",
          "items": "Gravity Defier Sneakers"
      },
      "android": {
          "priority": "high"
      },
      "apns": {
          "headers": {
              "apns-priority": "5"
          }
      }
  }
}

在微光模式下測試高優先順序通知

如要確保使用者收到高優先權通知時,系統能正確接收及處理通知,請按照下列操作說明測試通知:

  1. 按照「使用 Doze 測試應用程式」一文中的操作說明,將裝置設為 Doze 模式。
  2. 在測試裝置上,從應用程式存取 FCM 註冊權杖。如要進一步瞭解如何存取權杖,請參閱「將測試訊息傳送至背景應用程式」。
  3. 取得 FCM 權杖後,請使用 FCM 通知傳送程式碼或 cURL 指令,將高優先順序通知傳送至測試裝置。請務必使用與高優先順序通知相符的設定參數。

Android 裝置上高優先順序 FCM 的優先順序降低

Android 上的高優先順序訊息適用於時效性高、使用者可見的內容,且應會產生面向使用者的通知。如果 FCM 偵測到訊息未產生面向使用者的通知,系統可能會將訊息優先順序降為一般,或委派 Google Play 服務處理。

FCM 會根據 7 天的訊息行為,判斷是否要降低訊息優先順序或將訊息設為 Proxy;系統會針對應用程式的每個執行個體,獨立做出這項判斷。如果系統在收到高優先順序訊息時,會向使用者顯示通知,日後的高優先順序訊息就不會受到影響。

透過 Google Play 服務委派通知

如果高優先順序通知訊息符合特定條件,Google Play 服務會改為透過 Proxy 傳送,而非降低優先順序。也就是說,通知是由 Google Play 服務代表應用程式顯示,完全不需要啟動應用程式。這麼做是為了在 Android 裝置上提供更優質的整體使用者體驗。

請注意,透過 Proxy 傳送的通知訊息會改變系統回報訊息接收相關數據的方式:

  • 如要回報代理通知的 Analytics 資料,應用程式必須使用 FCM SDK 24.0.0 以上版本。
  • 您可能會發現,與導入代理通知前相比,收到的訊息數量有所延遲或減少。這是因為系統只會在應用程式啟動後回報代理通知的數據分析資料,如果通知未開啟應用程式,系統可能不會回報任何資料。

如果應用程式使用 Android Q 以上版本和 Google Play 服務 19054000 以上版本,預設會以這種方式轉送通知訊息。透過 HTTP v1 API 傳送的訊息會經過 Proxy,但透過 Firebase 控制台或舊版 API 傳送的訊息不會經過 Proxy。請注意,這項功能目前為 Beta 版,未來可能會有變動。

雖然我們強烈建議啟用委派功能,以利裝置電池和記憶體,但您仍可透過下列任一方式停用這項功能:

  • 以應用程式層級為準:在應用程式資訊清單中新增 <meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/> 指令。
  • 以應用程式執行個體為準:視具體用途而定,在應用程式的 UI 流程中設定 fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!>
  • 針對每則訊息:在傳送要求的 AndroidNotification 物件中,將 proxy 鍵設為 DENY

評估 Android 裝置上訊息的優先順序降低情形

  • 個別訊息。傳送時,您可以比較 getPriority() 傳送的優先順序與 getOriginalPriority() 的原始優先順序,判斷個別訊息是否遭到降級。

  • 所有訊息FCM Aggregate Delivery Data API 可回報傳送至 Android 的所有訊息中,遭降級的百分比。匯總資料報表可能會省略部分郵件,但整體而言,這些報表應能提供郵件降級率的全球概況。如需更多資訊和查詢 API 的程式碼範例,請參閱匯總放送資料一文,也可以透過 API 探索工具探索。

  • 經過 Proxy 處理的通知。系統不會將代理通知計入目前的 FCM 或 Google Analytics 傳送指標,因此通知傳送指標最多可能會下降 15%。如要回報透過 Proxy 傳送的訊息,請使用 FCM Aggregate Delivery Data APIProxyNotificationInsightPercents 會回報成功代理通知的百分比,以及無法成功代理的訊息詳細資料。

排解通知延遲問題

  • 確認應用程式執行個體已啟用通知。如果使用者已停用應用程式的通知權限,系統就不會發布任何通知,因此訊息的優先順序會降低。傳送高優先順序訊息給應用程式例項前,請先確認已啟用通知

  • 處理通知時,請避免發出額外的網路呼叫。由於部分 Android 行動裝置使用者連線的網路延遲較高,請避免在顯示通知前開啟與伺服器的連線。在允許的處理時間結束前回呼伺服器,可能會對高延遲網路上的使用者造成風險。

    請改為在 FCM 訊息中加入通知內容,並立即顯示。如要在 Android 上同步處理其他應用程式內內容,可以透過 WorkManager 排定工作,在背景處理這類內容。