iOS 訊息推送原理及實現Demo

來源:互聯網
上載者:User

一、訊息推送原理:

1-1:

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-2:

 

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 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(產生部署請求認證)[點擊2-7中的2ConfigureàContinueà步驟1產生的*certSigningRequest檔案(這裡是iShop. certSigningRequest)-Generate-產生完成後將其下載下來,命名為:aps_developer.cer],雙擊aps_developer.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用戶端應用聯機調試使用)。

3、建立一個項目


AppDelegate.m file的"didFinishLaunchingWithOptions" method裡,添加下列代碼 (用於為app register push notification feature):




AppDelegate.m file裡添加下列2個methods (用來handle register remote notification with device token和register error的events

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




void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error  



simulator doesn't support push notification)。這時你會在device上看到一個popup window (該視窗只會出現一次,重裝app不會再出現),提示你該app會send push notification給你,如果同意則clickOK,不同意則click "Now allow”。如果選擇了OK,那麼在"Setting > Notifications“裡會有你的app在list裡。而且這時你的Xcode output console會顯示你的device token。

5: export "PushDemo" private key to a ".p12" file(該檔案會在後面產生apns provider的.p12 or .pem file時用到)
1). right click "PushDemo“ private key and select "Export ..."PushDemo
2). Save the private key as “PushDemoKey.p12” file, click Save button
3). 這時會讓你輸入2次用於加密該.p12 file的密碼,例如用"123321",接著會要求你輸入一次your mac account password

6: 在5中產生的“PushDemoKey.p12” file和step 6產生的"aps_development.cer" file是用於APNS provider side的源檔案,APNS Provider side進行push message時要用到的"cert + key" file就是通過這2個file來產生。該Step就是用來產生for APNS provider side (php version)要用到這個"cert + key" pem file.

1) open Terminal, go to Desktop (假設這2個file都在desktop裡)
2) 執行下列命令來產生和apns cer file對應的pem file "PushDemoCert.pem"

3) 執行下列命令來產生和private key .p12 file對應的pem file "PushDemoKey.pem" (注意:執行過程會要求你輸入"PushDemoKey.p12"建立時設定的密碼,以及設定"PushDemoKey.pem”的密碼

4) 執行下列命令把step 11.2產生的cert pem file和step 11.3產生的key pem file合成為一個pem file  "PushDemoCK.pem"

7: 在5產生的“PushDemoKey.p12” file和step 6產生的"aps_development.cer" file是用於APNS provider side的源檔案,該step是簡單測試這2個file是否有效

1) open Terminal, go to Desktop (假設這2個file都在desktop裡)

2) 執行下列命令來測試是否能夠connect apple提供的不經加密(即不需使用任何認證!)的APNS server 

 2195  

如果你看到下列輸出,則表示你的電腦可以connect APNS. 如果出現error,那麼check你的firewall是否允許outgoing connections on port 2195。

Trying 17.172.233.65...  
Connected to .  
Escape character is '^]'.  
Press Ctrl+C to close the connection.

3)  執行下列命令來測試是否能夠connect apple提供的經加密(需使用2) and 3)產生的2個pem file!)的APNS "sandbox“ server for development.

 -cert PushDemoCert.pem -key PushDemoKey.pem  

執行過程中會要你輸入PushDemoKey.pem產生時設定的密碼。如果connect server成功,就會等待你輸入字串,你可以輸入任意字串,然後斷行符號,就會disconnect server。如果串連不成功,則openssl會顯示錯誤資訊。
注意:實際上有2個APNS servers: the “sandbox” server (用於testing) the live server(用於production mode)。我們這裡測試的是sandbox server。live apns server的操作類似。

8: 建立provider server side (php version)
1). Download SimplePush PHP code to your mac machine and then unzip it.
2). 去掉SimplePush folder裡的pk.pem (它沒用),把step 11.4產生的"PushDemoCK.pem" copy toSimplePush folder
3). 修改simplepush.php file下面幾行:



4). 在terminal window裡,go to the simplepush folder,然後執行下列命令,你的iPhone應該會收到一條push message。


注意:如果你的app在iphone裡是正在運行,而且app是在front end時,當它收到push message時是不會出現在iPhone頂部的notification area的!

 

參考文章:http://mmz06.blog.163.com/blog/static/121416962011111710934946/

     http://user.qzone.qq.com/75869071/infocenter%23!app=2&via=QZ.HashRefresh&pos=1351564081#!app=2&via=QZ.HashRefresh&pos=1351564081

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.