APNS推送原理及證書鑒權(quán)

以下所有內(nèi)容均為個(gè)人觀點(diǎn),轉(zhuǎn)載請注明出處<簡書--小蝸牛吱呀之悠悠 >,謝謝陨收!

工作的某一天,線上APP的推送服務(wù)突然失效了鸵赖,源于解決這個(gè)問題务漩,整理歸納一下APNS推送和證書的底層邏輯。

一它褪、推送的簡單流程

image.png

推送大致流程如上圖所示饵骨,簡單來說是服務(wù)端將消息發(fā)送給APNS,然后由APNS將消息推送給手機(jī)茫打,在手機(jī)收到消息后進(jìn)行進(jìn)一步的處理居触,最后展示出來妖混。這個(gè)流程包括了第三方推送(個(gè)推、極光轮洋、友盟等)制市,只是第三方推送在圖中第一第二環(huán)節(jié)增加了處理,代替我們自己的服務(wù)端去和蘋果交互弊予。另外祥楣,圖中所示的Extension環(huán)節(jié)是推送消息在手機(jī)展示前,由APP開發(fā)者進(jìn)行處理的最后一環(huán)節(jié)汉柒,可以修改展示的內(nèi)容荣堰,包括文字、增加圖片等竭翠,如果想要進(jìn)一步了解這個(gè)環(huán)節(jié)的實(shí)現(xiàn)步驟,可以參考我另一篇文章iOS極光推送帶圖片模式

二薇搁、各環(huán)節(jié)具體做了什么事情

前面我們簡單介紹了一下推送的基本流程斋扰,這一節(jié)我們具體聊聊每一個(gè)環(huán)節(jié)到底做了什么,是如何將消息一個(gè)環(huán)節(jié)一個(gè)環(huán)節(jié)成功傳遞的啃洋。

1传货、推送證書的原理

我們都知道,要實(shí)現(xiàn)iOS的消息推送宏娄,需要準(zhǔn)備好推送證書问裕,并且開啟推送服務(wù)。現(xiàn)在我們來簡單回顧一下推送證書是如何申請的孵坚。
首先粮宛,我們需要從鑰匙串中申請一個(gè)CSR文件
申請步驟:打開鑰匙串,如下圖:


iCSR申請.png

填寫信息后就可以生成如下圖所示的CSR文件


CSR文件

然后找到蘋果開發(fā)者網(wǎng)站中創(chuàng)建證書的地方卖宠,將CSR上傳巍杈,并創(chuàng)建證書,然后將證書下載下來安裝即可扛伍。
image.png
    在上述環(huán)節(jié)中筷畦,涉及到兩個(gè)東西(CSR文件、.cer后綴的推送證書)刺洒,這兩個(gè)文件里面是什么鳖宾?有什么作用?
    蘋果官方有一對密鑰逆航,私鑰在蘋果后臺(tái)鼎文,公鑰在iOS系統(tǒng)中(出廠后就已經(jīng)攜帶),姑且稱作公鑰(iOS)纸泡、私鑰(iOS)漂问;

在MAC中請求CSR文件時(shí)赖瞒,會(huì)生成一對公鑰(mac)、私鑰(mac)蚤假。

生成CSR的時(shí)候栏饮,由MAC創(chuàng)建公私鑰,并將公鑰(mac)放入CSR磷仰,當(dāng)我們將CSR文件上傳到開發(fā)者平臺(tái)時(shí)袍嬉,蘋果會(huì)用私鑰(iOS)對公鑰(mac)進(jìn)行簽名,生成.cer證書文件灶平。也就是說伺通,CSR攜帶公鑰(mac),.cer證書包含了加密后的CSR和一些其他的權(quán)限信息逢享。

那推送證書在推送的過程是怎么發(fā)揮作用的呢罐监?在理解這個(gè)問題之前,我們先了解一下app是怎么安裝到手機(jī)上的瞒爬。

2弓柱、APP安裝時(shí)簽名、驗(yàn)簽過程

1侧但、首先矢空,在使用Xcode對APP進(jìn)行打包的時(shí)候,會(huì)用私鑰(mac)對包進(jìn)行簽名禀横,然后把描述文件一起放到包里屁药。

由于發(fā)布APP需要發(fā)布證書(product.cer),根據(jù)我們前面的介紹柏锄,這個(gè)證書也是攜帶了CSR的酿箭,并且是被私鑰(iOS)加密的。
2绢彤、在完成第一步后七问,Xcode會(huì)將發(fā)布證書、設(shè)備信息茫舶、APPID等內(nèi)容一并使用私鑰(iOS)再加密簽名一次

3械巡、最后,將步驟1饶氏、步驟2的產(chǎn)物一起組成ipa包讥耗,然后發(fā)布到App Store。

4疹启、當(dāng)用戶下載APP安裝時(shí)古程,手機(jī)會(huì)用出廠時(shí)就攜帶的公鑰(iOS)對ipa包解密(步驟2的產(chǎn)物兩次解密),得到步驟1的產(chǎn)物喊崖、發(fā)布證書挣磨、設(shè)備信息等內(nèi)容雇逞。

到這里,一個(gè)ipa包被拆解為這些內(nèi)容:用私鑰(mac)對.app包簽名后的描述文件茁裙、用私鑰(iOS)對CSR簽名的證書塘砸。

5、用公鑰(iOS)對證書解簽晤锥,得到CSR掉蔬,并從CSR文件中拿到公鑰(mac)

6、用步驟5得到的公鑰(mac)再去解簽描述文件矾瘾,得到.app包女轿。

在上述過程中,公私鑰(iOS)主要起到蘋果授權(quán)的作用壕翩,公私鑰(mac)主要起到校驗(yàn)包是否被篡改的作用蛉迹。

3、推送是如何通信鑒權(quán)的

了解了APP安裝的流程后放妈,我們知道婿禽,在APP打包過程,會(huì)將證書等信息放到包里進(jìn)行加密大猛,推送證書也就是這個(gè)環(huán)節(jié)被放到了包里。那么推送是怎么完成閉環(huán)的呢淀零?接下來我們看下面這張圖:


image.png

完成完整的推送挽绩,大致有下面幾個(gè)環(huán)節(jié):

步驟一:啟動(dòng)APP時(shí),通常會(huì)去請求推送權(quán)限驾中,當(dāng)用戶點(diǎn)擊允許后唉堪,手機(jī)就會(huì)拿著設(shè)備標(biāo)識(shí)、推送證書發(fā)送給APNS服務(wù)器肩民,蘋果收到這些信息后唠亚,會(huì)根據(jù)推送證書、設(shè)備標(biāo)識(shí)持痰、APP信息去驗(yàn)證是否具有推送權(quán)限灶搜,如果有推送權(quán)限,蘋果會(huì)將這臺(tái)設(shè)備信息放入推送列表中工窍。

步驟二:在蘋果通過權(quán)限校驗(yàn)后割卖,會(huì)根據(jù)設(shè)備標(biāo)識(shí)和APP標(biāo)識(shí)生成一個(gè)deviceToken,并將這個(gè)deviceToken返回給APP患雏。

步驟三:deviceToken送達(dá)手機(jī)后鹏溯,會(huì)在APP中的下述方法告知開發(fā)者

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

當(dāng)這個(gè)方法回調(diào)時(shí)攜帶deviceToken后,根據(jù)接入推送服務(wù)的不同淹仑,可以分為自己服務(wù)器和第三方服務(wù)器丙挽。如果是自己的服務(wù)器實(shí)現(xiàn)推送(七魚)肺孵,則將deviceToken直接傳給后端即可;如果是接入了第三方SDK颜阐,則傳給第三方服務(wù)商的后端平窘,后續(xù)的推送則由第三方完成

步驟四:當(dāng)服務(wù)器有消息需要推送給APP時(shí),服務(wù)器會(huì)攜帶推送證書和推送的消息體去通知APNS(如果是第三方推送瞬浓,由服務(wù)器推送消息給第三方后端初婆,由第三方去連接APNS)。

步驟五:APNS收到需要推送的消息后猿棉,對攜帶的證書進(jìn)行鑒權(quán)磅叛,如果通過,則根據(jù)APNS的推送規(guī)則萨赁,將消息下發(fā)給手機(jī)弊琴。

步驟六:當(dāng)手機(jī)收到來自蘋果的推送消息后,在展示前會(huì)先判斷開發(fā)者是否有實(shí)現(xiàn)推送消息攔截杖爽,如果沒有敲董,則直接展示;如果有實(shí)現(xiàn)攔截慰安,則交給開發(fā)者處理腋寨。

三、證書被刪或者過期

如果無意之中把推送證書刪了化焕,或者是證書過期失效了萄窜,這時(shí)候該怎么辦?
首先需要將原有的無效的證書清理干凈撒桨,并在開發(fā)者中心找到你APP的標(biāo)識(shí)


image.png

進(jìn)入到自己APP的服務(wù)列表里查刻,找到推送服務(wù),重新編輯或者創(chuàng)建證書


image.png

接下來的步驟就和上文中提到的步驟一模一樣了凤类。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末穗泵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子谜疤,更是在濱河造成了極大的恐慌佃延,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夷磕,死亡現(xiàn)場離奇詭異苇侵,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)企锌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門榆浓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人撕攒,你說我怎么就攤上這事陡鹃『嫫郑” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵萍鲸,是天一觀的道長闷叉。 經(jīng)常有香客問我,道長脊阴,這世上最難降的妖魔是什么握侧? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮嘿期,結(jié)果婚禮上品擎,老公的妹妹穿的比我還像新娘。我一直安慰自己备徐,他們只是感情好萄传,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜜猾,像睡著了一般秀菱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蹭睡,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天衍菱,我揣著相機(jī)與錄音,去河邊找鬼肩豁。 笑死梦碗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蓖救。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼印屁,長吁一口氣:“原來是場噩夢啊……” “哼循捺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起雄人,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤从橘,失蹤者是張志新(化名)和其女友劉穎攒读,沒想到半個(gè)月后派继,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陡蝇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年旗吁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了踩萎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡很钓,死狀恐怖香府,靈堂內(nèi)的尸體忽然破棺而出董栽,到底是詐尸還是另有隱情,我是刑警寧澤企孩,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布锭碳,位于F島的核電站,受9級(jí)特大地震影響勿璃,放射性物質(zhì)發(fā)生泄漏擒抛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一补疑、第九天 我趴在偏房一處隱蔽的房頂上張望歧沪。 院中可真熱鬧,春花似錦癣丧、人聲如沸槽畔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厢钧。三九已至,卻和暖如春嬉橙,著一層夾襖步出監(jiān)牢的瞬間早直,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工市框, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留霞扬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓枫振,卻偏偏與公主長得像喻圃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子粪滤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容