UnifiedPush是不依賴Google的Android通知推送服務。
目前已經有一些開源APP開發者採用此機制,取代Google FCM來推送通知。
1. Google FCM推送通知的問題#
Android APP要推送通知,最簡單的方法是常駐一個服務在背景,但絕對不能讓每個APP都這樣做,這會很耗電,變成你用綠色守護都殺不完。
推送和接受通知,需要有一個統一的管道。
在自由世界,Google主導的Firebase Cloud Messaging(簡稱FCM)乃是最受歡迎的,內建於GMS服務。開發者可以免費使用FCM推送訊息。所有的APP的通知都由GMS在手機上統一處理,避免每個APP要各自發送通知導致的混亂情況。
在中國大陸,Google服務不可用,所以是看各家如何實作。一些廠商如小米、Oppo、華為、中興加入了统一推送联盟以消弭這個問題。總覺得這個隱私問題比FCM過之有無不及。
講回FCM,一些人認為這個推送機制有隱私問題,儘管傳輸過程會使用HTTPS加密,但在Google伺服器是明碼處理的,Google服務理論上能讀取到所有訊息內容。開發者需要在APP額外做E2EE加密手續。
還有,在F-Droid建置的APP不可以依賴Google服務,這會導致APP無法使用FCM,致使通知出現問題。
再者,Degoogle的用戶若不裝microG,可能也會收不到FCM的訊息。
2. UnifiedPush簡介#
UnifiedPush便是嘗試解決依賴FCM的問題。建立一個不依賴Google,去中心化的通知推送系統。
讓APP可以用統一的方式推送通知,由一個APP固定接收,避免各個APP彼此獨立運作耗電的問題。
UnifiedPush採用的規範與Web Push相容。
參考官網原理圖,UnifiedPush是去中心化的技術。APP送出通知之後,需要一個伺服器(Distributor)負責轉發訊息,再由手機上的APP收發。這裡伺服器可以自架,也能使用Mozilla的公共伺服器代發。
UnifiedPush傳輸過程訊息全部加密,你可以選擇用信得過的開源組織維護的伺服器轉發,也可以選擇全程自架伺服器。
UnifiedPush不是相容FCM的API,APP開發者要主動支援UnifiedPush才行。
即使UnifiedPush連線不可用,開發者也能選擇讓APP回退到FCM來推送通知。反過來說,使用FCM推送通知的APP,也可以採用UnifiedPush當作備案。
雖然UnifiedPush是專為Android手機設計的技術,但是他的架構也可以推廣到Linux桌面。已經有名為KUnifiedPush的實作出現。
3. 實際設定方法#
參考官網列表,目前支援UnifiedPush的APP還不是很多的樣子,以開源通訊APP為主,例如Matrix和Mastodon。
首先安裝Distributor。ntfy是提供自架伺服器的UnifiedPush Distributor,提供REST API。有公用節點。需要註冊帳號才能使用。如果不想這麼麻煩的,你可以安裝Sunup,不用註冊,使用Mozilla的Push Server。
然後安裝要使用UnifiedPush的APP。以Matrix客戶端Element X為例。在F-Droid下載,不要從Play商店下載。因為F-Droid的APP不能依賴FCM,所以它會要求你使用UnifiedPush(設定 → 通知 → 疑難排解通知)

安裝好之後,Element X會自動偵測到Sunup的存在,使用這個服務推送通知。不過Sunup會有個通知一直常駐在通知欄,得將其長按關閉。

至於瀏覽器部份,官方版Firefox不支援UnifiedPush,需要使用Fennec或IronFox這類fork才行。使用者需要手動在設定裡面勾選使用UnitifedPush傳送通知。
