伊莉討論區

標題: 關於Android推播服務 [打印本頁]

作者: RainieYang    時間: 2018-11-22 05:12 PM     標題: 關於Android推播服務

安安,小弟想問一下關於FCM(Firebase Cloud Message)的推送服務。

事情是這樣,小弟目前寫的專案,會用到自己架的Server當中繼站,去接收某個手機(假設叫A)發出來的命令,然後經過Server處理後再去通知 "另一台手機"(假設叫B)去做事。

然後小弟目前的寫法,B那端要能順利收到通知,必須有一個Service保持存活,才能收到通知。
那個Server不能被殺掉,所以我把它設成Foreground Service,但好像還是無法在所有手機都保持他能永久存活。

聽說還有FCM推播服務可以用,那小弟想問的就是這個FCM的相關特性,主要問題有下面幾點:
1.FCM服務要能順利收到通知,是否需要自己寫的App保持存活?  (如果是的話就沒意義了,畢竟就是怕被殺才想換FCM)
2.FCM收到通知後,能否在那個時機點讓她幫我啟動我的APP?  還是真的單純就是只能顯示一個推播通知?

作者: jackyo04    時間: 2018-11-23 08:23 AM

如果能儲存用戶的手機號碼,可以透過GCM來通知(不知道還有沒有...),FCM基本上是要你後台存在才行,所以你要透過一些方法,讓你的程式屬於系統程式,就可以讓它被殺掉後,還會自行產生..通常這種東西,是我很不願意做的,除非客戶要求,因為要了解各廠手機的設定
作者: mountainboy    時間: 2018-11-23 09:32 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: RainieYang    時間: 2018-12-1 12:54 PM

mountainboy 發表於 2018-11-23 09:32 AM
FCM 是估狗的雲端簡訊系統(Firebase 是一家搞雲端簡訊的公司,2014被估狗併購)。
1.FCM服務要能順利收 ...

感謝 但這麼說的話 是否app需要活著? 不能被系統殺掉?



作者: mountainboy    時間: 2018-12-1 09:39 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: RainieYang    時間: 2018-12-2 07:35 AM

mountainboy 發表於 2018-12-1 09:39 PM
Andriod 系統不會殺掉你的App!如果你開App後,按Home,那個App會跳到背景執行。
但FCM在前景和背景傳送 ...

嗯 但之前寫app測試的時候,  service是可能被殺的,不同手機行為不同,有的能活久一點,但很難撐過7天,有些手機甚至3天就掛了,不是crash 也不是anr(沒有跳出crash or anr訊息 ),但總之app看來是被終止了,重點會全部重啟,目前似乎很難保證app長時間絕對不被系統殺掉,所以才有所謂的雙進程保活手段,或是有些開發者甚至考慮把app弄成系統層級吧?(但需root )
作者: mountainboy    時間: 2018-12-2 08:46 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: codewice    時間: 2018-12-11 11:20 PM

RainieYang 發表於 2018-12-2 07:35 AM
嗯 但之前寫app測試的時候,  service是可能被殺的,不同手機行為不同,有的能活久一點,但很難撐過7天, ...

Android 系統的設計,每個 App 都有機會被砍掉,包括裡面的 Activity 跟 Service,因為 Android 砍 app 的時候是從 Linux kernel 的角度切入,針對某一個 process 去砍,而 Activity/Service 都跑在 process 之下。

理論上在設計 Android app 的架構時,就要假設自己的 Activity / Service 隨時會被砍掉,在這個前提下去設計架構與流程。

甚至在 Developer options 裡面就有一個「Don't keep activity」的選項,讓開發者隨時模擬記憶體不足而被砍掉的情況,確保自己開發的產品不會在這一點上出大問題。

幾年前看的心得,但是很久沒看原始碼了所以不清楚有沒有大的變動,還請熟悉這塊的網友糾正。基本上系統會針對每個 process 去排定優先權,記憶體不夠的時候從優先權最低的開始砍。一般來說 foreground activity (使用者正在看的畫面) 有最高的優先權,其次差不多是 foreground service, launcher, background activity/service,順序可能有誤,但原則是 1) 看得見得最重要 2) 系統的 app 次之 3) launcher 次之 4) 除此之外看不見的 app 最不重要。記憶體不足的時候就從優先權低的開始砍起。

有時候一個 app 開久了,按 Home 鍵跳回去桌面,看到一堆圖示重新跳出來,多半就是 Launcher 剛剛被砍掉了。

中國那邊滿多在研究「保活」的人,所以中國的程式很多為了「做到最好的用戶體驗」,每個都死不願意被系統砍掉。Android 官方也一直努力在改進這一塊,我覺得這應該會是貓捉老鼠的遊戲,一邊拼命想打死,一邊拼命想活下來。
作者: codewice    時間: 2018-12-11 11:20 PM

本帖最後由 codewice 於 2018-12-11 11:22 PM 編輯

(不小心 reload,竟然重複張貼了文章。找不到刪除鈕,所以把文章內容修掉)

作者: codewice    時間: 2018-12-11 11:20 PM

本帖最後由 codewice 於 2018-12-11 11:23 PM 編輯

(不小心 reload,竟然重複張貼了文章。找不到刪除鈕,所以把文章內容修掉)
作者: sheauren    時間: 2018-12-20 03:57 PM

用FCM推android app有data段與notification段兩段資料
notification段會在手機上面那排banner跳提示
data段是直接送到app的fcm接收的service上
你只丟data段不要寫notificaiton的情況
手機收到fcm的時候,就算app停止執行狀態,會主動把你的app service啟動起來處理該message
不過記得servce當時可能沒有任何activity是可以使用的,只有context

作者: hughor181    時間: 2018-12-21 11:35 AM

在部份中國手機如果不把應用設為能在背景運行很常會被殺掉service




歡迎光臨 伊莉討論區 (http://www19.eyny.com/) Powered by Discuz!