麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

IOS基于APNS消息推送原理與實(shí)現(xiàn)(JAVA后臺(tái))

2019-11-14 20:16:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Push的原理:

Push 的工作機(jī)制可以簡(jiǎn)單的概括為下圖

 

圖中,PRovider是指某個(gè)iphone軟件的Push服務(wù)器,這篇文章我將使用.net作為Provider。

APNS 是Apple Push Notification Service(Apple Push服務(wù)器)的縮寫,是蘋果的服務(wù)器。

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

第一階段:Push服務(wù)器應(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要deviceToken。應(yīng)用程序接受deviceToken。

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

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

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

無(wú)論是iPhone客戶端跟APNS,還是Provider和APNS都需要通過(guò)證書(shū)進(jìn)行連接的。下面介紹一下所用到證書(shū)的制作。

一、CSR文件

 

1、生成Certificate Signing Request(CSR)

    

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

   

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

 

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

 

 

二、SSL certificate文件

 

1、用你付過(guò)費(fèi)的帳號(hào)登錄到iOS Provisioning Portal,并創(chuàng)建Certificates(已創(chuàng)建可省略),如下圖:

       點(diǎn)擊Submit  創(chuàng)建Certificate完畢。

2、新建一個(gè)App ID  點(diǎn)擊New App ID 輸入Description,Bundle Identifier,點(diǎn)擊Submit,新建App ID完畢。

找到新建的App ID 點(diǎn)擊右側(cè)的Configure:

 Development Push SSL Certificate ,與Production Push SSL Certificate 區(qū)別在于一個(gè)是用于開(kāi)發(fā)的推送證書(shū),一個(gè)是用于發(fā)布產(chǎn)品的推送證書(shū)。兩個(gè)證書(shū)獲取到的終端deviceToken是不一樣的,用兩個(gè)證書(shū)生成的P12證書(shū)用于java后臺(tái)連接APNS的服務(wù)器地址也是不同的,Development Push SSL Certificate 對(duì)應(yīng)連接的服務(wù)器地址是:gateway.sandbox.push.apple.com。Production Push SSL Certificate  對(duì)應(yīng)連接的服務(wù)器地址是:gateway.push.apple.com。

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

 

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

點(diǎn)擊Continue:

 

 點(diǎn)擊Download,下載生成的支持推送服務(wù)的證書(shū)(命名為:aps_development-6.cer)。

 

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

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

1、PushTest.certSigningRequest

2、aps_development-6.cer(下載生成的支持推送服務(wù)的證書(shū)。)

雙擊aps_development-6.cer注冊(cè)到你的鑰匙串中,這樣你的鑰匙串中就會(huì)有  

三、準(zhǔn)備profile證書(shū),因?yàn)橥扑拖⒅荒茉谡鏅C(jī)上測(cè)試,所以要建一個(gè)profile證書(shū)  點(diǎn)擊"new profile"為上面新建的APP ID建個(gè)profile ,成功之后下載pushtestdescDevprofile.mobileprovision 雙擊將其加入到xcode 的Provisioning Profiles 中。

四、生成JAVA后臺(tái)用于連接APNS的證書(shū):

打開(kāi)鑰匙串   選中Apple Development IOS Push Services:com.easecom.zhwgpushtestdesc,右鍵將其導(dǎo)出。 導(dǎo)出用于JAVA后臺(tái)連接APNS的P12證書(shū)。  輸入p12 證書(shū)的密碼,本文中我用的是123456。記住這個(gè)密碼,JAVA后臺(tái)使用p12證書(shū)的時(shí)候要用到。  輸入訪問(wèn)鑰匙串的密碼:系統(tǒng)登陸密碼。

導(dǎo)出PushTest.p12證書(shū)完畢。

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

1、PushTest.certSigningRequest

2、aps_development-6.cer(下載生成的支持推送服務(wù)的證書(shū)。)

3、pushtestdescDevprofile.mobileprovision 4、PushTest.p12

至此IOS消息推送(JAVA后臺(tái))證書(shū)全部制作完畢。

下面開(kāi)始上代碼:

五、IOS端代碼:

1、首先在項(xiàng)目的AppDelegate.m中加入以下兩個(gè)代理方法

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {      NSString *token = [NSString stringWithFormat:@"%@", deviceToken]; 

    //獲取終端設(shè)備標(biāo)識(shí),這個(gè)標(biāo)識(shí)需要通過(guò)接口發(fā)送到服務(wù)器端,服務(wù)器端推送消息到APNS時(shí)需要知道終端的標(biāo)識(shí),APNS通過(guò)注冊(cè)的終端標(biāo)識(shí)找到終端設(shè)備。     NSLog(@"My token is:%@", token);    }  

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {        NSString *error_str = [NSString stringWithFormat: @"%@", error];        NSLog(@"Failed to get token, error:%@", error_str);    } 

2、在AppDelegate.m的(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中加入注冊(cè)消息通知推送能力;加入當(dāng)應(yīng)用程序處于未啟動(dòng)狀態(tài)時(shí),判斷是否由遠(yuǎn)程消息通知觸發(fā);加入清除消息推送通知標(biāo)記。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  //判斷是否由遠(yuǎn)程消息通知觸發(fā)應(yīng)用程序啟動(dòng)

    if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]!=nil) {

        //獲取應(yīng)用程序消息通知標(biāo)記數(shù)(即小紅圈中的數(shù)字)

        int badge = [UIApplication sharedApplication].applicationIconBadgeNumber;         if (badge>0) {

           //如果應(yīng)用程序消息通知標(biāo)記數(shù)(即小紅圈中的數(shù)字)大于0,清除標(biāo)記。

            badge--;

          //清除標(biāo)記。清除小紅圈中數(shù)字,小紅圈中數(shù)字為0,小紅圈才會(huì)消除。             [UIApplication sharedApplication].applicationIconBadgeNumber = badge;         }     }

    //消息推送注冊(cè)     [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge];

} 3、在項(xiàng)目AppDelegate.m中加入消息接收處理代理方法。

//處理收到的消息推送 - (void)application:(UIApplication *)application  didReceiveRemoteNotification:(NSDictionary *)userInfo {

    //在此處理接收到的消息。     NSLog(@"Receive remote notification : %@",userInfo); } 六、JAVA后臺(tái)代碼:

public static void main(String[] args) throws Exception   {         try         {             //從客戶端獲取的deviceToken,在此為了測(cè)試簡(jiǎn)單,寫固定的一個(gè)測(cè)試設(shè)備標(biāo)識(shí)。            String deviceToken = "df779eda 73258894 5882ec78 3ac7b254 6ebc66fe fa295924 440d34ad 6505f8c4"

            System.out.println("Push Start deviceToken:" + deviceToken);             //定義消息模式             PayLoad payLoad = new PayLoad();             payLoad.addAlert("this is test!");             payLoad.addBadge(1);//消息推送標(biāo)記數(shù),小紅圈中顯示的數(shù)字。             payLoad.addSound("default");             //注冊(cè)deviceToken             PushNotificationManager pushManager = PushNotificationManager.getInstance();             pushManager.addDevice("iPhone", deviceToken);             //連接APNS             String host = "gateway.sandbox.push.apple.com";             //String host = "gateway.push.apple.com";             int port = 2195;

            String certificatePath = "c:/PushTest.p12";//前面生成的用于JAVA后臺(tái)連接APNS服務(wù)的*.p12文件位置             String certificatePassWord = "123456";//p12文件密碼。             pushManager.initializeConnection(host, port, certificatePath, certificatePassword, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);             //發(fā)送推送             Device client = pushManager.getDevice("iPhone");             System.out.println("推送消息: " + client.getToken()+"/n"+payLoad.toString() +" ");             pushManager.sendNotification(client, payLoad);             //停止連接APNS             pushManager.stopConnection();             //刪除deviceToken             pushManager.removeDevice("iPhone");             System.out.println("Push End");         }         catch (Exception ex)         {             ex.printStackTrace();         }  } }

至此大功告成,測(cè)試通過(guò)。

以上在Iphone4,IPAD2設(shè)備測(cè)試通過(guò),Iphone3g,3gs需要打PushDoctor(推送醫(yī)生)補(bǔ)丁才能測(cè)試通過(guò)。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久草视频国产在线 | 日韩欧美高清一区 | av影院在线播放 | 欧美日韩中文字幕在线视频 | 久久性生活免费视频 | 黄色片小说 | 粉嫩粉嫩一区二区三区在线播放 | 奇米888一区二区三区 | 中文字幕免费播放 | 国产精品视频二区不卡 | 久久精品国产一区二区 | 亚洲生活片 | 久久精品国产亚洲7777小说 | 亚洲婷婷日日综合婷婷噜噜噜 | 国产精品美女久久久久久不卡 | 欧美日穴视频 | 欧美人人干 | 日日狠狠久久偷偷四色综合免费 | 在线观看国产www | 香蕉久久久 | 热99精品视频 | 成年人在线视频 | 他也色在线视频 | 成人视屏免费看 | 日韩黄在线观看 | 午夜亚洲视频 | 国产精品伦视频看免费三 | 欧美 日本 在线 | 国产精品剧情一区二区三区 | 亚洲成人夜色 | 欧美日韩在线播放一区 | 久久不雅视频 | 狠狠干视频网站 | 91性高湖久久久久久久久网站 | 成人午夜高清 | 国产一级小视频 | 欧美成人午夜 | 性猛交ⅹxxx乱巴西 欧美日韩1区2区3区 | 神马视频我不卡 | 成人午夜在线免费视频 | 亚洲生活片 |