本文章只提供學習!!ios
iOS的消息推送(推送通知)有兩種,一種是本地推送通知,另外一種是遠程推送通知。所謂本地推送通知就是使用代碼推送消息到用戶設備中提醒用戶一些信息,推送形式請查看手機設置。遠程推送通知是經過服務器發送消息到用戶設備中,iOS的遠程推送通知要通過蘋果的服務器來推送消息,過程比較麻煩。下面是我的學習筆記,提供新手學習(固然我也是個新手),不能用於商業用途。服務器
全部的消息推送只在後臺或者推出程序纔有意義,程序在前臺運行的時候是沒有意義的,全部發送消息推送的時候請把程序退出或者掛在後臺運行才能體現出效果。app
1、本地推送通知框架
如下代碼爲了更好看到本地推送通知地效果最好寫在一個按鈕事件中,點擊發送通知。ide
// 1.建立本地推送通知 UILocalNotification *localNotification = [[UILocalNotification alloc] init]; // 2.設置一些屬性 // 通知發出的時間(5秒後) localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5]; // 設置時區(跟隨手機的時區) localNotification.timeZone = [NSTimeZone defaultTimeZone]; // 音樂文件名 localNotification.soundName = @"xxxxx.wav"; // 通知的內容 localNotification.alertBody = @"內容"; // 鎖屏界面顯示的標題 以下面的寫法將顯示:滑動來查看內容 格式:"滑動來" + 標題 localNotification.alertAction = @"查看內容" // 設置app圖標數字 localNotification.applicationIconBadgeNumber = 10; // 設置通知的其餘信息 localNotification.userInfo = @{ @"title" : @"好消息" };//可隨意添加 // 設置啓動圖片 localNotification.alertLaunchImage = @"Default.png"; // 設置重複發出通知的時間間隔 // localNotification.repeatInterval = NSCalendarUnitMinute; // 3.發通知 [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
//----------------------------------------------------------學習
點擊發送通知後把程序退出或者掛到後臺,等待5秒就會有通知,若是以爲5太長或過短請根據我的須要該上面到代碼。測試
當用戶點擊通知進入app的時候或者程序運行在前臺的時候會在appdelegate中調用下面這個方法fetch
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notificationui
若是想當app在前臺的時候不作任何事情能夠在上面的方法裏面最前面加上這句代碼:spa
// 程序正處在前臺運行,直接返回 if (application.applicationState == UIApplicationStateActive) return;
也能夠在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中判斷是不是點擊通知進入app,以下:
UILocalNotification *ln = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]; if (ln) { //點擊通知進入app } else { //點擊app圖標進入app }
2、遠程推送通知
作遠程推送必定要用真機,模擬器不能夠。須要到蘋果開發者中心配置一些證書,過程比較多,我就不文字描述來了,直接看圖片演示過程。
1.首先在鑰匙串中配置電腦簽名文件
郵件地址通常寫公司的就好,選擇存儲到磁盤,繼續。
我就在桌面新建了個叫push到文件夾,點擊存儲。
2.須要一個AppIDs
(若是在測試階段已經有了就不須要了,到時候直接用那個就能夠,注意:AppIDs必定要是完整的,不能是xxx.xxx.* 作消息推送必定要是完整的ID),沒有就弄一個,過程跟弄測試這書同樣。反正作遠程消息推送必定要真機測試,在作真機測試的時候已經有AppIDs了,這個過程就不貼出來了,不會的同窗能夠先去查看怎麼配置真機測試證書。
3.配置一個開發證書
點擊加號
選擇APNs 而後continue
選擇本身應用的AppID 以後continue 繼續continue
選擇第一步的時候保存證桌面push文件夾中的電腦簽名文件
最好我開發證書也保存到push文件夾中,方便管理。
4.接下來配置生產證書
點擊production 點擊加號
選擇production中的APNs 接下來全部的步驟跟配置開發證書如出一轍,就不一一貼過程來。
5.這步驟纔是最重要的。
點擊加號
點擊continue
選擇你應用的APP ID
選擇配置測試的時候生成的這書(本文沒說明怎麼配置測試證書,不知道請先查看如何配置測試證書)
選擇測試設備,所有選擇都不要緊
按意起個名字就行了點擊generate 下載到push文件夾中。
6.安裝全部到證書,能夠直接拖到我到證書中
導出開發證書
起個名developmentPush,文件格式選擇.p12
我這裏輸入abcd1234,大家隨意,記住就行。
接下來也把生產證書導出來,我把名字起爲productionPush,密碼設置和開發證書同樣(只是爲了避免混淆,不同也能夠),過程同樣,就不貼圖片了。
到這裏就要全部到準備工做作好了,接下來是測試。
測試遠程推送時候我是使用極光推送,大家有什麼好的開源均可以使用。地址:www.jpush.cn ,註冊個用戶、登陸。
登陸上去點擊建立應用
只要填寫我選中都部分就能夠了,開發證書就是developmentPush.p12文件,密碼就是本身設置的密碼。生產證書就是productionPush.p12文件。
建立好以後會獲得一個appkey 要記下來,沒記住也沒事,在選擇應用中點擊你添加的應用也能夠看到。
而後下載iOS SDK 地址:www.jpush.cn/common/products#product-sdk
下載好以後把裏面的lib文件夾添加到工程中
接着在工程中建立plist文件
名字必定要是PushConfig.plist
點擊plist文件
添加三個鍵值對,前面兩個值按照個人內容寫,最後一個就是在極光推送建立應用的Appkey
其中有3個是在建立工程的時候就用了,不須要重複添加
而後在工程中的appdelegate中添加如下代碼:
在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中添加如下代碼:
// Required #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1 if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { //能夠添加自定義categories [APService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil]; } else { //categories 必須爲nil [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert) categories:nil]; } #else //categories 必須爲nil [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert) categories:nil]; #endif // Required [APService setupWithOption:launchOptions];
//----------------------------------------------------
最後添加如下方法:
#pragma mark - 獲取DeviceToken - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { // Required [APService registerDeviceToken:deviceToken]; } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { // Required [APService handleRemoteNotification:userInfo]; } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { // IOS 7 Support Required [APService handleRemoteNotification:userInfo]; completionHandler(UIBackgroundFetchResultNewData); }
這樣就大功告成了,用真機運行你的程序,而後退出程序,或者掛到後臺。
這麼發送通知呢?在極光推送平臺點擊你建立的應用,點擊推送,發送通知
好了,完成。若是從下載iOS SDK開始就不懂的同窗能夠查看教程,地址:http://docs.jpush.io/guideline/ios_guide/
上面整個教程在極光推送平臺也有教程。
以上的文章只是我我的學習筆記,有什麼錯誤的地方請不要噴,請您提出來讓我改正,寫博文不易,請不要亂複製拷貝別人的心得爲本身的東西,感謝你們。