應用程式的通知推送可以讓使用者即時收到重要的訊息,但Google提到,這是一個常被忽略,卻常會消耗許多電力的原因,像是高優先等級的通知,可以將手機從瞌睡省電模式(Doze mode)喚醒,並且從網路擷取推送通知的資料,而這個動作很容易把手機的電量榨乾。

推特認為,電池壽命屬於行動用戶體驗重要的一部分,因此一直以來,他們盡力的降低應用程式對使用者手機電池電力的影響,而在推送通知功能上也做出了改變。在今年推特將通知訊息函式庫從Google雲端推送(GCM)遷移到了Firebase雲端推送(FCM),由於FCM提供更多的功能,讓推特可以掌握電力資訊,也可以使用getPriority()以及getOriginalPriority()這類API,監控FCM的訊息優先度是否遭到系統降級。

推特的後端也會將通知設定,配置為適當的優先等級,以確保高優先等級的FCM訊息,僅用於產生使用者真正想要快速看見的通知,推特表示,他們發送的通知只有一小部分設置為高優先等級。而在Android 9(Pie版)才加入的應用程式等待桶(App Standby Buckets),會根據應用程式所屬的存儲桶,對接收高優先等級的訊息數量加以限制,因此高優先等級的訊息應該留在更有可能與使用者產生互動的通知,任意使用於不需要用戶交互操作的訊息,一旦應用程式耗盡應用程式等待桶中的配額,後續真正緊急的訊息將會被降級成一般等級,在裝置進入瞌睡省電模式被延遲。

推特為確保訊息傳送的品質,收集了應用程式傳送與交付訊息的時間,對通知優先度進行統計分析。雖然推特應用程式在2%的裝置中,被分配在應用程式等待桶中的頻繁(Frequent)或是更低等級的桶中,但是沒有任何通知訊息被降級,另外,當推特後端傳送高優先等級FCM訊息時,推特在86%的裝置的應用程式等待桶被分配到了活躍(Active)等級,推特提到,這代表他們對於訊息優先等級分配與使用者習慣一致。

而推特也提到,預先提取資料是一種流行的做法,可以增加使用者在收到通知之後的體驗,但這個技術必須要在通知的有效酬載(Payload)加入一段元資料,當發送通知時,應用程式利用有效酬載資料啟動網路呼叫,以在顯示通知之前,下載更多的資料。
FCM有效酬載有最大4KB限制,當需要更多資料來產生豐富的通知時,需要使用資料預先提取技術。但這項技術有其缺點,除了會延遲通知推送外,也會增加裝置耗電量。推特將這樣的通知數量降到1%以下,並在無可避免的情況下,使用JobScheduler或WorkManager對任務進行調度,以避免後臺執行限制問題。

Android在Oreo版本之後,加入了通知頻道(Notification Channels)功能,在考量使用者體驗與節能的情況下,推特的Android版應用程式有9個通知頻道,其中只有直接訊息傳遞、緊急情況和安全性被設計為高重要程度,大多數的頻道重要性設置為低以減少干擾。

開發者可以透過謹慎的處理通知推送、限制預先提取以及設計通知頻道來改善應用程式的耗電量,藉以延長使用者裝置的續航力。


Advertisement

更多 iThome相關內容