三歪已經(jīng)慌了
自從做了推送以后,每隔一段時(shí)間就發(fā)現(xiàn)有各大的公司推送事故出現(xiàn)。



你問(wèn)我做開(kāi)發(fā)的慌不慌,我當(dāng)然慌得一批了。
為什么經(jīng)常會(huì)有推送事故
為什么會(huì)經(jīng)常出現(xiàn)類似的事故呢?我認(rèn)為最主要的原因是:預(yù)發(fā)和線上的環(huán)境是同一套。
眾所周知,我們的系統(tǒng)都有幾套的環(huán)境(比如說(shuō)本地/線下/預(yù)發(fā)/線上 環(huán)境),其中大多數(shù)公司的預(yù)發(fā)和線上環(huán)境數(shù)據(jù)庫(kù)是同一套的,只是預(yù)發(fā)環(huán)境調(diào)用的是預(yù)發(fā)環(huán)境的接口,線上環(huán)境調(diào)用的是線上環(huán)境的接口而已。
推送這種系統(tǒng)的線上和預(yù)發(fā)環(huán)境其實(shí)沒(méi)多大的區(qū)別,因?yàn)樵诘讓邮钦{(diào)用外部的接口來(lái)實(shí)現(xiàn)發(fā)送的,所以預(yù)發(fā)和線上環(huán)境其實(shí)調(diào)的都是同一個(gè)接口。

科普一下推送是怎么做的
之前寫(xiě)過(guò)一篇關(guān)于推送的文章,也算是科普了一把什么是推送消息,有興趣的同學(xué)可以去看看:三歪帶你了解什么是Push消息推送。這次在上面的文章基礎(chǔ)上補(bǔ)全一下。
Push推送消息能夠在你手機(jī)閉屏?xí)r(即便你沒(méi)有打開(kāi)APP),通過(guò)通知來(lái)給你推送信息,是一種能夠直接觸達(dá)用戶的消息推送
要給用戶下發(fā)消息,我們得維護(hù)APP 客戶端和服務(wù)端的「長(zhǎng)連接心跳」。這個(gè)長(zhǎng)連接心跳如果由我們自行來(lái)維護(hù),難度會(huì)很大,絕大部分的公司不會(huì)自建推送服務(wù)。
目前我們手機(jī)類型分為兩種:安卓和iOS。
iOS我們默認(rèn)走的是官方推送的渠道APNS。iOS 在系統(tǒng)層面與蘋果 APNs(Apple Push Notification service)服務(wù)器建立連接,系統(tǒng)收到 APNs 服務(wù)器消息后會(huì)幫我們轉(zhuǎn)發(fā)到相應(yīng)的APP上
安卓由于Google在國(guó)內(nèi)訪問(wèn)不穩(wěn)定,在國(guó)內(nèi)暫未統(tǒng)一掉推送服務(wù)。目前更多的是眾多的手機(jī)廠商在其定制的系統(tǒng)中也內(nèi)置了推送功能,如小米、華為等。由于接入成本的問(wèn)題,也出現(xiàn)了大量的第三方推送服務(wù)提供商,比如個(gè)推、極光、友盟。
工信部牽頭成立的“安卓統(tǒng)一推送聯(lián)盟”還在期待中
總結(jié):
iOS端我們更多用的是APNs服務(wù)器下發(fā)推送消息
安卓端由于接入成本的問(wèn)題,更多的是接入各個(gè)第三方推送服務(wù)提供商,第三方推送服務(wù)提供商也會(huì)接入對(duì)應(yīng)的手機(jī)廠商來(lái)實(shí)現(xiàn)對(duì)消息的下發(fā)
我們做了什么預(yù)防推送事故?
在大多數(shù)情況下,推送事故往往是「運(yùn)營(yíng)」的推送導(dǎo)致的。運(yùn)營(yíng)要推送消息給用戶,首先需要圈選一個(gè)人群去推送。
人群量需要管控:我們?cè)谌x的時(shí)候,如果運(yùn)營(yíng)圈定的人數(shù)大于一個(gè)閾值,我們會(huì)走郵箱讓主管確認(rèn)是否需要圈選這么一個(gè)大的人群去推送。
這塊有兩個(gè)目的:
首先我們是認(rèn)為推送的人群應(yīng)該是精細(xì)化的,什么標(biāo)簽的人群應(yīng)該收到什么的推送。不應(yīng)該圈定一個(gè)龐大的人群去推送同一條文案的消息(新聞APP除外)。
即便出了事故,也只是一部分用戶能收到,而不是全體用戶。
在我們的系統(tǒng)是沒(méi)有全體用戶推送的。

在運(yùn)營(yíng)圈定人群后,我們會(huì)有單獨(dú)的測(cè)試功能去「測(cè)試單個(gè)用戶」是否能正常下發(fā)消息,文案鏈接是否存在問(wèn)題。
這一個(gè)步驟是必須要做的,給用戶發(fā)出的消息,首先要經(jīng)過(guò)自己的校驗(yàn)。如果確認(rèn)鏈接和文案都無(wú)問(wèn)題后,則提交任務(wù),走工單審批后才能發(fā)送。

如果在啟動(dòng)之后發(fā)現(xiàn)文案/鏈接存在問(wèn)題,還可以攔截剩余未發(fā)的消息。

針對(duì)于通知類的消息(技術(shù)方推送),我們?cè)陬A(yù)發(fā)環(huán)境下配置了「白名單」才能收到消息。
線上消息有「去重」的邏輯:
在某段時(shí)間內(nèi),過(guò)濾掉重復(fù)消息
運(yùn)營(yíng)類消息推送(圈定人群的方式去下發(fā)消息)同一個(gè)用戶需要相隔一段時(shí)間才能下發(fā)一次。

雖然說(shuō),我們制定了很多的規(guī)則去盡量避免事故的發(fā)生,但不得不說(shuō)推送還是一個(gè)容易出現(xiàn)事故的功能。
我的牛逼已經(jīng)吹完了,如果某天發(fā)現(xiàn)我的推送出了事故,不要@我,當(dāng)沒(méi)見(jiàn)過(guò)這篇文章就好。
??各類知識(shí)點(diǎn)總結(jié)
下面的文章都有對(duì)應(yīng)的原創(chuàng)精美PDF,在持續(xù)更新中,可以來(lái)找我催更~
掃碼或者微信搜Java3y?免費(fèi)領(lǐng)取原創(chuàng)思維導(dǎo)圖、精美PDF。在公眾號(hào)回復(fù)「888」領(lǐng)取,PDF內(nèi)容純手打有任何不懂歡迎來(lái)問(wèn)我。
原創(chuàng)電子書(shū)
原創(chuàng)思維導(dǎo)圖

![]() |
|


