階段一:provider把要發送的消息、目的標識打包,發送給APNS
階段二:APNS在自身的已注冊Push服務的iOS設備列表中,查找響應標識的iOS設備,並將消息發送到iOS設備。
階段三:iOS設備把發送的消息傳遞給相應的應用程序,並且按照設定彈出push通知。
a.首先是應用程序注冊消息推送.
b.iOS跟APNS要devicetoken。應用程序接受devicetoken.
c.應用程序將devicetoken發送給JPush服務端程序.
d.server調用極光SDK將推送消息及相關信息發送給JPush.
e.Jpush服務端程序向APNS發送消息.
f.APNS服務將消息發送給iphone應用程序。
- 申請極光帳號,創建應用。創建后自動生成AppKey用以標識該應用,需要把它配置到項目中。
- 上傳配推送證書.P12。開發環境顯示已驗證,表示上傳成功。 證書ID必須與項目中的Bundle identifier一致。
- 導入API開發包到應用程序項目.
將SDK包解壓,將解壓后的lib文件夾添加到項目中。
必要的框架
CFNetwork.Framework
CoreTelephony.framework
SystemConfiguration.framework
Foundation.frmework
UIKit.framework
Security.framework
Xcode7需要的是libz.tbd;Xcode7以下版本是libz.Dylib
- 在項目中創建Push.Plist文件。
CHANNEL 指名應用程序的下載渠道。
APP_KEY 填寫管理portal上創建應用后自動生成的APPkey值。確保雙方一致。
5.在項目中點擊點擊info,找到Application requires iPhone environment 選擇yes
APS_FOR_PRODUCTION
0表示采用的是開發者證書,1表示采用生產證書發布應用
客戶端設置
開啟Remote notifications 需要在xcode中修改應用的capabilities開啟Remote notifications。
當注冊了Backgroud Modes -> Remote notifications 后,notification 處理函數一律切換到下面函數,后台推送代碼也在此函數中調用。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;
+ (void)registerDeviceToken:(NSData *)deviceToken;
@abstract 處理收到的 APNs 消息
+ (void)handleRemoteNotification:(NSDictionary *)remoteInfo;
- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken ;
當你的iPhone收到推送信息后到底會發生什么呢?總共有三種可能性:
app在前台運行. 接收到推送信息時屏幕上不會有任何顯示,也不會有提示音,但你的app delegate會收到這個推送信息。你可以在這里加入代碼來處理接收到的信息。
app不在前台運行。iPhone可能停留在主界面或者另一個app正在運行.一個提示窗口會彈出,可能伴隨着提示音。用戶可以點擊Close按鈕來關閉這個窗口或者點擊View按鈕來打開你的app。如果用戶點擊的時Close按鈕,那你的app不會處理這個推送的信息。
iPhone在鎖屏狀態下. 同樣一個提示窗口彈出,並伴隨着提示音,但是這個窗口不會有Close和View按鈕。屏幕解鎖后會自動進入你的app。