天天看點

ios消息推送--iOS 8.0 後

本文章隻提供學習!!

      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.首先在鑰匙串中配置電腦簽名檔案

ios消息推送--iOS 8.0 後
ios消息推送--iOS 8.0 後

郵件位址一般寫公司的就好,選擇存儲到磁盤,繼續。

ios消息推送--iOS 8.0 後

我就在桌面建立了個叫push到檔案夾,點選存儲。

2.需要一個AppIDs  

(如果在測試階段已經有了就不需要了,到時候直接用那個就可以,注意:AppIDs一定要是完整的,不能是xxx.xxx.*  做消息推送一定要是完整的ID),沒有就弄一個,過程跟弄測試這書一樣。反正做遠端消息推送一定要真機測試,在做真機測試的時候已經有AppIDs了,這個過程就不貼出來了,不會的同學可以先去檢視怎麼配置真機測試證書。

3.配置一個開發證書

ios消息推送--iOS 8.0 後

點選加号

ios消息推送--iOS 8.0 後

選擇APNs 然後continue

ios消息推送--iOS 8.0 後

選擇自己應用的AppID   之後continue 繼續continue

ios消息推送--iOS 8.0 後

選擇第一步的時候儲存證桌面push檔案夾中的電腦簽名檔案

ios消息推送--iOS 8.0 後

最好我開發證書也儲存到push檔案夾中,友善管理。

4.接下來配置生産證書

ios消息推送--iOS 8.0 後

點選production  點選加号

ios消息推送--iOS 8.0 後

選擇production中的APNs  接下來所有的步驟跟配置開發證書一模一樣,就不一一貼過程來。

5.這步驟才是最重要的。

ios消息推送--iOS 8.0 後

點選加号

ios消息推送--iOS 8.0 後

點選continue

ios消息推送--iOS 8.0 後

選擇你應用的APP ID

ios消息推送--iOS 8.0 後

選擇配置測試的時候生成的這書(本文沒說明怎麼配置測試證書,不知道請先檢視如何配置測試證書)

ios消息推送--iOS 8.0 後

選擇測試裝置,全部選擇都沒關系

ios消息推送--iOS 8.0 後

按意起個名字就好了點選generate  下載下傳到push檔案夾中。

6.安裝所有到證書,可以直接拖到我到證書中

ios消息推送--iOS 8.0 後
ios消息推送--iOS 8.0 後
ios消息推送--iOS 8.0 後

導出開發證書

ios消息推送--iOS 8.0 後

起個名developmentPush,檔案格式選擇.p12

ios消息推送--iOS 8.0 後

我這裡輸入abcd1234,你們随意,記住就行。

接下來也把生産證書導出來,我把名字起為productionPush,密碼設定和開發證書一樣(隻是為了不混淆,不一樣也可以),過程一樣,就不貼圖檔了。

到這裡就要所有到準備工作做好了,接下來是測試。

測試遠端推送時候我是使用極光推送,你們有什麼好的開源都可以使用。位址:www.jpush.cn ,注冊個使用者、登入。

ios消息推送--iOS 8.0 後

登入上去點選建立應用

ios消息推送--iOS 8.0 後

隻要填寫我選中都部分就可以了,開發證書就是developmentPush.p12檔案,密碼就是自己設定的密碼。生産證書就是productionPush.p12檔案。

建立好之後會得到一個appkey   要記下來,沒記住也沒事,在選擇應用中點選你添加的應用也可以看到。

ios消息推送--iOS 8.0 後

然後下載下傳iOS  SDK 位址:www.jpush.cn/common/products#product-sdk

下載下傳好之後把裡面的lib檔案夾添加到工程中

ios消息推送--iOS 8.0 後

接着在工程中建立plist檔案

ios消息推送--iOS 8.0 後

名字一定要是PushConfig.plist

點選plist檔案

ios消息推送--iOS 8.0 後

添加三個鍵值對,前面兩個值按照我的内容寫,最後一個就是在極光推送建立應用的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消息推送--iOS 8.0 後

好了,完成。如果從下載下傳iOS SDK開始就不懂的同學可以檢視教程,位址:http://docs.jpush.io/guideline/ios_guide/

 上面整個教程在極光推送平台也有教程。

以上的文章隻是我個人學習筆記,有什麼錯誤的地方請不要噴,請您提出來讓我改正,寫博文不易,請不要亂複制拷貝别人的心得為自己的東西,感謝大家。

轉載于:https://www.cnblogs.com/qq9070/p/4543057.html