資源描述:
《ios消息推送機(jī)制的一種實(shí)現(xiàn)方式解析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、IOS推送機(jī)制實(shí)現(xiàn)iOS消息推送的工作機(jī)制可以簡(jiǎn)單的用下圖來概括:(Provider是指某個(gè)iPhone軟件的Push服務(wù)器,APNS是ApplePushNotificationService的縮寫,是蘋果的服務(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ā)來的消息傳遞給相應(yīng)的應(yīng)用程序,并且按照設(shè)定彈出Push通知。?從上圖我們可以看到:1、應(yīng)用程序注冊(cè)消息推送。2、iOS從APNS
2、Server獲取devicetoken,應(yīng)用程序接收devicetoken。3、應(yīng)用程序?qū)evicetoken發(fā)送給PUSH服務(wù)端程序。4、服務(wù)端程序向APNS服務(wù)發(fā)送消息。5、APNS服務(wù)將消息發(fā)送給iPhone應(yīng)用程序。無論是iPhone客戶端和APNS,還是Provider和APNS,都需要通過證書進(jìn)行連接。下面我介紹一下幾種用到的證書。一、CSR文件1、生成CertificateSigningRequest(CSR)?2、填寫你的郵箱和常用名稱,并選擇保存到硬盤。?點(diǎn)擊繼續(xù):?這樣就在本地生成了一個(gè)Push.certSigningRequest文件。二、p12文件1、導(dǎo)出密鑰。?2
3、、輸入你的密碼。??這樣就生成了一個(gè)Push.p12文件。?三、SSLcertificate文件?1、用你付過費(fèi)的帳號(hào)登錄到iOSProvisioningPortal,并新建一個(gè)AppID,這個(gè)過程可以參考:iOS應(yīng)用的真機(jī)調(diào)試,這樣就會(huì)生成下面這條記錄:?2、點(diǎn)擊右側(cè)的Configure:?3、點(diǎn)擊DevelopmentPushSSLCertificate一行后的Configure:?4、點(diǎn)擊Continue:5、選擇前面生成好的Push.certSigningRequest文件,點(diǎn)擊Generate,出現(xiàn)如下所示的頁(yè)面:6、點(diǎn)擊Continue:7、點(diǎn)擊Download,并將文件命名為a
4、ps_developer_identity.cer。8、點(diǎn)擊Done,你會(huì)發(fā)現(xiàn)狀態(tài)變成了Enabled:?注意:有的AppID的ApplePushNotificationservice列是灰色的,并且不允許使用Configure按鈕,這是因?yàn)锳PNS不支持帶通配符的AppID。到現(xiàn)在為止,我們已經(jīng)生成了三個(gè)文件:1、Push.certSigningRequest2、Push.p123、aps_developer_identity.cer在項(xiàng)目的AppDelegate中的didFinishLaunchingWithOptions方法中加入下面的代碼:?[[UIApplication?share
5、dApplication]?registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert?
6、?UIRemoteNotificationTypeSound?
7、?UIRemoteNotificationTypeBadge)];?通過registerForRemoteNotificationTypes方法,告訴應(yīng)用程序,能接受push來的通知。?在項(xiàng)目的AppDelegate中添加下面的方法來獲取deviceToken:?-(void)application:(UIApplication*)appdidRegisterForRe
8、moteNotificationsWithDeviceToken:(NSData*)deviceToken{NSString*token=[NSStringstringWithFormat:@"%@",deviceToken];NSLog(@"Mytokenis:%@",token);}-(void)application:(UIApplication*)appdidFailToRegisterForRemoteNotificationsWithError:(NSError*)error{NSString*error_str=[NSStringstringWithFormat:@"%@",e
9、rror];NSLog(@"Failedtogettoken,error:%@",error_str);}獲取到的deviceToken,我們可以提交給后臺(tái)應(yīng)用程序,發(fā)送通知的后臺(tái)應(yīng)用程序除了需要知道deviceToken之外,還需要一個(gè)與APNS連接的證書。?這個(gè)證書可以通過我們前面生成的兩個(gè)文件中得到。?1、將aps_developer_identity.cer轉(zhuǎn)換成aps_developer_ident