成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iOS:消息推送原理及實現歸納

移動開發 iOS
Provider[服務端]把要發送的消息,目的iOS設備標識打包,發送給APNS;APNS在自身的已注冊Push服務的iOS設備列表中,查找有相應標識的iOS設備,并將消息發送到iOS設備;iOS設備把發送的消息傳遞給對應的應用程序,并且按照設定彈出Push通知。

一、消息推送原理:

在實現消息推送之前先提及幾個于推送相關概念,如下:

1、Provider:就是為指定IOS設備應用程序提供Push的服務器,(如果IOS設備的應用程序是客戶端的話,那么Provider可以理解為服務端[消息的發起者]);

2、APNS:Apple Push Notification Service[蘋果消息推送服務器];

3、iPhone:用來接收APNS下發下來的消息;

4、Client App:IOS設備上的應用程序,用來接收iphone傳遞APNS下發的消息到制定的一個客戶端 app[消息的最終響應者];

可以分為三個階段:

階段一:Provider[服務端]把要發送的消息,目的IOS設備標識打包,發送給APNS;

階段二:APNS在自身的已注冊Push服務的IOS設備列表中,查找有相應標識的IOS設備,并將消息發送到IOS設備;

階段三:IOS設備把發送的消息傳遞給對應的應用程序,并且按照設定彈出Push通知。

具體過程,如下:

1、[Client App]注冊消息推送;

2、[Client App]跟[APNS Service]要deviceToken, Client App接收deviceToken;

3、[Client App]將deviceToken發送給[Provider]Push服務端程序;

4、當Push服務端程序滿足發送消息條件了,[Provider]向[APNS Service]發送消息;

5、[APNS Service]將消息發送給[Client App].

二、消息推送實現:

1、生成*.certSigningRequest文件,步驟如下:

[MacBookà應用程序à實用工具à鑰匙串訪問à證書助手à從證書機構求證書?à證書信息(用戶電子郵箱地址{填寫您的郵箱, 如:your@email.com},常用名稱{任意,如:PushDemo},請求是:{單選,選擇‘存儲到磁盤’})à繼續à保存],這時會在您指定 的地方生成你指定的文件,默認為CertificateSigningRequest.certSigningRequest文件,這里命名 為:PushDemo.certSigningRequest.在此*.certSigningRequest已經生成,具體操作步驟如下面兩張圖所示。

如果生成成功,則會在[鑰匙串訪問|登錄|密鑰]欄目中列出與*.certSigningRequest關聯的密鑰,這里是PushDemo。

2、新建一個App ID(在蘋果開發者賬號中配置)

(1) 登錄iOS Dev Center,登錄成功后,點擊(iOS Provisioning Portal對應鏈接)。

(2) 創建New App ID[App IDsàManageàNew App ID]( Description{填寫您對此App ID 的描述,如:iShop},Bundle Seed ID(App ID Prefix){選擇綁定App ID前綴,如:默認選擇Generate New},Bundle Identifier(App ID Suffix){填寫綁定App ID后綴,如:com.yourcorp.iShop})。

這樣就會生成下面這條記錄。

(3) 配置上一步中生成的App ID,讓其支持消息推送[點擊2-6中的Configureà選中Enable for Apple Push Notification serviceà點擊Configure]。

(4) Generate a Certificate Signing Request(生成部署請求認證)[點擊上圖中的2ConfigureàContinueà步驟1生成的*certSigningRequest文件 (這里是iShop. certSigningRequest)à Generateà生成完成后將其下載下來,命名為:aps_developer_identity.cer],雙擊 aps_developer_identity.cer證書{將證書與密鑰關聯,并將證書導入到MacBook中}。

(5) 創建Development Provisioning Profiles[開發許可配置文件](Provisioning| Development|New Profile)。

點擊上圖中Submit,生成Development Provisioning Profiles[開發許可配置文件],這里是:iShopDevprofile.mobileprovision。

下載此開發許可證書(用于聯機調試)。

總結,到現在為止,我們已經生成:A:*.certSigningRequest文件(在步驟(4)中使用,用于生成證書B)、B: aps_developer_identity.cer證書(在Provider[Push服務器]服務端應用使用)、 C:*..mobileprovision開發許可配置文件(在Client App客戶端應用聯機調試使用)。

至此,消息推送的配置已經全部完成,接下來的工作就是編寫Provider[Push服務器]服務端應用和Client App客戶端應用的程序。

三、Provider服務端的實現

在這里只是簡單講述Provider服務端(JAVA實現)步驟如下:

(1) 制作Provider服務端所需要的*.p12文件:

在上面的實現的(4) 部分的圖所展示的密鑰、證書,我們并沒有使用到它,那么為什么要展示出來呢,猜猜是為什么?為制作*.p12文件?哈哈,您猜對了,下面我們就利用它來制 作*.p12文件,步驟:([MacBookà應用程序à實用工具à鑰匙串訪問[鑰匙串:登錄,種類:證書]à選擇剛剛生成的證書(Apple Development IOS Services:*******)à菜單à文件à導出項目…à[存儲為:任意文件名(如:iPush),文件格式:默認(個人信息交換 (.p12))]à輸入密碼以進行導出[密碼:任意,驗證:與密碼同一]à輸入MACBook登錄密碼à允許à最終生成。

(2) 編寫Client App客戶端的關鍵代碼,如下:

  1.  - ( BOOL )application : (UIApplication * )application didFinishLaunchingWithOptions : ( NSDictionary * )launchOptions 
  2.     self.window = [ [ [UIWindow alloc ] initWithFrame : [ [UIScreen mainScreen ]bounds ] ] autorelease ]; 
  3.     self.window.backgroundColor = [UIColor whiteColor ]; 
  4.     [self.window makeKeyAndVisible ]; 
  5.     //消息推送支持的類型 
  6.     UIRemoteNotificationType types = 
  7.     (UIRemoteNotificationTypeBadge 
  8.      |UIRemoteNotificationTypeSound 
  9.      |UIRemoteNotificationTypeAlert ); 
  10.     //注冊消息推送 
  11.     [ [UIApplication sharedApplication ]registerForRemoteNotificationTypes :types ]; 
  12.     return YES; 
  13. //獲取DeviceToken成功 
  14. - ( void )application : (UIApplication * )application 
  15. didRegisterForRemoteNotificationsWithDeviceToken : ( NSData * )deviceToken 
  16.     NSLog ( @ "DeviceToken: {%@}",deviceToken ); 
  17.     //這里進行的操作,是將Device Token發送到服務端 
  18. //注冊消息推送失敗 
  19. - ( void )application : (UIApplication * )application 
  20. didFailToRegisterForRemoteNotificationsWithError : ( NSError * )error 
  21.     NSLog ( @ "Register Remote Notifications error:{%@}", [errorlocalizedDescription ] ); 
  22. //處理收到的消息推送 
  23. - ( void )application : (UIApplication * )application 
  24. didReceiveRemoteNotification : ( NSDictionary * )userInfo 
  25.     NSLog ( @ "Receive remote notification : %@",userInfo ); 
  26.     UIAlertView *alert = 
  27.     [ [UIAlertView alloc ] initWithTitle : @ "溫馨提示" 
  28.                                message : @ "推送成功!" 
  29.                               delegate : nil 
  30.                      cancelButtonTitle : @ "確定" 
  31.                      otherButtonTitles : nil ]; 
  32.     [alert show ]; 
  33.     [alert release ]; 
  34. }  

(3)編寫Provider服務端關鍵代碼,如下:

  1. import javapns.back.PushNotificationManager ; 
  2. import javapns.back.SSLConnectionHelper ; 
  3. import javapns.data.Device ; 
  4. import javapns.data.PayLoad ; 
  5. public class MainSend 
  6.     public static void main ( String [ ] args ) throws Exception 
  7.     { 
  8.         try 
  9.         { 
  10.             //從客戶端獲取的deviceToken 
  11.             String deviceToken = "3a20764942e9cb4c4f6249274f12891946bed26131b686b8aa95322faff0ad46" ; 
  12.             System. out. println ( "Push Start deviceToken:" + deviceToken ) ; 
  13.             //定義消息模式 
  14.             PayLoad payLoad = new PayLoad ( ) ; 
  15.             payLoad. addAlert ( "消息推送測試!" ) ; 
  16.             payLoad. addBadge ( 4 ) ; 
  17.             payLoad. addSound ( "default" ) ; 
  18.             //注冊deviceToken 
  19.             PushNotificationManager pushManager = PushNotificationManager. getInstance ( ) ; 
  20.             pushManager. addDevice ( "iPhone", deviceToken ) ; 
  21.             //連接APNS 
  22.             String host = "gateway.sandbox.push.apple.com" ; 
  23.             int port = 2195 ; 
  24.             String path = "/Users/iMilo/Work.localized/iShop/project/service/iPush/" ; 
  25.             String certificatePath = (path + "src/ipush/iPush.p12" ) ; 
  26.             //certificatePath 步驟一中生成的*.p12文件位置 
  27.             String certificatePassword = "Love24mm" ; 
  28.             pushManager. initializeConnection (host, port, certificatePath, certificatePassword, SSLConnectionHelper. KEYSTORE_TYPE_PKCS12 ) ; 
  29.             //發送推送 
  30.             Device client = pushManager. getDevice ( "iPhone" ) ; 
  31.             pushManager. sendNotification (client, payLoad ) ; 
  32.             //停止連接APNS 
  33.             pushManager. stopConnection ( ) ; 
  34.             //刪除deviceToken 
  35.             pushManager. removeDevice ( "iPhone" ) ; 
  36.             System. out. println ( "Push End" ) ; 
  37.         } 
  38.         catch ( Exception ex ) 
  39.         { 
  40.             ex. printStackTrace ( ) ; 
  41.         } 
  42.     } 
  43. }  

注意:如果Provider服務端為Objective-C實現的話,就不需要*.p12證書。

責任編輯:閆佳明 來源: oschina
相關推薦

2021-02-05 07:28:11

SpringbootNettyWebsocke

2017-09-05 15:30:00

JavascriptSocket.ioNode.js

2018-07-26 15:18:41

阿里JavaKafka架構

2020-09-22 08:52:50

平臺實現消息

2023-09-19 15:33:50

Web實時消息推送

2024-09-02 09:31:19

2024-04-07 09:41:18

SignalR實時通信開發

2022-12-25 10:47:52

2015-12-02 14:10:56

HTTP網絡協議代理原理

2015-12-02 15:29:32

HTTP網絡協議代理原理

2021-06-10 08:29:15

Rollup工具前端

2022-03-17 08:55:43

本地線程變量共享全局變量

2023-12-18 09:39:13

PreactHooks狀態管理

2025-05-27 01:00:00

2017-11-23 09:23:05

消息推送系統存儲

2021-03-26 08:16:32

SpringbootWebsocket前端

2024-08-18 14:09:24

2020-06-09 11:35:30

Vue 3響應式前端

2015-03-10 13:55:31

JavaScript預解析原理及實現

2017-07-19 15:25:16

iOS開發ARKitOpen GL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产在线高清 | 成人伊人网 | 人人操日日干 | 久久国产成人精品国产成人亚洲 | 天堂中文字幕av | 国产一区二区影院 | 久久国产麻豆 | 日一区二区 | 国产精品成av人在线视午夜片 | 九九精品网 | 国产成人免费视频网站高清观看视频 | 亚洲三区在线 | 欧美不卡 | av高清毛片 | 欧美一区二区在线观看 | 久久中文视频 | 欧美精品一区在线发布 | 欧美精品久久久 | 日日干夜夜操 | 91精品www | 中文字幕精品视频 | 一区二区三区免费 | 国产日本精品视频 | 国产成人免费视频网站高清观看视频 | 亚洲视频在线观看免费 | 亚洲综合久久精品 | 亚洲成人中文字幕 | 一级做a爰片性色毛片 | 欧美一区二区三区久久精品 | 久久久久久久久蜜桃 | www.youjizz.com日韩 | 精品日韩| 国产十日韩十欧美 | 狠狠爱免费视频 | 欧美精品久久久久 | 91精品国产91久久久久游泳池 | 久久久久国产一区二区三区四区 | 中文字幕亚洲视频 | 日本特黄a级高清免费大片 成年人黄色小视频 | 国产精品一二区 | 97精品超碰一区二区三区 |