消息推送(Push)就是通過(guò)服務(wù)器把內(nèi)容主動(dòng)發(fā)送到客戶端的過(guò)程。運(yùn)營(yíng)人員通過(guò)自己的產(chǎn)品或第三方工具對(duì)用戶移動(dòng)設(shè)備進(jìn)行主動(dòng)消息推送。完成推送后,消息通知會(huì)展示在移動(dòng)設(shè)備的鎖定屏幕及通知欄上,用戶點(diǎn)擊通知即可去往相應(yīng)頁(yè)面。
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比麗江網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式麗江網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋麗江地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。
現(xiàn)在流行的消息推送實(shí)現(xiàn)方式,主要為長(zhǎng)鏈接方式實(shí)現(xiàn)。其原理是客戶端主動(dòng)和服務(wù)器建立TCP長(zhǎng)鏈接,長(zhǎng)鏈接建立之后,客戶端定期向服務(wù)器發(fā)送心跳包用于保持鏈接,當(dāng)有消息要發(fā)送的時(shí)候,服務(wù)器可以直接通過(guò)這個(gè)已經(jīng)建立好的長(zhǎng)鏈接,將消息發(fā)送到客戶端。
個(gè)推作為國(guó)內(nèi)移動(dòng)推送領(lǐng)域的早期進(jìn)入者,于2010年推出個(gè)推消息推送SDK產(chǎn)品,十余年來(lái)持續(xù)為移動(dòng)開(kāi)發(fā)者提供穩(wěn)定、高效、智能的消息推送服務(wù),成功服務(wù)了人民日?qǐng)?bào)、新華社、CCTV、新浪微博等在內(nèi)的數(shù)十萬(wàn)APP客戶。個(gè)推消息推送,也是運(yùn)用長(zhǎng)鏈接的方式實(shí)現(xiàn)消息推送的,其長(zhǎng)鏈接穩(wěn)定性高、存活好,消息送達(dá)率高。開(kāi)發(fā)者通過(guò)集成個(gè)推消息推送SDK,即可簡(jiǎn)單、快捷地實(shí)現(xiàn)Android和iOS平臺(tái)的消息推送功能,有效提高產(chǎn)品活躍度、增加用戶留存。
如果您對(duì)個(gè)推消息推送感興趣,歡迎前往個(gè)推開(kāi)發(fā)者中心免費(fèi)注冊(cè)體驗(yàn)。
個(gè)推的合作客戶
MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測(cè)傳輸)是IBM開(kāi)發(fā)的一個(gè)即時(shí)通訊協(xié)議。它是一種發(fā)布/訂閱,極其簡(jiǎn)單和輕量級(jí)的消息傳遞協(xié)議,專為受限設(shè)備和低帶寬,高延遲或不可靠的網(wǎng)絡(luò)而設(shè)計(jì)。它的設(shè)計(jì)思想是輕巧、開(kāi)放、簡(jiǎn)單、規(guī)范,易于實(shí)現(xiàn)。這些特點(diǎn)使得它對(duì)很多場(chǎng)景來(lái)說(shuō)都是很好的選擇,特別是對(duì)于受限的環(huán)境如機(jī)器與機(jī)器的通信(M2M)以及物聯(lián)網(wǎng)環(huán)境。相對(duì)于XMPP,MQTT更加輕量級(jí),并且占用的寬帶低。
MQTT協(xié)議有以下特點(diǎn):
那么問(wèn)題來(lái)了?重連連接成功后重復(fù)接收到最后一條消息
MQTT推送消息訂閱端重復(fù)接收問(wèn)題。
(背景)訂閱端斷開(kāi)的時(shí)候,發(fā)布端多次推送消息。
(現(xiàn)象)訂閱端啟動(dòng)時(shí),接收到最后一條推送消息有兩次;即使Qos設(shè)置為2;依然是兩次。
經(jīng)排查是因?yàn)?/p>
MqttMessage的Retained設(shè)置為了true;
該值很多文章上只說(shuō)了是 消息保留機(jī)制,若設(shè)置為true,mqtt服務(wù)器會(huì)保留每次發(fā)布的消息;較少提到 若訂閱某主題的客戶端重啟,則會(huì)把此主題之前發(fā)布的消息重新推送到客戶端。該值默認(rèn)為false;去掉修改該值即可
那么問(wèn)題來(lái)了?重連連接后手動(dòng)那么多遺漏的消息,怎么選擇只接收最新的一條消息呢?
MQTT推送消息訂閱端重復(fù)接收問(wèn)題。
(背景)訂閱端斷開(kāi)的時(shí)候,發(fā)布端多次推送消息。
(現(xiàn)象)訂閱端啟動(dòng)時(shí),接收到msg1,msg2,msg3 (這三個(gè)消息都是同一個(gè)類型消息,只需要處理最新的msg3就好,不然界面會(huì)刷新三次)這個(gè)誰(shuí)有什么好辦法沒(méi)呢?
GitHub地址:
mqtt的官方文檔:
Github上有中文翻譯:
在module的build.gradle文件中添加依賴
在 AndroidManifest.xml 添加限權(quán)
在 AndroidManifest.xml 注冊(cè)Service (MyMqttService為自己寫的服務(wù),下文會(huì)講到)
IM即時(shí)通訊開(kāi)發(fā)如何實(shí)現(xiàn)Android版智能心跳機(jī)制。
大體思路
a)延遲心跳測(cè)試法:這是測(cè)試結(jié)果準(zhǔn)確的前提保障,我們認(rèn)為長(zhǎng)連接建立后連續(xù)三次成功的短心跳就可以很大程度的保證下一次心跳環(huán)境是正常的。
b)成功一次認(rèn)定,失敗連續(xù)累積認(rèn)定:成功是絕對(duì)的,連續(xù)失敗多次才可能是失敗。
c)臨界值避免:我們使用比計(jì)算出的心跳稍微小一點(diǎn)的值做為穩(wěn)定心跳避免臨界值。
d)動(dòng)態(tài)調(diào)整:即使在一次完整的智能心跳計(jì)算過(guò)程中,我們沒(méi)有找到最好的值,我們還有機(jī)會(huì)來(lái)進(jìn)行校正。
方案需考慮到影響連接壽命的思素
在Android下,不管是GCM,還是微信,都是通過(guò)TCP長(zhǎng)連接來(lái)進(jìn)行消息收發(fā)的,TCP長(zhǎng)連接存活,消息收發(fā)就及時(shí),所以要對(duì)影響TCP連接壽命的因素進(jìn)行研究。
1、NAT超時(shí)
大部分移動(dòng)無(wú)線網(wǎng)絡(luò)運(yùn)營(yíng)商都在鏈路一段時(shí)間沒(méi)有數(shù)據(jù)通訊時(shí),會(huì)淘汰 NAT 表中的對(duì)應(yīng)項(xiàng),造成鏈路中斷(NAT超時(shí)的更多描述見(jiàn)附錄9.1)。NAT超時(shí)是影響TCP連接壽命的一個(gè)重要因素(尤其是國(guó)內(nèi)),所以客戶端自動(dòng)測(cè)算NAT超時(shí)時(shí)間,來(lái)動(dòng)態(tài)調(diào)整心跳間隔,是一個(gè)重要的優(yōu)化點(diǎn)。
2、DHCP的租期 (lease time)
目前測(cè)試發(fā)現(xiàn)安卓系統(tǒng)對(duì)DHCP的處理有Bug,DHCP租期到了不會(huì)主動(dòng)續(xù)約并且會(huì)繼續(xù)使用過(guò)期IP,這個(gè)問(wèn)題會(huì)造成TCP長(zhǎng)連接偶然的斷連。(租期問(wèn)題的具體描述見(jiàn)附錄9.2)。
3、網(wǎng)絡(luò)狀態(tài)變化
手機(jī)網(wǎng)絡(luò)和WIFI網(wǎng)絡(luò)切換、網(wǎng)絡(luò)斷開(kāi)和連上等情況有網(wǎng)絡(luò)狀態(tài)的變化,也會(huì)使長(zhǎng)連接變?yōu)闊o(wú)效連接,需要監(jiān)聽(tīng)響應(yīng)的網(wǎng)絡(luò)狀態(tài)變化事件,重新建立Push長(zhǎng)連接。
心跳范圍選擇
1、前后臺(tái)區(qū)分處理:
為了保證微信收消息及時(shí)性的體驗(yàn),當(dāng)微信處于前臺(tái)活躍狀態(tài)時(shí),使用固定心跳。微信進(jìn)入后臺(tái)(或者前臺(tái)關(guān)屏)時(shí),先用幾次最小心跳維持長(zhǎng)鏈接。然后進(jìn)入后臺(tái)自適應(yīng)心跳計(jì)算。這樣做的目的是盡量選擇用戶不活躍的時(shí)間段,來(lái)減少心跳計(jì)算可能產(chǎn)生的消息不及時(shí)收取影響。
2、后臺(tái)自適應(yīng)心跳選擇區(qū)間:
可根據(jù)自身產(chǎn)品的特點(diǎn)選擇合適的心跳范圍。
自適應(yīng)心跳算法量化描述
因?yàn)槊總€(gè)網(wǎng)絡(luò)的NAT時(shí)間可能不一致。所以需要區(qū)分計(jì)算,數(shù)據(jù)網(wǎng)絡(luò)按subType做關(guān)鍵字,WIFI按WIFI名做關(guān)鍵字。對(duì)穩(wěn)定的網(wǎng)絡(luò),因?yàn)镹AT老化時(shí)間的存在,在自適應(yīng)計(jì)算態(tài)的時(shí)候,暫設(shè)計(jì)以下步驟在當(dāng)前心跳區(qū)間逼近出最大可用的心跳。 即時(shí)通訊聊天軟件app開(kāi)發(fā)可以加蔚可云的v:weikeyun24咨詢
a)變量說(shuō)明:
[MinHeart,MaxHeart]——心跳可選區(qū)間。
successHeart——當(dāng)前成功心跳,初始為MinHeart
curHeart——當(dāng)前心跳初始值為successHeart
heartStep——心跳增加步長(zhǎng)
successStep——穩(wěn)定期后的探測(cè)步長(zhǎng)
經(jīng)過(guò)該流程,會(huì)找到必然使心跳失敗的curHeart(或者M(jìn)axHeart),為了保險(xiǎn)起見(jiàn),我們選擇比前一個(gè)成功值稍微小一點(diǎn)的值作為后臺(tái)穩(wěn)定期的心跳間隔。
影響手機(jī)網(wǎng)絡(luò)測(cè)試的因素太多,為了盡量保證測(cè)試結(jié)果的可靠性,我們使用延遲心跳測(cè)試法。在我們重新建立TCP連接后,先使用??短心跳連續(xù)成功三次,我們才認(rèn)為網(wǎng)絡(luò)相對(duì)穩(wěn)定,可以使用curHeart進(jìn)行一次心跳測(cè)試。圖4-2顯示了一次有效心跳測(cè)試過(guò)程。圖4-3顯示了在沒(méi)有達(dá)到穩(wěn)定網(wǎng)絡(luò)環(huán)境時(shí),我們會(huì)一直使用固定短心跳直到滿足三次連續(xù)短心跳成功。
使用延遲心跳測(cè)試的好處是,可以剔除偶然失敗,和網(wǎng)絡(luò)變化較大的情況(如地鐵),使測(cè)試結(jié)果相對(duì)可靠(五次延遲測(cè)試確定結(jié)論)。同時(shí)在網(wǎng)絡(luò)波動(dòng)較大的情況,使用短心跳,保證收取消息相對(duì)及時(shí)。
c)運(yùn)行時(shí)的動(dòng)態(tài)調(diào)整策略(已經(jīng)按測(cè)算心跳穩(wěn)定值后)
NAT超時(shí)值算出來(lái)后,在維持心跳的過(guò)程中的策略。
-??無(wú)網(wǎng)絡(luò)、網(wǎng)絡(luò)時(shí)好時(shí)壞、偶然失敗、NAT超時(shí)變小:
在后臺(tái)穩(wěn)定期發(fā)生心跳發(fā)生失敗后,我們使用延遲心跳測(cè)試法測(cè)試五次。如果有一次成功,則保持當(dāng)前心跳值不變;如果五次測(cè)試全失敗,重新計(jì)算合理心跳值。該過(guò)程如圖4-4所示,有一點(diǎn)需要注意,每個(gè)新建的長(zhǎng)連接需要先用短心跳成功維持3次后才用successHeart進(jìn)行心跳。
NAT超時(shí)變大:
以周為周期,每周三將后臺(tái)穩(wěn)定態(tài)調(diào)至自適應(yīng)計(jì)算態(tài),使用心跳延遲法往后探測(cè)心跳間隔。
-??successHeart是NAT超時(shí)臨界值:
因?yàn)槲覀儸F(xiàn)在選擇的是一個(gè)比successHeart稍小的值作為穩(wěn)定值,所以在計(jì)算過(guò)程中可以避開(kāi)臨界值。當(dāng)運(yùn)營(yíng)商在我們后臺(tái)穩(wěn)定期將NAT超時(shí)調(diào)整為我們當(dāng)前計(jì)算值,那么由于我們每周會(huì)去向下探索,所以下一周探測(cè)時(shí)也可以及時(shí)調(diào)整正確。
d)冗余Sync和心跳
在用戶的一些主動(dòng)操作以及聯(lián)網(wǎng)狀態(tài)改變時(shí),增加冗余Sync和心跳,確保及時(shí)收到消息。
1、當(dāng)用戶點(diǎn)亮屏幕的時(shí)候,做一次心跳。
2、當(dāng)微信切換到前臺(tái)時(shí),做一次Sync。
3、聯(lián)網(wǎng)時(shí)重建信令TCP,做一次Sync。
可能存在的風(fēng)險(xiǎn)及預(yù)防措施
DHCP租期因素:
1、問(wèn)題:根據(jù)目前的測(cè)試結(jié)果顯示,安卓不續(xù)約到期的IP Bug,會(huì)導(dǎo)致TCP連接在不確定的時(shí)間點(diǎn)失效,從而會(huì)導(dǎo)致一次心跳失敗。
2、預(yù)防:統(tǒng)計(jì)后臺(tái)穩(wěn)定期的心跳成功率,上報(bào)給后臺(tái)。后臺(tái)可以按地區(qū)分網(wǎng)絡(luò)監(jiān)控這個(gè)指標(biāo)的波動(dòng),并且后臺(tái)可以根據(jù)不同的波動(dòng),動(dòng)態(tài)調(diào)整某區(qū)域特定網(wǎng)絡(luò)下可選的心跳區(qū)間。
NAT超時(shí)介紹
因?yàn)?IP v4 的 IP 量有限,運(yùn)營(yíng)商分配給手機(jī)終端的 IP 是運(yùn)營(yíng)商內(nèi)網(wǎng)的 IP,手機(jī)要連接 Internet,就需要通過(guò)運(yùn)營(yíng)商的網(wǎng)關(guān)做一個(gè)網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation,NAT)。簡(jiǎn)單的說(shuō)運(yùn)營(yíng)商的網(wǎng)關(guān)需要維護(hù)一個(gè)外網(wǎng) IP、端口到內(nèi)網(wǎng) IP、端口的對(duì)應(yīng)關(guān)系,以確保內(nèi)網(wǎng)的手機(jī)可以跟 Internet 的服務(wù)器通訊。
對(duì)于IM應(yīng)用和消息推送服務(wù)的開(kāi)發(fā)者來(lái)說(shuō),在Android機(jī)型上的后臺(tái)保活是個(gè)相當(dāng)頭疼的問(wèn)題。
老板一句:“為什么微信、QQ能收到消息,而你寫的APP卻不行?”,直接讓人崩潰,話說(shuō)老板你這APP要是整成微信、APP那么牛,直接進(jìn)手機(jī)廠商白名單,還要程序員在這瞎忙活?
好了,抱怨歸抱怨,活還得干,不然靠誰(shuí)養(yǎng)活廣大苦逼的程序員?
正因?yàn)锳ndroid系統(tǒng)版本的差異,也導(dǎo)致了各種保活黑科技的運(yùn)行效果大相徑庭,所以本文正好借此機(jī)會(huì),盤點(diǎn)一下當(dāng)前主流(截止2019年前)的保活黑科技在市面上各版本Android手機(jī)上的運(yùn)行效果,希望能給大家提供一些客觀的參考。
其實(shí)Android端APP搞保活的目的倒不是為了干什么見(jiàn)不得人的壞事(但不排除動(dòng)機(jī)不純的開(kāi)發(fā)者),主要是像IM即時(shí)通訊應(yīng)用和資訊類應(yīng)用等需要搞后臺(tái)消息推送、運(yùn)動(dòng)類應(yīng)用需要在后臺(tái)實(shí)時(shí)監(jiān)測(cè)用戶的運(yùn)動(dòng)數(shù)據(jù)等,因?yàn)楝F(xiàn)在越來(lái)越多的手機(jī)廠商為了省電策略考慮,基本上如果你的應(yīng)用沒(méi)有被加入白名單,一旦處于后臺(tái)就會(huì)被系統(tǒng)限制甚至干掉,但使用APP的用戶才不聽(tīng)你這些解釋——反正“我”就要你的APP能如期正常運(yùn)行,開(kāi)發(fā)者也是不得已而為之。
以消息推送為例,當(dāng)APP處于后臺(tái)或關(guān)閉時(shí),消息推送對(duì)于某些應(yīng)用來(lái)說(shuō)非常有用,比如:
1)IM即時(shí)通訊聊天應(yīng)用:聊天消息通知、音視頻聊天呼叫等,典型代表有:微信、QQ、易信、米聊、釘釘、Whatsup、Line;
2)新聞資訊應(yīng)用:最新資訊通知等,典型代表有:網(wǎng)易新聞客戶端、騰訊新聞客戶端;
3)SNS社交應(yīng)用:轉(zhuǎn)發(fā)/關(guān)注/贊等通知,典型代表有:微博、知乎;
4)郵箱客戶端:新郵件通知等,典型代表有:QQ郵箱客戶端、Foxmail客戶端、網(wǎng)易郵箱大師;
5)金融支付應(yīng)用:收款通知、轉(zhuǎn)賬通知等,典型代表有:支付寶、各大銀行的手機(jī)銀行等;
? .... ....
在上述的各種應(yīng)用中,尤其對(duì)于用戶接觸最多、最平常的IM聊天應(yīng)用或新聞資訊來(lái)說(shuō),保活和消息推送簡(jiǎn)直事關(guān)APP的“生死”,消息推送這種能力已經(jīng)被越來(lái)越多的APP作為基礎(chǔ)能力之一,因?yàn)橐苿?dòng)互聯(lián)網(wǎng)時(shí)代下,用戶的“全時(shí)在線”能力非常誘人和強(qiáng)大,能隨時(shí)隨地即時(shí)地將各種重要信息推送給用戶,無(wú)疑是非常有意義的。
題外話:實(shí)際上,對(duì)于后臺(tái)消息推送能力,Android原版系統(tǒng)早就內(nèi)置了系統(tǒng)級(jí)推送服務(wù)(跟iOS上的APNs服務(wù)是一個(gè)東西),它就是GCM服務(wù)(現(xiàn)在升級(jí)為FCM了),但眾所周之的原因,谷哥的服務(wù)在國(guó)內(nèi)都是用不了的(你懂的)——無(wú)奈啊!
主要黑科技方案有:
1)監(jiān)聽(tīng)廣播:監(jiān)聽(tīng)全局的靜態(tài)廣播,比如時(shí)間更新的廣播、開(kāi)機(jī)廣播、解鎖屏、網(wǎng)絡(luò)狀態(tài)、解鎖加鎖亮屏暗屏(3.1版本),高版本需要應(yīng)用開(kāi)機(jī)后運(yùn)行一次才能監(jiān)聽(tīng)這些系統(tǒng)廣播,目前此方案失效。可以更換思路,做APP啟動(dòng)后的保活(監(jiān)聽(tīng)廣播啟動(dòng)保活的前臺(tái)服務(wù));
2)定時(shí)器、JobScheduler:假如應(yīng)用被系統(tǒng)殺死,那么定時(shí)器則失效,此方案失效。JobService在5.0,5.1,6.0作用很大,7.0時(shí)候有一定影響(可以在電源管理中給APP授權(quán));
3)雙進(jìn)程(NDK方式Fork子進(jìn)程)、雙Service守護(hù):高版本已失效,5.0起系統(tǒng)回收策略改成進(jìn)程組。雙Service方案也改成了應(yīng)用被殺,任何后臺(tái)Service無(wú)法正常狀態(tài)運(yùn)行;
4)提高Service優(yōu)先級(jí):只能一定程度上緩解Service被立馬回收。 即時(shí)通訊聊天軟件app開(kāi)發(fā)可以咨詢蔚可云。
針對(duì)上述方案,具體的實(shí)現(xiàn)思路,通常是這樣的:
1)進(jìn)程拉活:AIDL方式單進(jìn)程、雙進(jìn)程方式保活Service(最極端的例子就是推送廠商的互相喚醒復(fù)活:極光、友盟、以及各大廠商的推送,同派系A(chǔ)PP廣播互相喚醒:比如今日頭條系、阿里系);
2)降低oom_adj的值:常駐通知欄(可通過(guò)啟動(dòng)另外一個(gè)服務(wù)關(guān)閉Notification,不對(duì)oom_adj值有影響)、使用”1像素“的Activity覆蓋在getWindow()的view上(據(jù)傳某不可言說(shuō)的IM大廠用過(guò)這個(gè)方案,雖然他們從未正面承認(rèn)過(guò))、循環(huán)播放無(wú)聲音頻(黑科技,7.0下殺不掉);
3)監(jiān)聽(tīng)鎖屏廣播:使Activity始終保持前臺(tái);
4)使用自定義鎖屏界面:覆蓋了系統(tǒng)鎖屏界面;
5)創(chuàng)建子進(jìn)程:通過(guò)android:process屬性來(lái)為Service創(chuàng)建一個(gè)進(jìn)程;
6)白名單:跳轉(zhuǎn)到系統(tǒng)白名單界面讓用戶自己添加app進(jìn)入白名單。
使用AIDL綁定方式新建2個(gè)Service優(yōu)先級(jí)(防止服務(wù)同時(shí)被系統(tǒng)殺死)不一樣的守護(hù)進(jìn)程互相拉起對(duì)方,并在每一個(gè)守護(hù)進(jìn)程的ServiceConnection的綁定回調(diào)里判斷保活Service是否需要重新拉起和對(duì)守護(hù)線程進(jìn)行重新綁定。
后臺(tái)播放音樂(lè)這種保活方法,親身經(jīng)歷過(guò):
記得當(dāng)時(shí)用的是某運(yùn)動(dòng)記步APP,它為了保活就是這么干的。之所以被我發(fā)現(xiàn),是因?yàn)樵谖业腁ndroid手機(jī)上,每次打開(kāi)這個(gè)APP居然總能莫名其妙聽(tīng)到若有若無(wú)的環(huán)境噪音樣的聲音,尤其安靜的場(chǎng)所下更明顯。我個(gè)人估計(jì)這個(gè)APP里用的保活音頻文件,很可能就是程序員在簡(jiǎn)陋的條件下隨手自已錄制的,雖然也是不得以為之,但做法確實(shí)是有點(diǎn)粗糙。
總結(jié)一下,以上方案在當(dāng)前主流手機(jī)上的運(yùn)行效果
【1】雙進(jìn)程守護(hù)方案(基于onStartCommand() return START_STICKY):
1)原生5.0、5.1:原生任務(wù)欄滑動(dòng)清理app,Service會(huì)被殺掉,然后被拉起,接著一直存活;
2)金立F100(5.1):一鍵清理直接殺掉整個(gè)app,包括雙守護(hù)進(jìn)程。不手動(dòng)清理情況下,經(jīng)測(cè)試能鎖屏存活至少40分鐘;
3)華為暢享5x(6.0):一鍵清理直接殺掉整個(gè)app,包括雙守護(hù)進(jìn)程。不手動(dòng)清理下,鎖屏只存活10s。結(jié)論:雙進(jìn)程守護(hù)方案失效;
4)美圖m8s(7.1.1):一鍵清理直接殺掉整個(gè)app,包括雙守護(hù)進(jìn)程。不清理情況下,鎖屏?xí)斜粴⑦^(guò)程(9分鐘左右被殺),之后重新復(fù)活,之后不斷被干掉然后又重新復(fù)活。結(jié)論:雙守護(hù)進(jìn)程可在后臺(tái)不斷拉起Service;
5)原生7.0:任務(wù)欄清除APP后,Service存活。使用此方案后Service照樣存活;
6)LG V30+(7.1.2):不加雙進(jìn)程守護(hù)的時(shí)候,一鍵清理無(wú)法殺掉服務(wù)。加了此方案之后也不能殺掉服務(wù),鎖屏存活(測(cè)試觀察大于50分鐘);
7)小米8(8.1):一鍵清理直接干掉app并且包括雙守護(hù)進(jìn)程。不清理情況下,不加守護(hù)進(jìn)程方案與加守護(hù)進(jìn)程方案Service會(huì)一直存活,12分鐘左右closed。結(jié)論:此方案沒(méi)有起作用。
▲ 結(jié)論:除了華為此方案無(wú)效以及未更改底層的廠商不起作用外(START_STICKY字段就可以保持Service不被殺)。此方案可以與其他方案混合使用。
【2】監(jiān)聽(tīng)鎖屏廣播打開(kāi)1像素Activity(基于onStartCommand() return START_STICKY):
1)原生5.0、5.1:鎖屏后3s服務(wù)被干掉然后重啟(START_STICKY字段起作用);
2)華為暢享5x(6.0):鎖屏只存活4s。結(jié)論:方案失效;
3)美圖m8s(7.1.1):同原生5.0;
4)原生7.0:同美圖m8s;
5)LG V30+(7.1.2):鎖屏后情況跟不加情況一致,服務(wù)一致保持運(yùn)行,結(jié)論:此方案不起作用;
6)小米8(8.1):關(guān)屏過(guò)2s之后app全部被干掉。結(jié)論:此方案沒(méi)有起作用。
▲ 結(jié)論:此方案無(wú)效果。
【3】故意在后臺(tái)播放無(wú)聲的音樂(lè)(基于onStartCommand() return START_STICKY):
1)原生5.0、5.1:鎖屏后3s服務(wù)被干掉然后重啟(START_STICKY字段起作用);
2)華為暢享5x(6.0):一鍵清理后服務(wù)依然存活,需要單獨(dú)清理才可殺掉服務(wù),鎖屏8分鐘后依然存活。結(jié)論:此方案適用;
3)美圖m8s(7.1.1):同5.0;
4)原生7.0:任務(wù)管理器中關(guān)閉APP后服務(wù)被干掉,大概過(guò)3s會(huì)重新復(fù)活(同僅START_STICKY字段模式)。結(jié)論:看不出此方案有沒(méi)有其作用;
5)LG V30+(7.1.2):使用此方案前后效果一致。結(jié)論:此方案不起作用;
6)小米8(8.1):一鍵清理可以殺掉服務(wù)。鎖屏后保活超過(guò)20分鐘。
▲ 結(jié)論:成功對(duì)華為手機(jī)保活。小米8下也成功突破20分鐘。
【4】使用JobScheduler喚醒Service(基于onStartCommand() return START_STICKY):
1)原生5.0、5.1:任務(wù)管理器中干掉APP,服務(wù)會(huì)在周期時(shí)間后重新啟動(dòng)。結(jié)論:此方案起作用;
2)華為暢享5x(6.0):一鍵清理直接殺掉APP,過(guò)12s左右會(huì)自動(dòng)重啟服務(wù),JobScheduler起作用;
3)美圖m8s(7.1.1):一鍵清理直接殺掉APP,無(wú)法自動(dòng)重啟;
4)原生7.0:同美圖m8s(7.1.1);
5)小米8(8.1):同美圖m8s(7.1.1)。
▲ 結(jié)論:只對(duì)5.0,5.1、6.0起作用。
【5】混合使用的效果,并且在通知欄彈出通知:
1)原生5.0、5.1:任務(wù)管理器中干掉APP,服務(wù)會(huì)在周期時(shí)間后重新啟動(dòng)。鎖屏超過(guò)11分鐘存活;
2)華為暢享5x(6.0):一鍵清理后服務(wù)依然存活,需要單獨(dú)清理才可殺掉服務(wù)。結(jié)論:方案適用;
3)美圖m8s(7.1.1):一鍵清理APP會(huì)被殺掉。正常情況下鎖屏后服務(wù)依然存活;
4)原生7.0:任務(wù)管理器中關(guān)閉APP后服務(wù)被干掉,過(guò)2s會(huì)重新復(fù)活;
5)小米8(8.1):一鍵清理可以殺掉服務(wù),鎖屏下后臺(tái)保活時(shí)間超過(guò)38分鐘;
6)榮耀10(8.0):一鍵清理殺掉服務(wù),鎖屏下后臺(tái)保活時(shí)間超過(guò)23分鐘。
1、Share SDK官網(wǎng) 。免費(fèi)集成注冊(cè)短信驗(yàn)證碼,友好的分享功能。
2、環(huán)信sdk。主要是集成,聊天相關(guān)sdk。
3、Ping++聚合支付。解決集成支付sdk。
4、友盟分享、統(tǒng)計(jì)。
5、百度統(tǒng)計(jì)
6、極光推送、個(gè)推推送
7、360加固服務(wù)
8、百度加固、統(tǒng)計(jì)服務(wù)
9、融云通訊---即時(shí)通訊
10、容聯(lián) 云通訊
11、極速數(shù)據(jù)、阿凡達(dá)數(shù)據(jù)、聚合數(shù)據(jù)
開(kāi)源即時(shí)通訊軟件最著名的當(dāng)屬Telegram。
Telegram(非正式簡(jiǎn)稱TG)是跨平臺(tái)的即時(shí)通信軟件,其客戶端是自由及開(kāi)放源代碼軟件,但服務(wù)端是專有軟件。用戶可以相互交換加密與自毀消息、發(fā)送照片、視頻等所有類型文件。官方提供手機(jī)版(Android、iOS、Windows Phone)、桌面版(Windows、macOS、Linux)和網(wǎng)頁(yè)版等多種平臺(tái)客戶端;同時(shí)官方開(kāi)放應(yīng)用程序接口(API),因此擁有許多第三方的客戶端可供選擇。
2020年4月,全球活躍用戶突破4億人次。2021年1月,創(chuàng)辦人公布每月活躍用戶數(shù)目突破5億。
Telegram的特色功能
秘密聊天
秘密聊天是專為那些比一般人希望獲得更高安全性的人們所設(shè)計(jì)的功能。秘密聊天的內(nèi)容全部都是以直接的端到端加密來(lái)傳輸。這代表只有你與秘密聊天的對(duì)方,才能讀取到這些聊天消息 , 沒(méi)有任何其他人可以破解它們,包含Telegram團(tuán)隊(duì)本身。此外,秘密聊天消息也無(wú)法被轉(zhuǎn)寄。而你也可借由設(shè)置在對(duì)方讀取消息后的特定時(shí)間,自動(dòng)銷毀消息內(nèi)容,這樣一來(lái)不論你或者對(duì)方設(shè)備上的該消息就會(huì)永久消失。秘密和一般聊天之間的最后一個(gè)區(qū)別就是,秘密聊天的內(nèi)容不會(huì)存儲(chǔ)在云端服務(wù)器。你只能從秘密聊天雙方的設(shè)備中訪問(wèn)這些消息。
機(jī)器人
在2015年6月,Telegram開(kāi)放了機(jī)器人API,在2017年5月支持了付款功能。機(jī)器人是Telegram上以程序運(yùn)作的賬號(hào),可以回復(fù)人類的指令、消息,視開(kāi)發(fā)者設(shè)置而異。另一種功能稱為內(nèi)聯(lián)機(jī)器人,支持快速發(fā)送相關(guān)的GIF動(dòng)圖、圖片,其來(lái)自網(wǎng)絡(luò)、YouTube視頻、維基百科的文章,等等。
語(yǔ)音通話
2017年3月,Telegram 官方應(yīng)用程序新增了語(yǔ)音通話功能。這采用了跟秘密聊天相同的端到端加密技術(shù),在網(wǎng)絡(luò)環(huán)境許可的情況下,會(huì)采用端對(duì)端傳輸,否則會(huì)經(jīng)由最近的服務(wù)器連線。
即時(shí)查看
在2017年5月時(shí)推出的新功能,并同時(shí)引導(dǎo)為期一個(gè)月的競(jìng)賽,提供總額250,000美元的獎(jiǎng)金,完善了對(duì)兩千多個(gè)主要網(wǎng)站的支持。
頻道
頻道為單向傳遞消息予大量訂閱用戶的功能。可訂閱頻道的人數(shù)沒(méi)有上限,但訂閱者不能在頻道中留言。另外,頻道中的消息下方有已觀看次數(shù)。
翻譯平臺(tái)
用戶可以通過(guò)翻譯平臺(tái)(頁(yè)面存檔備份,存于互聯(lián)網(wǎng)檔案館)安裝官方未支持的語(yǔ)言及參與翻譯。
飛秋
大名鼎鼎的oicq啊,pidgen(可能拼的不準(zhǔn))啊
當(dāng)前文章:關(guān)于android即時(shí)通訊的信息
文章源于:http://vcdvsql.cn/article20/dsdioco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、標(biāo)簽優(yōu)化、電子商務(wù)、域名注冊(cè)、微信公眾號(hào)、定制開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)