iOS開發 iOS10推送必看

iOS10更新以後,推送也是作了一些小小的修改,下面我就給你們仔細說說。但願看完個人這篇文章,對你們有所幫助。php

1、簡單入門篇---看完就能夠簡單適配完了

相對簡單的推送證書以及環境的問題,我就不在這裏講啦,我在這裏說的,是指原有工程的適配。數組

1.首先咱們須要打開下面的開關。全部的推送平臺,不論是極光仍是什麼的,要想收到推送,這個是必須打開的喲~app


QQ20160914-4.png

以後,系統會生成一個咱們之前沒見過的文件,如圖:框架


QQ20160918-0.png-5.8kB

QQ20160918-1.png-26.3kB

可能產生的問題:以前有朋友反饋過,將開發環境由 development 變成 production ,在開關這裏會產生錯誤,如圖:ide


QQ20160918-2.png-26.4kB

若是你們點擊Fix issue以後,會驚奇的發現,APS Environment由 production 又變成 development 了。函數

解決辦法:個人建議是不作任何修改。

通過個人測試,打包以後,生成的ipa包內,是沒有這個.entitlements 文件的。通過測試,我發現是能夠正常收到推送信息的。測試的方法以下,你們也能夠測試一下。測試

測試方法:打包以後安裝ipa文件,而後利用極光推送,選擇生產環境,推送,便可。

通過上面的操做,你就會驚奇的發現,推送已經適配完畢了,iOS10的系統,已經能夠正常接收通知了。fetch

2、中級篇

這裏我會給你們講一講iOS10的推送,如何註冊,經過什麼代理,哪些方法能夠用,哪些方法不能夠用。ui

1.系統自帶方法

你們不論是使用三方平臺的推送,仍是系統自帶的推送,都先應該瞭解下系統自帶方法,如何實現遠程通知的實現。spa

  • 第一步導入#import <UserNotifications/UserNotifications.h>
    且要遵照<UNUserNotificationCenterDelegate>的協議,在Appdelegate.m中。
    這裏須要注意,咱們最好寫成這種形式
    #ifdef NSFoundationVersionNumber_iOS_9_x_Max #import <UserNotifications/UserNotifications.h> #endif
    • 第二步咱們須要在 (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中註冊通知,代碼以下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) { //iOS10特有 UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; // 必須寫代理,否則沒法監聽通知的接收與點擊 center.delegate = self; [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionBadge | UNAuthorizationOptionSound) completionHandler:^(BOOL granted, NSError * _Nullable error) { if (granted) { // 點擊容許 NSLog(@"註冊成功"); [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) { NSLog(@"%@", settings); }]; } else { // 點擊不容許 NSLog(@"註冊失敗"); } }]; }else if ([[UIDevice currentDevice].systemVersion floatValue] >8.0){ //iOS8 - iOS10 [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge categories:nil]]; }else if ([[UIDevice currentDevice].systemVersion floatValue] < 8.0) { //iOS8系統如下 [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound]; } // 註冊得到device Token [[UIApplication sharedApplication] registerForRemoteNotifications];

其中,得到Device Token的方法是沒有改變的。

// 得到Device Token - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSLog(@"%@", [NSString stringWithFormat:@"Device Token: %@", deviceToken]); } // 得到Device Token失敗 - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error); }

這次iOS10系統的更新,蘋果給了咱們2個代理方法來處理通知的接收和點擊事件,這兩個方法在<UNUserNotificationCenterDelegate>的協議中,你們能夠查看下。此外,蘋果把本地通知跟遠程通知合二爲一。區分本地通知跟遠程通知的類是UNPushNotificationTrigger.h類中,UNPushNotificationTrigger的類型是新增長的,經過它,咱們能夠獲得一些通知的觸發條件,在使用時,咱們不該該直接使用這個類,應當使用它的子類。

  • 我簡單點說
  • 1.UNPushNotificationTrigger (遠程通知) 遠程推送的通知類型

  • 2.UNTimeIntervalNotificationTrigger (本地通知) 必定時間以後,重複或者不重複推送通知。咱們能夠設置timeInterval(時間間隔)和repeats(是否重複)。

  • 3.UNCalendarNotificationTrigger(本地通知) 必定日期以後,重複或者不重複推送通知 例如,你天天8點推送一個通知,只要dateComponents爲8,若是你想天天8點都推送這個通知,只要repeats爲YES就能夠了。

  • 4.UNLocationNotificationTrigger (本地通知)地理位置的一種通知,
    當用戶進入或離開一個地理區域來通知。在CLRegion標識符必須是惟一的。由於若是相同的標識符來標識不一樣區域的UNNotificationRequests,會致使不肯定的行爲。

接收通知的代碼以下:

// iOS 10收到通知 - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{ NSDictionary * userInfo = notification.request.content.userInfo; UNNotificationRequest *request = notification.request; // 收到推送的請求 UNNotificationContent *content = request.content; // 收到推送的消息內容 NSNumber *badge = content.badge; // 推送消息的角標 NSString *body = content.body; // 推送消息體 UNNotificationSound *sound = content.sound; // 推送消息的聲音 NSString *subtitle = content.subtitle; // 推送消息的副標題 NSString *title = content.title; // 推送消息的標題 if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { NSLog(@"iOS10 前臺收到遠程通知:%@", [self logDic:userInfo]); } else { // 判斷爲本地通知 NSLog(@"iOS10 前臺收到本地通知:{\\\\nbody:%@,\\\\ntitle:%@,\\\\nsubtitle:%@,\\\\nbadge:%@,\\\\nsound:%@,\\\\nuserInfo:%@\\\\n}",body,title,subtitle,badge,sound,userInfo); } completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert); // 須要執行這個方法,選擇是否提醒用戶,有Badge、Sound、Alert三種類型能夠設置 }

下面的代碼則是通知的點擊事件:

// 通知的點擊事件 - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{ NSDictionary * userInfo = response.notification.request.content.userInfo; UNNotificationRequest *request = response.notification.request; // 收到推送的請求 UNNotificationContent *content = request.content; // 收到推送的消息內容 NSNumber *badge = content.badge; // 推送消息的角標 NSString *body = content.body; // 推送消息體 UNNotificationSound *sound = content.sound; // 推送消息的聲音 NSString *subtitle = content.subtitle; // 推送消息的副標題 NSString *title = content.title; // 推送消息的標題 if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { NSLog(@"iOS10 收到遠程通知:%@", [self logDic:userInfo]); } else { // 判斷爲本地通知 NSLog(@"iOS10 收到本地通知:{\\\\nbody:%@,\\\\ntitle:%@,\\\\nsubtitle:%@,\\\\nbadge:%@,\\\\nsound:%@,\\\\nuserInfo:%@\\\\n}",body,title,subtitle,badge,sound,userInfo); } // Warning: UNUserNotificationCenter delegate received call to -userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: but the completion handler was never called. completionHandler(); // 系統要求執行這個方法 }

在點擊事件中,若是咱們不寫completionHandler()這個方法,可能會報一下的錯誤,但願你們注意下~
Warning: UNUserNotificationCenter delegate received call to -userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: but the completion handler was never called.

最後最後,咱們要你們補充一下,舊版本的一些方法,方便你們擴充iOS10的通知的通知,不影響原有邏輯。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { NSLog(@"iOS6及如下系統,收到通知:%@", [self logDic:userInfo]); } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler: (void (^)(UIBackgroundFetchResult))completionHandler { NSLog(@"iOS7及以上系統,收到通知:%@", [self logDic:userInfo]); completionHandler(UIBackgroundFetchResultNewData); }

2.極光推送(須要下載最新的版本)

若是用到三方的一些平臺,作推送就會更爲簡單。

1.註冊通知的代碼以下

if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) { #ifdef NSFoundationVersionNumber_iOS_9_x_Max JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init]; entity.types = UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound; [JPUSHService registerForRemoteNotificationConfig:entity delegate:self]; #endif } else if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { //能夠添加自定義categories [JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil]; } else { //categories 必須爲nil [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert) categories:nil]; }

註冊完成以後,咱們則須要加入極光推送更新後,新加入的2個方法,這兩個方法在<JPUSHRegisterDelegate>代理方法中。

/* * @brief handle UserNotifications.framework [willPresentNotification:withCompletionHandler:] * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用戶通知中心 * @param notification 前臺獲得的的通知對象 * @param completionHandler 該callback中的options 請使用UNNotificationPresentationOptions */ - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger options))completionHandler; /* * @brief handle UserNotifications.framework [didReceiveNotificationResponse:withCompletionHandler:] * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用戶通知中心 * @param response 通知響應對象 * @param completionHandler */ - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler;

使用時,只須要在上面的代碼中添加極光的處理方法就能夠了,具體使用以下圖:

if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { // 這個方法,不論是收到通知代理仍是點擊通知的代理,若是使用極光推送,咱們都是須要增長這個方法的。 [JPUSHService handleRemoteNotification:userInfo]; NSLog(@"iOS10 收到遠程通知:%@", [self logDic:userInfo]); [rootViewController addNotificationCount]; } else { // 判斷爲本地通知 NSLog(@"iOS10 收到本地通知:{\\\\nbody:%@,\\\\ntitle:%@,\\\\nsubtitle:%@,\\\\nbadge:%@,\\\\nsound:%@,\\\\nuserInfo:%@\\\\n}",body,title,subtitle,badge,sound,userInfo); }

經過上面的文章,相信你們已經能夠初步瞭解新版本的推送,要如何處理啦~

稍後,我會更新如下的內容,但願你們支持:
UNNotificationContentExtension - 通知內容擴展
UNNotificationServiceExtension- 通知服務擴展
UNNotificationAction - 通知響應的方法
UNErrorCode - 通知錯誤
UNNotificationAttachment - 附件通知
稍後我還會上傳demo路徑。

若是你喜歡個人文章,不要忘記關注我,謝謝你們了~
另外若是你要轉載,但願能夠註明出處,我會寫出更多更好的文章,來回饋你們~



 

 

 

 

雖然這篇文章比較長,也很差理解,可是仍是建議你們收藏,之後用到的時候,能夠看看,有耐心的仍是讀一讀。

這篇文章開始,我會跟你們好好講講,蘋果新發布的iOS10的全部通知類。

1、建立本地通知事例詳解:

注意啊,小夥伴們,本地通知也必須在appdelegate中註冊中心,通知的開關打不打開無所謂的,畢竟是本地通知,可是通知的接收的代理,以及通知點擊的代理,蘋果給合二爲一了。因此你們仍是須要在appdelegate中寫上這2個方法,還有不要忘記在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions註冊通知中心。若是使用極光推送的小夥伴,寫看一下個人基礎篇,辛苦你們啦

建立一個UNNotificationRequest類的實例,必定要爲它設置identifier, 在後面的查找,更新, 刪除通知,這個標識是能夠用來區分這個通知與其餘通知
把request加到UNUserNotificationCenter, 並設置觸發器,等待觸發
若是另外一個request具備和以前request相同的標識,不一樣的內容, 能夠達到更新通知的目的

建立一個本地通知咱們應該先建立一個UNNotificationRequest類,而且將這個類添加到UNUserNotificationCenter才能夠。代碼以下:

// 1.建立一個UNNotificationRequest NSString *requestIdentifer = @"TestRequest"; UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:requestIdentifer content:content trigger:trigger]; // 2.將UNNotificationRequest類,添加進當前通知中心中 [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) { }];

在建立UNNotificationRequest類時,官方的解釋是說,一個通知請求能夠在預約經過時間和位置,來通知用戶。觸發的方式見UNNotificationTrigger的相關說明。調用該方法,在通知觸發的時候。會取代具備相同標識符的通知請求,此外,消息個數受系統限制。

上面的翻譯,看上去可能有些拗口,簡單來講,就是咱們須要爲UNNotificationRequest設置一個標識符,經過標識符,咱們能夠對該通知進行添加,刪除,更新等操做。

如下是完整的建立通知的代碼:

// 1.建立通知內容 UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init]; content.title = @"徐不一樣測試通知"; content.subtitle = @"測試通知"; content.body = @"來自徐不一樣的簡書"; content.badge = @1; NSError *error = nil; NSString *path = [[NSBundle mainBundle] pathForResource:@"icon_certification_status1@2x" ofType:@"png"]; // 2.設置通知附件內容 UNNotificationAttachment *att = [UNNotificationAttachment attachmentWithIdentifier:@"att1" URL:[NSURL fileURLWithPath:path] options:nil error:&error]; if (error) { NSLog(@"attachment error %@", error); } content.attachments = @[att]; content.launchImageName = @"icon_certification_status1@2x"; // 2.設置聲音 UNNotificationSound *sound = [UNNotificationSound defaultSound]; content.sound = sound; // 3.觸發模式 UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO]; // 4.設置UNNotificationRequest NSString *requestIdentifer = @"TestRequest"; UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:requestIdentifer content:content trigger:trigger1]; //5.把通知加到UNUserNotificationCenter, 到指定觸發點會被觸發 [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) { }];

經過以上代碼,咱們就能夠建立一個5秒觸發本地通知,具體樣式能夠看下圖


QQ20160919-0@2x.png-173.2kB

下拉放大content.launchImageName = @"icon_certification_status1@2x";顯示的圖片是這行代碼的效果,如圖


IMG_0123.PNG

根據上面內容,你們會發如今建立UNNotificationRequest的時候,會須要UNMutableNotificationContent以及UNTimeIntervalNotificationTrigger這兩個類。下面我就對相關的類,以及類擴展,作相應的說明。

1.UNNotificationContent以及UNMutableNotificationContent(通知內容和可變通知內容)

通知內容分爲可變的以及不可變的兩種類型,相似於可變數組跟不可變數組。後續咱們經過某一特定標識符更新通知,即是用可變通知了。
不論是可變通知仍是不可變通知,都有如下的幾個屬性:

// 1.附件數組,存放UNNotificationAttachment類 @property (NS_NONATOMIC_IOSONLY, copy) NSArray <UNNotificationAttachment *> *attachments ; // 2.應用程序角標,0或者不傳,意味着角標消失 @property (NS_NONATOMIC_IOSONLY, copy, nullable) NSNumber *badge; // 3.主體內容 @property (NS_NONATOMIC_IOSONLY, copy) NSString *body ; // 4.app通知下拉預覽時候展現的圖 @property (NS_NONATOMIC_IOSONLY, copy) NSString *launchImageName; // 5.UNNotificationSound類,能夠設置默認聲音,或者指定名稱的聲音 @property (NS_NONATOMIC_IOSONLY, copy, nullable) UNNotificationSound *sound ; // 6.推送內容的子標題 @property (NS_NONATOMIC_IOSONLY, copy) NSString *subtitle ; // 7.通知線程的標識 @property (NS_NONATOMIC_IOSONLY, copy) NSString *threadIdentifier; // 8.推送內容的標題 @property (NS_NONATOMIC_IOSONLY, copy) NSString *title ; // 9.遠程通知推送內容 @property (NS_NONATOMIC_IOSONLY, copy) NSDictionary *userInfo; // 10.category標識 @property (NS_NONATOMIC_IOSONLY, copy) NSString *categoryIdentifier;

以上的的屬性,我都增長了相應的說明,你們能夠對照個人註釋來使用。

2.UNNotificationAttachment (附件內容通知)

在UNNotificationContent類中,有個附件數組的屬性,這就是包含UNNotificationAttachment類的數組了。

@property (NS_NONATOMIC_IOSONLY, copy) NSArray <UNNotificationAttachment *> *attachments ;

蘋果的解釋說,UNNotificationAttachment(附件通知)是指能夠包含音頻,圖像或視頻內容,而且能夠將其內容顯示出來的通知。使用本地通知時,能夠在通知建立時,將附件加入便可。對於遠程通知,則必須實現使用UNNotificationServiceExtension類通知服務擴展。

建立附件的方法是attachmentWithIdentifier:URL:options:error:。在使用時,必須指定使用文件附件的內容,而且文件格式必須是支持的類型之一。建立附件後,將其分配給內容對象的附件屬性。 (對於遠程通知,您必須從您的服務擴展作到這一點。)
附件通知支持的類型以下圖:


QQ20160918-3.png-45.5kB

下面是建立UNNotificationAttachment的方法:

+ (nullable instancetype)attachmentWithIdentifier:(NSString *)identifier URL:(NSURL *)URL options:(nullable NSDictionary *)options error:(NSError *__nullable *__nullable)error;

注意:URL必須是一個有效的文件路徑,否則會報錯

這裏我再在說下options的屬性,一共有4種選項(這幾個屬性可研究死我了)

  • 1UNNotificationAttachmentOptionsTypeHintKey此鍵的值是一個包含描述文件的類型統一類型標識符(UTI)一個NSString。若是不提供該鍵,附件的文件擴展名來肯定其類型,經常使用的類型標識符有
    kUTTypeImage,kUTTypeJPEG2000,kUTTypeTIFF,kUTTypePICT,kUTTypeGIF ,kUTTypePNG,kUTTypeQuickTimeImage等。看到這裏你必定有疑問,這些類型導入報錯了啊!!我研究了蘋果文檔,發現你們須要添加如下框架才能夠,具體你們能夠經過如下類型來處理。

注意:
框架就是#import<MobileCoreServices/MobileCoreServices.h>

使用方法以下:

dict[UNNotificationAttachmentOptionsTypeHintKey] = (__bridge id _Nullable)(kUTTypeImage);
  • 2UNNotificationAttachmentOptionsThumbnailHiddenKey,是一個BOOL值,爲YES時候,縮略圖將隱藏,默認爲YES。如圖:


    IMG_0124.PNG-67.2kB


    你們能夠對照上面的圖來看,就明白是哪裏的圖消失了。

    使用方法以下:

    dict[UNNotificationAttachmentOptionsThumbnailHiddenKey] = @YES;
  • 3UNNotificationAttachmentOptionsThumbnailClippingRectKey剪貼矩形的縮略圖。這個密鑰的值是包含一個歸一化的CGRect - 也就是說,一個單元的矩形,其值是在以1.0〜 0.0 ,表示要顯示的原始圖像的所述部分的字典。例如,指定的(0.25 , 0.25)的原點和大小(0.5 ,0.5 )定義了剪輯矩形,只顯示圖像的中心部分。使用CGRectCreateDictionaryRepresentation函數來建立字典的矩形。

上面這句話是蘋果的翻譯,太繞口了。我簡單說,就是我下面這幅圖。


QQ20160919.png-728.4kB


整張圖被分割了,總體比例爲1,若是想獲得圖中陰影面積,就須要寫的CGRect(0.5,0.5,0.25,0.25),意思是,從(0.5,0.5)爲原點,面積爲(0.25,0.25),你們能夠理解成,即下面的方法。

使用方法以下:

dict[UNNotificationAttachmentOptionsThumbnailClippingRectKey] = (__bridge id _Nullable)((CGRectCreateDictionaryRepresentation(CGRectMake(0.5, 0.5, 0.25 ,0.25))));;

使用上面的方法,能夠獲得一張圖的陰影部分的圖像,這張圖像會是通知的縮略圖。好比我下面的這個圖,縮略圖你們應該能夠發現變了吧。


QQ20160919-10.png-49.2kB

這裏爲了理解,在給你們說幾個"座標點":
(0,0,0.25,0.25)左上角的最小正方形
(0,0,0.5,0.5) 四分之一的正方形,左上角
(0.5,0.5,0.5,0.5)四分之一的正方形,右下角
(0.5,0,0.5,0.5)四分之一的正方形,左下角
(0.25,0.25,0.5,0.5)最中心的正方形

特別注意:

調試到這裏的時候,我感受蘋果應該是有個bug,就是我在來回變化這個顯示縮略圖的frame的時候,來回改,永遠顯示爲第一次寫的frame。我在修改UNNotificationRequest的requestIdentifer屬性後,能夠變換屬性。因此我猜想可能相同requestIdentifer的通知,算一個通知,因此只能調用更新的方法,來變化縮略圖的吃不膩吧,或許也不是bug。

  • 4UNNotificationAttachmentOptionsThumbnailTimeKey,通常影片附件會用到,指的是用影片中的某一秒來作這個縮略圖;

使用方法以下:

dict[UNNotificationAttachmentOptionsThumbnailTimeKey] =@10;

這裏咱們能夠直接傳遞一個NSNumber的數值,好比使用影片第10s的畫面來作縮略圖就按照上面的來寫。此外,要注意的是,這個秒數必須是這個影片長度範圍內的,否則報錯。

3.UNTimeIntervalNotificationTrigger (通知觸發模式)

這個我在iOS開發 iOS10推送必看(基礎篇)這篇文章中已經初步介紹了,如今我在詳細介紹下。

  • 1.UNPushNotificationTrigger (遠程通知觸發)通常咱們不會使用的

  • 2.UNTimeIntervalNotificationTrigger (本地通知) 必定時間以後,重複或者不重複推送通知。咱們能夠設置timeInterval(時間間隔)和repeats(是否重複)。

    使用方法:

    UNTimeIntervalNotificationTrigger *triggerOne = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO];

解釋:上面的方法是指5秒鐘以後執行。repeats這個屬性,若是須要爲重複執行的,則TimeInterval必須大於60s,不然會報`* Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'time interval must be at least 60 if repeating'`的錯誤!**

  • 3.UNCalendarNotificationTrigger(本地通知) 必定日期以後,重複或者不重複推送通知 例如,你天天8點推送一個通知,只須要dateComponents爲8。若是你想天天8點都推送這個通知,只要repeats爲YES就能夠了。
// 週一早上 8:00 上班 NSDateComponents *components = [[NSDateComponents alloc] init]; // 注意,weekday是從週日開始的,若是想設置爲從週一開始,你們能夠本身想一想~ components.weekday = 2; components.hour = 8; UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:YES];
  • 4.UNLocationNotificationTrigger (本地通知)地理位置的一種通知,使用這個通知,你須要導入
    #import<CoreLocation/CoreLocation.h>這個系統類庫。示例代碼以下:
//一、若是用戶進入或者走出某個區域會調用下面兩個方法 - (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region - (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region代理方法反饋相關信息 //二、一到某個經緯度就通知,判斷包含某一點麼 // 不建議使用!!!!!!CLRegion *region = [[CLRegion alloc] init];// 不建議使用!!!!!! CLCircularRegion *circlarRegin = [[CLCircularRegion alloc] init]; [circlarRegin containsCoordinate:(CLLocationCoordinate2D)]; UNLocationNotificationTrigger *trigger4 = [UNLocationNotificationTrigger triggerWithRegion:circlarRegin repeats:NO];

注意,這裏建議使用CLCircularRegion這個繼承自CLRegion的類,由於我看到蘋果已經飛起了CLRegion裏面是否包含這一點的方法,而且推薦咱們使用CLCircularRegion這個類型



 
文/徐不一樣(簡書做者) 原文連接:http://www.jianshu.com/p/f5337e8f336d 著做權歸做者全部,轉載請聯繫做者得到受權,並標註「簡書做者」。
相關文章
相關標籤/搜索