欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS 10 推送高階篇(必看)

 更新時(shí)間:2016年09月27日 10:42:31   作者:FMDN  
本文重點(diǎn)給大家介紹ios10 推送的所有通知類,所以說(shuō)這篇教程是ios10推送必看篇,感興趣的朋友快來(lái)一起學(xué)習(xí)吧

推薦閱讀:

iOS10推送之基礎(chǔ)知識(shí)(必看篇)

這篇文章開(kāi)始,我會(huì)跟大家好好講講,蘋(píng)果新發(fā)布的iOS10的所有通知類。

一、創(chuàng)建本地通知事例詳解:

注意啊,小伙伴們,本地通知也必須在appdelegate中注冊(cè)中心,通知的開(kāi)關(guān)打不打開(kāi)無(wú)所謂的,畢竟是本地通知,但是通知的接收的代理,以及通知點(diǎn)擊的代理,蘋(píng)果給合二為一了。所以大家還是需要在appdelegate中寫(xiě)上這2個(gè)方法,還有不要忘記在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions注冊(cè)通知中心。如果使用極光推送的小伙伴,寫(xiě)看一下我的基礎(chǔ)篇,辛苦大家啦

創(chuàng)建一個(gè)UNNotificationRequest類的實(shí)例,一定要為它設(shè)置identifier, 在后面的查找,更新, 刪除通知,這個(gè)標(biāo)識(shí)是可以用來(lái)區(qū)分這個(gè)通知與其他通知

把request加到UNUserNotificationCenter, 并設(shè)置觸發(fā)器,等待觸發(fā)
如果另一個(gè)request具有和之前request相同的標(biāo)識(shí),不同的內(nèi)容, 可以達(dá)到更新通知的目的

創(chuàng)建一個(gè)本地通知我們應(yīng)該先創(chuàng)建一個(gè)UNNotificationRequest類,并且將這個(gè)類添加到UNUserNotificationCenter才可以。代碼如下:

// 1.創(chuàng)建一個(gè)UNNotificationRequest
NSString *requestIdentifer = @"TestRequest";
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:requestIdentifer content:content trigger:trigger];
// 2.將UNNotificationRequest類,添加進(jìn)當(dāng)前通知中心中
[[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
}];

在創(chuàng)建UNNotificationRequest類時(shí),官方的解釋是說(shuō),一個(gè)通知請(qǐng)求可以在預(yù)定通過(guò)時(shí)間和位置,來(lái)通知用戶。觸發(fā)的方式見(jiàn)UNNotificationTrigger的相關(guān)說(shuō)明。調(diào)用該方法,在通知觸發(fā)的時(shí)候。會(huì)取代具有相同標(biāo)識(shí)符的通知請(qǐng)求,此外,消息個(gè)數(shù)受系統(tǒng)限制。

上面的翻譯,看上去可能有些拗口,簡(jiǎn)單來(lái)說(shuō),就是我們需要為UNNotificationRequest設(shè)置一個(gè)標(biāo)識(shí)符,通過(guò)標(biāo)識(shí)符,我們可以對(duì)該通知進(jìn)行添加,刪除,更新等操作。

以下是完整的創(chuàng)建通知的代碼:

// 1.創(chuàng)建通知內(nèi)容
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.title = @"徐不同測(cè)試通知";
content.subtitle = @"測(cè)試通知";
content.body = @"來(lái)自徐不同的簡(jiǎn)書(shū)";
content.badge = @1;
NSError *error = nil;
NSString *path = [[NSBundle mainBundle] pathForResource:@"icon_certification_status1@2x" ofType:@"png"];
// 2.設(shè)置通知附件內(nèi)容
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.設(shè)置聲音
UNNotificationSound *sound = [UNNotificationSound defaultSound];
content.sound = sound;
// 3.觸發(fā)模式
UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO];
// 4.設(shè)置UNNotificationRequest
NSString *requestIdentifer = @"TestRequest";
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:requestIdentifer content:content trigger:trigger1];
//5.把通知加到UNUserNotificationCenter, 到指定觸發(fā)點(diǎn)會(huì)被觸發(fā)
[[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
}];

通過(guò)以上代碼,我們就可以創(chuàng)建一個(gè)5秒觸發(fā)本地通知,具體樣式可以看下圖

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

根據(jù)上面內(nèi)容,大家會(huì)發(fā)現(xiàn)在創(chuàng)建UNNotificationRequest的時(shí)候,會(huì)需要UNMutableNotificationContent以及UNTimeIntervalNotificationTrigger這兩個(gè)類。下面我就對(duì)相關(guān)的類,以及類擴(kuò)展,做相應(yīng)的說(shuō)明。

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

通知內(nèi)容分為可變的以及不可變的兩種類型,類似于可變數(shù)組跟不可變數(shù)組。后續(xù)我們通過(guò)某一特定標(biāo)識(shí)符更新通知,便是用可變通知了。

不管是可變通知還是不可變通知,都有以下的幾個(gè)屬性:

// 1.附件數(shù)組,存放UNNotificationAttachment類
@property (NS_NONATOMIC_IOSONLY, copy) NSArray *attachments ;
// 2.應(yīng)用程序角標(biāo),0或者不傳,意味著角標(biāo)消失
@property (NS_NONATOMIC_IOSONLY, copy, nullable) NSNumber *badge;
// 3.主體內(nèi)容
@property (NS_NONATOMIC_IOSONLY, copy) NSString *body ;
// 4.app通知下拉預(yù)覽時(shí)候展示的圖
@property (NS_NONATOMIC_IOSONLY, copy) NSString *launchImageName;
// 5.UNNotificationSound類,可以設(shè)置默認(rèn)聲音,或者指定名稱的聲音
@property (NS_NONATOMIC_IOSONLY, copy, nullable) UNNotificationSound *sound ;
// 6.推送內(nèi)容的子標(biāo)題
@property (NS_NONATOMIC_IOSONLY, copy) NSString *subtitle ;
// 7.通知線程的標(biāo)識(shí)
@property (NS_NONATOMIC_IOSONLY, copy) NSString *threadIdentifier;
// 8.推送內(nèi)容的標(biāo)題
@property (NS_NONATOMIC_IOSONLY, copy) NSString *title ;
// 9.遠(yuǎn)程通知推送內(nèi)容
@property (NS_NONATOMIC_IOSONLY, copy) NSDictionary *userInfo;
// 10.category標(biāo)識(shí)
@property (NS_NONATOMIC_IOSONLY, copy) NSString *categoryIdentifier;

以上的的屬性,我都增加了相應(yīng)的說(shuō)明,大家可以對(duì)照我的注釋來(lái)使用。

2.UNNotificationAttachment (附件內(nèi)容通知)

在UNNotificationContent類中,有個(gè)附件數(shù)組的屬性,這就是包含UNNotificationAttachment類的數(shù)組了。

@property (NS_NONATOMIC_IOSONLY, copy) NSArray *attachments ;

蘋(píng)果的解釋說(shuō),UNNotificationAttachment(附件通知)是指可以包含音頻,圖像或視頻內(nèi)容,并且可以將其內(nèi)容顯示出來(lái)的通知。使用本地通知時(shí),可以在通知?jiǎng)?chuàng)建時(shí),將附件加入即可。對(duì)于遠(yuǎn)程通知,則必須實(shí)現(xiàn)使用UNNotificationServiceExtension類通知服務(wù)擴(kuò)展。

創(chuàng)建附件的方法是attachmentWithIdentifier:URL:options:error:。在使用時(shí),必須指定使用文件附件的內(nèi)容,并且文件格式必須是支持的類型之一。創(chuàng)建附件后,將其分配給內(nèi)容對(duì)象的附件屬性。 (對(duì)于遠(yuǎn)程通知,您必須從您的服務(wù)擴(kuò)展做到這一點(diǎn)。)

附件通知支持的類型如下圖:

下面是創(chuàng)建UNNotificationAttachment的方法:

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

注意:URL必須是一個(gè)有效的文件路徑,不然會(huì)報(bào)錯(cuò)

這里我再在說(shuō)下options的屬性,一共有4種選項(xiàng)(這幾個(gè)屬性可研究死我了)

1UNNotificationAttachmentOptionsTypeHintKey此鍵的值是一個(gè)包含描述文件的類型統(tǒng)一類型標(biāo)識(shí)符(UTI)一個(gè)NSString。如果不提供該鍵,附件的文件擴(kuò)展名來(lái)確定其類型,常用的類型標(biāo)識(shí)符有

kUTTypeImage,kUTTypeJPEG2000,kUTTypeTIFF,kUTTypePICT,kUTTypeGIF ,kUTTypePNG,kUTTypeQuickTimeImage等??吹竭@里你一定有疑問(wèn),這些類型導(dǎo)入報(bào)錯(cuò)了啊??!我研究了蘋(píng)果文檔,發(fā)現(xiàn)大家需要添加以下框架才可以,具體大家可以通過(guò)以下類型來(lái)處理。

注意:

框架就是#import

使用方法如下:

dict[UNNotificationAttachmentOptionsTypeHintKey] = (__bridge id _Nullable)(kUTTypeImage);

2UNNotificationAttachmentOptionsThumbnailHiddenKey,是一個(gè)BOOL值,為YES時(shí)候,縮略圖將隱藏,默認(rèn)為YES。如圖:

大家可以對(duì)照上面的圖來(lái)看,就明白是哪里的圖消失了。

使用方法如下:

dict[UNNotificationAttachmentOptionsThumbnailHiddenKey] = @YES;

3UNNotificationAttachmentOptionsThumbnailClippingRectKey剪貼矩形的縮略圖。這個(gè)密鑰的值是包含一個(gè)歸一化的CGRect – 也就是說(shuō),一個(gè)單元的矩形,其值是在以1.0〜 0.0 ,表示要顯示的原始圖像的所述部分的字典。例如,指定的(0.25 , 0.25)的原點(diǎn)和大?。?.5 ,0.5 )定義了剪輯矩形,只顯示圖像的中心部分。使用CGRectCreateDictionaryRepresentation函數(shù)來(lái)創(chuàng)建字典的矩形。

上面這句話是蘋(píng)果的翻譯,太繞口了。我簡(jiǎn)單說(shuō),就是我下面這幅圖。

整張圖被分割了,整體比例為1,如果想得到圖中陰影面積,就需要寫(xiě)的CGRect(0.5,0.5,0.25,0.25),意思是,從(0.5,0.5)為原點(diǎn),面積為(0.25,0.25),大家可以理解成,即下面的方法。

使用方法如下:

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

使用上面的方法,可以得到一張圖的陰影部分的圖像,這張圖像會(huì)是通知的縮略圖。比如我下面的這個(gè)圖,縮略圖大家應(yīng)該可以發(fā)現(xiàn)變了吧。

這里為了理解,在給大家說(shuō)幾個(gè)”坐標(biāo)點(diǎn)”:

(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)最中心的正方形

特別注意:

調(diào)試到這里的時(shí)候,我感覺(jué)蘋(píng)果應(yīng)該是有個(gè)bug,就是我在來(lái)回變化這個(gè)顯示縮略圖的frame的時(shí)候,來(lái)回改,永遠(yuǎn)顯示為第一次寫(xiě)的frame。我在修改UNNotificationRequest的requestIdentifer屬性后,可以變換屬性。所以我猜測(cè)可能相同requestIdentifer的通知,算一個(gè)通知,所以只能調(diào)用更新的方法,來(lái)變化縮略圖的吃不膩吧,或許也不是bug。

4UNNotificationAttachmentOptionsThumbnailTimeKey,一般影片附件會(huì)用到,指的是用影片中的某一秒來(lái)做這個(gè)縮略圖;

使用方法如下:

dict[UNNotificationAttachmentOptionsThumbnailTimeKey] =@10;

這里我們可以直接傳遞一個(gè)NSNumber的數(shù)值,比如使用影片第10s的畫(huà)面來(lái)做縮略圖就按照上面的來(lái)寫(xiě)。此外,要注意的是,這個(gè)秒數(shù)必須是這個(gè)影片長(zhǎng)度范圍內(nèi)的,不然報(bào)錯(cuò)。

3.UNTimeIntervalNotificationTrigger (通知觸發(fā)模式)

這個(gè)我在!(這篇文章中已經(jīng)初步介紹了,現(xiàn)在我在詳細(xì)介紹下)[www.baidu.com]這篇文章中已經(jīng)初步介紹了,現(xiàn)在我在詳細(xì)介紹下。

1.UNPushNotificationTrigger (遠(yuǎn)程通知觸發(fā))一般我們不會(huì)使用的

2.UNTimeIntervalNotificationTrigger (本地通知) 一定時(shí)間之后,重復(fù)或者不重復(fù)推送通知。我們可以設(shè)置timeInterval(時(shí)間間隔)和repeats(是否重復(fù))。

使用方法:

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

解釋:上面的方法是指5秒鐘之后執(zhí)行。repeats這個(gè)屬性,如果需要為重復(fù)執(zhí)行的,則TimeInterval必須大于60s,否則會(huì)報(bào)* Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'time interval must be at least 60 if repeating'的錯(cuò)誤!**

3.UNCalendarNotificationTrigger(本地通知) 一定日期之后,重復(fù)或者不重復(fù)推送通知 例如,你每天8點(diǎn)推送一個(gè)通知,只需要dateComponents為8。如果你想每天8點(diǎn)都推送這個(gè)通知,只要repeats為YES就可以了。

// 周一早上 8:00 上班
NSDateComponents *components = [[NSDateComponents alloc] init];
// 注意,weekday是從周日開(kāi)始的,如果想設(shè)置為從周一開(kāi)始,大家可以自己想想~
components.weekday = 2;
components.hour = 8;
UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:YES];

4.UNLocationNotificationTrigger (本地通知)地理位置的一種通知,使用這個(gè)通知,你需要導(dǎo)入

#import這個(gè)系統(tǒng)類庫(kù)。示例代碼如下:
//1、如果用戶進(jìn)入或者走出某個(gè)區(qū)域會(huì)調(diào)用下面兩個(gè)方法
- (void)locationManager:(CLLocationManager *)manager
didEnterRegion:(CLRegion *)region
- (void)locationManager:(CLLocationManager *)manager
didExitRegion:(CLRegion *)region代理方法反饋相關(guān)信息
//2、一到某個(gè)經(jīng)緯度就通知,判斷包含某一點(diǎn)么
// 不建議使用!?。。。?!CLRegion *region = [[CLRegion alloc] init];// 不建議使用!?。。。?!
CLCircularRegion *circlarRegin = [[CLCircularRegion alloc] init];
[circlarRegin containsCoordinate:(CLLocationCoordinate2D)];
UNLocationNotificationTrigger *trigger4 = [UNLocationNotificationTrigger triggerWithRegion:circlarRegin repeats:NO];

注意,這里建議使用CLCircularRegion這個(gè)繼承自CLRegion的類,因?yàn)槲铱吹教O(píng)果已經(jīng)飛起了CLRegion里面是否包含這一點(diǎn)的方法,并且推薦我們使用CLCircularRegion這個(gè)類型

以上所述是小編給大家介紹的iOS 10 推送高階篇(必看),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論