iOS消息推送機(jī)制的實(shí)現(xiàn)iOS消息推送機(jī)制的實(shí)現(xiàn)

地址:http://www.cnblogs.com/qq78292959/archive/2012/07/16/2593651.html

iOS消息推送的工作機(jī)制可以簡(jiǎn)單的用下圖來(lái)概括:

Provider是指某個(gè)iPhone軟件的Push服務(wù)器示辈,APNS是Apple Push Notification Service的縮寫蜈块,是蘋果的服務(wù)器。

上圖可以分為三個(gè)階段:

第一階段:應(yīng)用程序把要發(fā)送的消息雳刺、目的iPhone的標(biāo)識(shí)打包,發(fā)給APNS鳍贾。

第二階段:APNS在自身的已注冊(cè)Push服務(wù)的iPhone列表中尽超,查找有相應(yīng)標(biāo)識(shí)的iPhone额嘿,并把消息發(fā)送到iPhone。

第三階段:iPhone把發(fā)來(lái)的消息傳遞給相應(yīng)的應(yīng)用程序吨述,并且按照設(shè)定彈出Push通知岩睁。

從上圖我們可以看到:

1、應(yīng)用程序注冊(cè)消息推送揣云。

2捕儒、iOS從APNS Server獲取device token,應(yīng)用程序接收device token邓夕。

3刘莹、應(yīng)用程序?qū)evice token發(fā)送給PUSH服務(wù)端程序。

4焚刚、服務(wù)端程序向APNS服務(wù)發(fā)送消息点弯。

5、APNS服務(wù)將消息發(fā)送給iPhone應(yīng)用程序矿咕。

無(wú)論是iPhone客戶端和APNS抢肛,還是Provider和APNS,都需要通過(guò)證書進(jìn)行連接碳柱。

下面我介紹一下幾種用到的證書捡絮。

一、CSR文件

1莲镣、生成Certificate Signing Request(CSR)

2福稳、填寫你的郵箱和常用名稱,并選擇保存到硬盤瑞侮。

點(diǎn)擊繼續(xù):

這樣就在本地生成了一個(gè)Push.certSigningRequest文件的圆。

二、p12文件

1半火、導(dǎo)出密鑰越妈。

2、輸入你的密碼钮糖。

這樣就生成了一個(gè)Push.p12文件叮称。

三、SSL certificate文件

1藐鹤、用你付過(guò)費(fèi)的帳號(hào)登錄到iOS Provisioning Portal瓤檐,并新建一個(gè)App ID,這個(gè)過(guò)程可以參考:iOS應(yīng)用的真機(jī)調(diào)試娱节,這樣就會(huì)生成下面這條記錄:

2挠蛉、點(diǎn)擊右側(cè)的Configure:

3、點(diǎn)擊Development Push SSL Certificate一行后的Configure:

4肄满、點(diǎn)擊Continue:

5谴古、選擇前面生成好的Push.certSigningRequest文件质涛,點(diǎn)擊Generate,出現(xiàn)如下所示的頁(yè)面:

6掰担、點(diǎn)擊Continue:

7汇陆、點(diǎn)擊Download,并將文件命名為aps_developer_identity.cer带饱。

8毡代、點(diǎn)擊Done,你會(huì)發(fā)現(xiàn)狀態(tài)變成了Enabled:

注意:有的App ID的Apple Push Notification service列是灰色的勺疼,并且不允許使用Configure按鈕教寂,這是因?yàn)锳PNS不支持帶通配符的App ID。

到現(xiàn)在為止执庐,我們已經(jīng)生成了三個(gè)文件:

1酪耕、Push.certSigningRequest

2、Push.p12

3轨淌、aps_developer_identity.cer

在項(xiàng)目的AppDelegate中的didFinishLaunchingWithOptions方法中加入下面的代碼:

Ios代碼

[[UIApplication?sharedApplication]?registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert?|?UIRemoteNotificationTypeSound?|?UIRemoteNotificationTypeBadge)];

通過(guò)registerForRemoteNotificationTypes方法迂烁,告訴應(yīng)用程序,能接受push來(lái)的通知递鹉。

在項(xiàng)目的AppDelegate中添加下面的方法來(lái)獲取deviceToken:

Ios代碼

-?(void)application:(UIApplication?*)app?didRegisterForRemoteNotificationsWithDeviceToken:(NSData?*)deviceToken?{

NSString?*token?=?[NSString?stringWithFormat:@"%@",?deviceToken];

NSLog(@"My?token?is:%@",?token);

}

-?(void)application:(UIApplication?*)app?didFailToRegisterForRemoteNotificationsWithError:(NSError?*)error?{

NSString?*error_str?=?[NSString?stringWithFormat:?@"%@",?error];

NSLog(@"Failed?to?get?token,?error:%@",?error_str);

}

獲取到的deviceToken盟步,我們可以提交給后臺(tái)應(yīng)用程序,發(fā)送通知的后臺(tái)應(yīng)用程序除了需要知道deviceToken之外梳虽,還需要一個(gè)與APNS連接的證書。

這個(gè)證書可以通過(guò)我們前面生成的兩個(gè)文件中得到灾茁。

1窜觉、將aps_developer_identity.cer轉(zhuǎn)換成aps_developer_identity.pem格式

Shell代碼

openssl?x509?-in?aps_developer_identity.cer?-inform?DER?-out?aps_developer_identity.pem?-outform?PEM

2、將p12格式的私鑰轉(zhuǎn)換成pem

Shell代碼

openssl?pkcs12?-nocerts?-out?Push_Noenc.pem?-in?Push.p12

3北专、創(chuàng)建p12文件

Shell代碼

openssl?pkcs12?-export?-in?aps_developer_identity.pem?-inkey?Push_Noenc.pem?-certfile?Push.certSigningRequest?-name"aps_developer_identity"-out?aps_developer_identity.p12

這樣我們就得到了在.net或java等后臺(tái)應(yīng)用程序中使用的證書文件:aps_developer_identity.p12

如果后臺(tái)應(yīng)用是php的話禀挫,那么可以按照iOS消息推送機(jī)制中pem文件的生成這篇文章中的方法來(lái)生成php后臺(tái)應(yīng)用程序中使用的證書文件:ck.pem

分類:Iphone

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拓颓,隨后出現(xiàn)的幾起案子语婴,更是在濱河造成了極大的恐慌,老刑警劉巖驶睦,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砰左,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡场航,警方通過(guò)查閱死者的電腦和手機(jī)缠导,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)溉痢,“玉大人僻造,你說(shuō)我怎么就攤上這事憋他。” “怎么了髓削?”我有些...
    開(kāi)封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵竹挡,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我立膛,道長(zhǎng)揪罕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任旧巾,我火速辦了婚禮耸序,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鲁猩。我一直安慰自己坎怪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布廓握。 她就那樣靜靜地躺著搅窿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪隙券。 梳的紋絲不亂的頭發(fā)上男应,一...
    開(kāi)封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音娱仔,去河邊找鬼沐飘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛牲迫,可吹牛的內(nèi)容都是我干的耐朴。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼盹憎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼筛峭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起陪每,我...
    開(kāi)封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤影晓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后檩禾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體挂签,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年盼产,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了竹握。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辆飘,死狀恐怖啦辐,靈堂內(nèi)的尸體忽然破棺而出谓传,到底是詐尸還是另有隱情,我是刑警寧澤芹关,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布续挟,位于F島的核電站,受9級(jí)特大地震影響侥衬,放射性物質(zhì)發(fā)生泄漏诗祸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一轴总、第九天 我趴在偏房一處隱蔽的房頂上張望直颅。 院中可真熱鬧,春花似錦怀樟、人聲如沸功偿。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)械荷。三九已至,卻和暖如春虑灰,著一層夾襖步出監(jiān)牢的瞬間吨瞎,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工穆咐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颤诀,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓对湃,卻偏偏與公主長(zhǎng)得像崖叫,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熟尉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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