iOS不倒,博客不停
JPush的文檔說明挺不錯,非常詳細!為什麼還要寫這篇簡書?主要是為了記錄自己開發過程,也給一些朋友提供一點點幫助.首先是JPush的文檔地址:JPush文檔
可以看出,JPush iOS Push 包括 2 個部分,APNs 推送(代理)與 JPush 應用內消息。
紅色部分是 APNs 推送,JPush 代理開發者的應用(需要基於開發者提供的應用證書),向蘋果 APNs 服務器推送。由 APNs Server 推送到 iOS 設備上。
藍色部分是 JPush 應用內推送部分,即 App 啟動時,內嵌的 JPush SDK 會開啟長連接到 JPush Server,從而 JPush Server 可以推送消息到 App 裡
APNs 通知
APNs 通知:是指通過向 Apple APNs 服務器發送通知,到達 iOS 設備,由 iOS 系統提供展現的推送。用戶可以通過 IOS 系統的 “設置” >> “通知” 進行設置,開啟或者關閉某一個 App 的推送能力。
JPush iOS SDK 不負責 APNs 通知的展現,只是向 JPush 服務器端上傳 Device Token 信息,JPush 服務器端代理開發者向 Apple APNs 推送通知。
獲取 APNs 推送內容
應用內消息
應用內消息:JPush iOS SDK 提供的應用內消息功能,在 App 在前臺時能夠收到推送下來的消息。App 可使用此功能來做消息下發動作。
此消息不經過 APNs 服務器,完全由 JPush 提供功能支持。
APNs通知與應用內消息對比
如果只需要發送通知,則可以忽略應用內消息的處理。對於兩種消息的代碼處理可以參考API 部分的描述。
JPush API v3 支持同時一次調用同時推送 APNs 通知與 JPush 應用內消息。這在某些應用場景裡是有意義的。
OK,原理了解之後,下面開始集成.
- 1:下載JPush的SDK:SDK下載地址
- 2:在JPush平臺註冊應用,這裡的目的:
- A:交付授權,因為在這裡開發者需要上傳應用的推送開發證書,推送生產證書,這樣JPush平臺就能去蘋果服務器拿去一個推送關鍵字段:DeviceToken,相當於授權碼.
- B:平臺註冊,還會生成一個:AppKey和一個MasterSecret.這兩個東西相當於一個登陸賬號,一個登陸密碼.這樣生成出來,JPush就能根據MasterSecret.去校驗** AppKey,然後去找綁定在這個 AppKey 上面的生產,開發證書授權的DeviceToken**去蘋果服務器推送消息.
生成成產,開發證書
- 3 導入SDK
將SDK包解壓,在Xcode中選擇“Add files to 'Your project name'...”,將解壓後的lib子文件夾(包含JPUSHService.h、jpush-ios-x.x.x.a,jcore-ios-x.x.x.a)添加到你的工程目錄中。
添加Framework:
- CFNetwork.framework
- CoreFoundation.framework
- CoreTelephony.framework
- SystemConfiguration.framework
- CoreGraphics.framework
- Foundation.framework
- UIKit.framework
- Security.framework
- libz.tbd (Xcode7以下版本是libz.dylib)
- AdSupport.framework (獲取IDFA需要;如果不使用IDFA,請不要添加)
- UserNotifications.framework (Xcode8及以上)
- libresolv.tbd (JPush 2.2.0及以上版本需要, Xcode7以下版本是libresolv.dylib)
*4:編譯與開啟推送功能
*5:ATS
*6:添加頭文件和添加代理
請將以下代碼添加到 AppDelegate.m 引用頭文件的位置。
- 7:核心代碼: 添加初始化代碼
添加初始化APNs代碼
請將以下代碼添加到
添加初始化JPush代碼
註冊APNs成功並上報DeviceToken
實現註冊APNs失敗接口(可選)
添加處理APNs通知回調方法
下面這幾個方法也是核心代碼,這是對通知的回調方法,通知達到之後會調用這下面的方法,所以說也是必須要實現的.JPush考慮很周全,涉及到了各個版本,但是方法太多,要是能一個方法處理完就更好了.
調用,成功打印:
程序到這,也就基本集成完畢:
8:還有推送的一些新特性極光新特性地址
這樣就能給你推送添加操作:
具體代碼:
iOS 10 想要對這些操作action處理:
iOS 9 想要對這些操作action處理:
iOS 8 想要對這些操作action處理:
上面三個方法還可以對附件:attachment操作處理;
9:這裡還介紹一下關於設置tags和alias
10:設置Badge
清空JPush服務器中存儲的badge值,即 [setBadge:0]
+ (void)resetBadge
11:API 用於移除待推送或已在通知中心顯示的推送(支持iOS10,併兼容iOS10以下版本)
iOS10以上identifier設置為nil,則移除所有在通知中心顯示推送和待推送請求,也可以通過設置identifier.delivered和identifier.identifiers來移除相應在通知中心顯示推送或待推送請求,identifier.identifiers如果設置為nil或空數組則移除相應標誌下所有在通知中心顯示推送或待推送請求;iOS10以下identifier設置為nil,則移除所有推送,identifier.delivered屬性無效,另外可以通過identifier.notificationObj傳入特定推送對象來移除此推送。
12:極光還有下面的功能(因為項目沒有集成,沒有仔細研究):極光響應SDK地址
- AddNotification: 廣告推送
- FindNotification: 查詢推送
- SetLocalNotification: 地理推送
- clearAllLocalNotification:用於清除所有註冊的通知
花了一週時間學習極光推送,雖然時間有點長,但是對於我自己來說很不錯了,沉下心來慢慢學東西,不管外面iOS多麼多麼慘,但是隻要一天iOS不倒,我還會堅持學習,堅持學
閱讀更多 猿修心 的文章