本文章只提供學習!!
iOS的消息推送(推送通知)有兩種,一種是本地推送通知,另一種是遠程推送通知。所謂本地推送通知就是使用代碼推送消息到用戶設備中提醒用戶一些信息,推送形式請查看手機設置。遠程推送通知是通過服務器發送消息到用戶設備中,iOS的遠程推送通知要經過蘋果的服務器來推送消息,過程比較麻煩。下面是個人學習筆記,提供新手學習(當然我也是個新手),不能用於商業用途。
所有的消息推送只在后台或者推出程序才有意義,程序在前台運行的時候是沒有意義的,所有發送消息推送的時候請把程序退出或者掛在后台運行才能體現出效果。
一、本地推送通知
以下代碼為了更好看到本地推送通知地效果最好寫在一個按鈕事件中,點擊發送通知。
// 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中調用下面這個方法
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
如果想當app在前台的時候不做任何事情可以在上面的方法里面最前面加上這句代碼:
// 程序正處在前台運行,直接返回 if (application.applicationState == UIApplicationStateActive) return;
也可以在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中判斷是否是點擊通知進入app,如下:
UILocalNotification *ln = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]; if (ln) { //點擊通知進入app } else { //點擊app圖標進入app }
二、遠程推送通知
做遠程推送一定要用真機,模擬器不可以。需要到蘋果開發者中心配置一些證書,過程比較多,我就不文字描述來了,直接看圖片演示過程。
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
必要的框架
- CFNetwork.framework
- CoreFoundation.framework
- CoreTelephony.framework
- SystemConfiguration.framework
- CoreGraphics.framework
- Foundation.framework
- UIKit.framework
- Security.framework
- libz.dylib
其中有3個是在創建工程的時候就用了,不需要重復添加
然后在工程中的appdelegate中添加以下代碼:
#import "APService.h"
在- (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/
上面整個教程在極光推送平台也有教程。
以上的文章只是我個人學習筆記,有什么錯誤的地方請不要噴,請您提出來讓我改正,寫博文不易,請不要亂復制拷貝別人的心得為自己的東西,感謝大家。