建立Push SSL Certification
IOS用戶端注冊Push功能并獲得DeviceToken
使用Provider向APNS發送Push消息
IOS用戶端接收處理由APNS發來的消息
登入developer.apple.com,建立新的App ID,要求此ID的Bundle Identifier不包含通配符,否則不能啟用Push以及IAP功能。例如 com.soso.sosoimage。
在App IDs清單頁面,點選剛建立的app id右面的Configure連結,進入Configure App ID界面,選中"Enable for App Push Notification service"。點選Development Push SSL Certificate一行的Configure按鈕,彈出"Apple Push Notification service SSL Certificate Assistant"對話框,依對話框操作,類似于建立開發或釋出用的Certificate。
最終将Development Push SSL Certificate下載下傳并安裝到本地Keychain Access。導出成p12檔案,備用。導出時需要設定密碼,不得為空。
在developer.apple.com,建立一個新的Provisioning Profile,使用我們剛剛建立的支援Push功能的App ID。下載下傳并安裝到本地。
建立本地工程,info.plist中設定Bundle identifier為剛剛建立的Bundle Id。Com.soso.sosoimage。設定Code Signing Identity為剛剛建立的Provisioning Profile。
程式第一次執行的時候,調用如下代碼.
三個參數分别代表消息(橫幅或提醒,由使用者Setting決定,程式不可更改)、數字标記、聲音。
在AppDelegate.m中添加兩個方法.
擷取DeviceToken後,将其傳給Provider。
Provider,将推送資訊發送給APNS(蘋果推送伺服器)的程式。有很多開源的實作,我們使用javapns ( http://code.google.com/p/javapns/ )。
首先,Provider要有目标DeviceToken,這是發送目标,由用戶端傳給Provider之後存在某處。
安裝javapns,需要導入的jar為bcprov-jdk15-146.jar, log4j-1.2.15.jar, JavaPNS_2.3_Alpha_5.jar。
将前面導出的P12檔案放在Provider的工程目錄下。
Provider向APNS發送消息可以參考javapns中NotificationTest.java。也可以參考如下例子。
其中,2為要顯示的數字;
false,指的是使用測試環境,使用正式産品環境應傳入true.
"7bb8d508e32df651c6c239439737dbd40a88d2461ad2ac1e5dbe49ecea5ccc67"為用戶端獲得并傳給Provider的DeviceToken,此參數還可以傳入String[]對象,以同時向多個用戶端Push消息。
Provider可以向用戶端Push一條Message,但用戶端有權限決定這條Message的顯示方式(無、橫幅、提醒)。
可以在一個Push消息裡附帶多種資訊,Message, 标記,聲音,可以使用如下代碼.
上面的代碼都有可能會有相應的Exception抛出來,需要處理。更多的使用方式可以參考 http://code.google.com/p/javapns/
(1)當程式未啟動,使用者接收到消息。需要在AppDelegate中的didFinishLaunchingWithOptions得到消息内容。代碼如下,
(2)當程式在前台運作,接收到消息不會有消息提示(提示框或橫幅)。當程式運作在背景,接收到消息會有消息提示,點選消息後進入程式,AppDelegate的didReceiveRemoteNotification函數會被調用(需要自己重寫),消息做為此函數的參數傳入,代碼如下
(3)無論在哪個函數傳入,消息總是一個NSDictionary對象,處理方式可以參考如下代碼