您可以為 Android 上的下游訊息指派傳送優先順序,有兩種方式:一般和高優先順序。一般和高優先順序訊息的傳送方式如下:
一般優先順序。這是資料和通知訊息的預設優先順序。 裝置未處於休眠狀態時,系統會立即傳送一般優先順序訊息。當裝置處於打盹模式時,系統可能會延遲傳送,以節省電力,直到裝置退出打盹模式為止。如果是較不受時間限制的訊息,例如新電子郵件的通知、保持 UI 同步,或在背景同步處理應用程式資料,請選擇一般傳送優先順序。
高優先順序。FCM 會嘗試立即傳送高優先順序訊息,讓 FCM 在必要時喚醒休眠中的裝置,並執行一些受限的處理作業 (包括非常有限的網路存取)。高優先順序訊息通常應促使使用者與應用程式或其通知互動。
決定使用高優先順序和一般優先順序訊息
一般優先順序訊息適合用於一般更新,但如果需要確保立即傳送緊急事項或行動,請選擇高優先順序。由於 Doze 模式可能會影響一般優先訊息的傳送時間,因此將大部分可供使用者查看的通知設為高優先順序,可確保這些通知能迅速傳送。舉例來說,即時通訊訊息、帳戶問題或外送餐點更新等通知,應設為高優先順序。
高優先順序和一般優先順序訊息的訊息處理
無論是在 Android 裝置上收到高優先順序通知或一般優先順序通知,都會在 onMessageReceived
處理常式中花費幾秒鐘處理訊息酬載。對於需要非同步處理訊息酬載的任何通知,建議您使用 WorkManager 等結構,因為這可能會超過提供給 onMessageReceived
處理常式的時間。
針對高優先順序訊息,您可以使用 Android WorkManager 排定用急件工作,確保這些通知的優先順序,並執行至完成。
如要傳送一般優先順序訊息,您可以使用 Android WorkManager 排定一般 OneTimeWorkRequest。這樣一來,系統就能處理額外必要的工作,而無須使用優先處理功能。
設定郵件優先順序
您可以使用 Admin SDK、FCM 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"
}
}
}
}
在 Doze 模式中測試高優先順序通知
為確保使用者收到高優先順序通知時,系統能正確接收及處理通知,請按照下列指示測試通知:
- 按照「使用 Doze 測試應用程式」一文的操作說明,將裝置設為 Doze 模式。
- 在測試裝置上透過應用程式存取 FCM 註冊權杖。如要進一步瞭解如何存取權杖,請參閱「將測試訊息傳送至背景應用程式」。
- 取得 FCM 權杖後,請使用 FCM 通知傳送代碼或 cURL 指令%3B%0A%7D)-,cURL,-curl%20%2DX),將高優先順序通知傳送至測試裝置,其中包含與高優先順序通知相符的設定參數。
在 Android 上降低高優先順序 FCM 的優先順序
Android 上的高優先順序訊息適用於時間敏感且使用者可見的內容,應會產生使用者可見的通知。如果 FCM 偵測到訊息不會產生使用者通知的模式,系統可能會將訊息降至一般優先順序,或是委派給 Google Play 服務處理。
FCM 會使用 7 天的訊息行為,判斷是否要降低訊息優先順序或使用訊息代理程式;它會針對應用程式的每個執行個體獨立做出這項判斷。如果您在回應高優先順序訊息時,以使用者可見的方式顯示通知,日後的高優先順序訊息就不會受到影響。
使用 Google Play 服務的通知委派
符合特定條件的高優先順序通知訊息會由 Google Play 服務代管,而不會降低優先順序。也就是說,Google Play 服務會代替應用程式顯示通知,無須啟動應用程式。這樣一來,就能在 Android 裝置上提供更優質的整體使用者體驗。
請注意,代理通知訊息會改變與收到訊息相關的數據分析回報方式:
- 如要回報代理通知的數據分析資料,應用程式必須使用 FCM SDK 24.0.0 以上版本。
- 您可能會發現,與導入 Proxy 通知前相比,收到的訊息數量有所延遲或減少。這是因為代理通知的數據分析只有在應用程式啟動時才會回報,如果通知並未導致應用程式開啟,可能就不會回報。
對於使用 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 Explorer 探索相關資訊。
經過 Proxy 處理的通知。代理通知不會計入目前的 FCM 或 GA 提交指標,因此通知提交指標可能會下降最多 15%。如要回報代理訊息,請使用 FCM Aggregate Delivery Data API。
ProxyNotificationInsightPercents
會回報成功轉送通知的百分比,以及無法成功轉送的通知詳細資料。
排解通知延遲問題
請確認應用程式執行個體已啟用通知功能。如果使用者已停用應用程式的通知權限,系統就不會發布任何通知,因此您的訊息會降低優先順序。請先確認通知已啟用,再將高優先順序訊息傳送至應用程式執行個體。
處理通知時,請避免發出其他網路呼叫。由於 Android 行動裝置使用者中有小部分人使用高延遲網路,因此請勿在顯示通知前開啟與伺服器的連線。在允許的處理時間結束前回撥至伺服器,可能會對高延遲網路的使用者造成風險。
請改為在 FCM 訊息中加入通知內容,並立即顯示。如果您需要在 Android 上同步處理其他應用程式內容,可以使用 WorkManager 安排工作,在背景處理這項工作。