iOS10通知框架UserNotification理解與應用

iOS10通知框架UserNotification理解與應用

1、引言

        關於通知,不管與遠程Push仍是本地通知,以往的iOS系統暴漏給開發者的接口都是十分有限的,開發者只能對標題和內容進行簡單的定義,至於UI展現和用戶交互行爲相關的部分,開發者開發起來都十分困難。至於本地通知,iOS10以前採用的是UILocationNotification類,遠程通知有蘋果服務器進行轉發,本地通知和遠程通知其回調的處理都是經過AppDelegate中的幾個回調方法來完成。iOS10系統中,通知功能的加強是一大優化之處,iOS10中將通知功能整合成了一個框架UserNotification,其結構十分相似於iOS8中的UIWebView向WebKit框架整合的思路。而且UserNotification相比以前的通知功能更增強大,主要表如今以下幾點:數組

1.通知處理代碼能夠從AppDelegate中剝離。服務器

2.通知的註冊,設置,處理更加結構化,更易於模塊化開發。app

3.UserNotification支持自定義通知音效和啓動圖。框架

4.UserNotification支持向通知內容中添加媒體附件,例如音頻,視頻。模塊化

5.UserNotification支持開發者定義多套通知模板。學習

6.UserNotification支持徹底自定義的通知界面。優化

7.UserNotification支持自定義通知中的用戶交互按鈕。ui

8.通知的觸發更加容易管理。atom

從上面列舉的幾點就能夠看出,iOS10中的UsreNotification真的是一個大的改進,溫故而知新,關於iOS以前版本本地通知和遠程通知的相關內容請查看以下博客:url

本地推送:http://my.oschina.net/u/2340880/blog/405491

遠程推送:http://my.oschina.net/u/2340880/blog/413584

2、UserNotification概覽

        學習一個新的框架或知識模塊時,宏觀上了解其體系,大致上掌握其結構是十分必要的,這更有利於咱們對這個框架或模塊的總體把握與理解。UserNotification框架中拆分定義了許多類、枚舉和結構體,其中還定義了許多常量,類與類之間雖然關係複雜,但脈絡十分清晰,把握住主線,層層分析,邊很容易理解和應用UserNotification框架。

        下圖中列舉了UserNotification框架中全部核心的類:

如圖中關係所示,UserNotification框架中的核心類列舉以下:

UNNotificationCenter:通知管理中心,單例,通知的註冊,接收通知後的回調處理等,是UserNotification框架的核心。

UNNotification:通知對象,其中封裝了通知請求。

UNNotificationSettings:通知相關設置。

UNNotificationCategory:通知模板。

UNNotificationAction:用於定義通知模板中的用戶交互行爲。

UNNotificationRequest:註冊通知請求,其中定義了通知的內容和觸發方式。

UNNotificationResponse:接收到通知後的回執。

UNNotificationContent:通知的具體內容。

UNNotificationTrigger:通知的觸發器,由其子類具體定義。

UNNotificationAttachment:通知附件類,爲通知內容添加媒體附件。

UNNotificationSound:定義通知音效。

UNPushNotificationTrigger:遠程通知的觸發器,UNNotificationTrigger子類。

UNTimeInervalNotificationTrigger:計時通知的觸發器,UNNotificationTrigger子類。

UNCalendarNotificationTrigger:週期通知的觸發器,UNNotificationTrigger子類。

UNLocationNotificationTrigger:地域通知的觸發器,UNNotificationTrigger子類。

UNNotificationCenterDelegate:協議,其中方法用於監聽通知狀態。

3、進行通知用戶權限申請與建立普通的本地通知

        要在iOS系統中使用通知,必須獲取到用戶權限,UserNotification框架中申請通知用戶權限須要經過UNNotificationCenter來完成,示例以下:

//進行用戶權限的申請
[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:UNAuthorizationOptionBadge|UNAuthorizationOptionSound|UNAuthorizationOptionAlert|UNAuthorizationOptionCarPlay completionHandler:^(BOOL granted, NSError * _Nullable error) {
      //在block中會傳入布爾值granted,表示用戶是否贊成
      if (granted) {
            //若是用戶權限申請成功,設置通知中心的代理
            [UNUserNotificationCenter currentNotificationCenter].delegate = self;
      }
}];

申請用戶權限的方法中須要傳入一個權限內容的參數,其枚舉定義以下:

typedef NS_OPTIONS(NSUInteger, UNAuthorizationOptions) {
    //容許更新app上的通知數字
    UNAuthorizationOptionBadge   = (1 << 0),
    //容許通知聲音
    UNAuthorizationOptionSound   = (1 << 1),
    //容許通知彈出警告
    UNAuthorizationOptionAlert   = (1 << 2),
    //容許車載設備接收通知
    UNAuthorizationOptionCarPlay = (1 << 3),
};

獲取到用戶權限後,使用UserNotification建立普通的通知,示例代碼以下:

//通知內容類
    UNMutableNotificationContent * content = [UNMutableNotificationContent new];
    //設置通知請求發送時 app圖標上顯示的數字
    content.badge = @2;
    //設置通知的內容
    content.body = @"這是iOS10的新通知內容:普通的iOS通知";
    //默認的通知提示音
    content.sound = [UNNotificationSound defaultSound];
    //設置通知的副標題
    content.subtitle = @"這裏是副標題";
    //設置通知的標題
    content.title = @"這裏是通知的標題";
    //設置從通知激活app時的launchImage圖片
    content.launchImageName = @"lun";
    //設置5S以後執行
    UNTimeIntervalNotificationTrigger * trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO];
    UNNotificationRequest * request = [UNNotificationRequest requestWithIdentifier:@"NotificationDefault" content:content trigger:trigger];
    //添加通知請求
    [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
        
    }];

效果以下面圖示:

               

4、通知音效類UNNotificationSound

        通知能夠進行自定義的音效設置,其中方法以下:

//系統默認的音效
+ (instancetype)defaultSound;
//自定義的音頻音效
/*
注意,音頻文件必須在bundle中或者在Library/Sounds目錄下
*/
+ (instancetype)soundNamed:(NSString *)name __WATCHOS_PROHIBITED;

5、通知觸發器UNNotificationTrigger

        通知觸發器能夠理解爲定義通知的發送時間,UNNotificationTrigger是觸發器的基類,具體的觸發器由它的四個子類實現,實際上,開發者在代碼中可能會用到的觸發器只有三種,UNPushNotificationTrigger遠程推送觸發器開發者不須要建立使用,遠程通知有遠程服務器觸發,開發者只須要建立與本地通知有關的觸發器進行使用。

1.UNTimeIntervalNotificationTrigger

        UNTimeIntervalNotificationTrigger是計時觸發器,開發者能夠設置其在添加通知請求後必定時間發送。

//建立觸發器 在timeInterval秒後觸發 能夠設置是否循環觸發
+ (instancetype)triggerWithTimeInterval:(NSTimeInterval)timeInterval repeats:(BOOL)repeats;
//獲取下次觸發的時間點
- (nullable NSDate *)nextTriggerDate;

2.UNCalendarNotificationTrigger

        UNCalendarNotificationTrigger是日曆觸發器,開發者能夠設置其在某個時間點觸發。

//建立觸發器 設置觸發時間 能夠設置是否循環觸發
+ (instancetype)triggerWithDateMatchingComponents:(NSDateComponents *)dateComponents repeats:(BOOL)repeats;
//下一次觸發的時間點
- (nullable NSDate *)nextTriggerDate;

3.UNLocationNotificationTrigger

        UNLocationNotificationTrigger是地域觸發器,開發者能夠設置當用戶進入某一區域時觸發。

//地域信息
@property (NS_NONATOMIC_IOSONLY, readonly, copy) CLRegion *region;
//建立觸發器
+ (instancetype)triggerWithRegion:(CLRegion *)region repeats:(BOOL)repeats __WATCHOS_PROHIBITED;

6、爲通知內容添加附件

        附件主要指的是媒體附件,例如圖片,音頻和視頻,爲通知內容添加附件須要使用UNNotificationAttachment類。示例代碼以下:

//建立圖片附件
    UNNotificationAttachment * attach = [UNNotificationAttachment attachmentWithIdentifier:@"imageAttach" URL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"2" ofType:@"jpg"]] options:nil error:nil];
    UNMutableNotificationContent * content = [UNMutableNotificationContent new];
    //設置附件數組
    content.attachments = @[attach];
    content.badge = @1;
    content.body = @"這是iOS10的新通知內容:普通的iOS通知";
    //默認的通知提示音
    content.sound = [UNNotificationSound defaultSound];
    content.subtitle = @"這裏是副標題";
    content.title = @"這裏是通知的標題";
    //設置5S以後執行
    UNTimeIntervalNotificationTrigger * trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO];
    UNNotificationRequest * request = [UNNotificationRequest requestWithIdentifier:@"NotificationDefaultImage" content:content trigger:trigger];
    [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
        
    }];

效果以下圖:

                 

須要注意,UNNotificationContent的附件數組雖然是一個數組,可是系統的通知模板只能展現其中的第一個附件,設置多個附件也不會有額外的效果,可是若是開發者進行通知模板UI的自定義,則此數組就能夠派上用場了。音頻附件界面以下:

須要注意,添加附件的格式和大小都有必定的要求,以下表格所示:

建立通知內容附件UNNotificationAttachment實例的方法中有一個options配置字典,這個字典中能夠進行配置的鍵值對以下:

//配置附件的類型的鍵 須要設置爲NSString類型的值,若是不設置 則默認從擴展名中推斷
extern NSString * const UNNotificationAttachmentOptionsTypeHintKey __IOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0);
//配置是否隱藏縮略圖的鍵 須要配置爲NSNumber 0或者1
extern NSString * const UNNotificationAttachmentOptionsThumbnailHiddenKey __IOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0);
//配置使用一個標準的矩形來對縮略圖進行裁剪,須要配置爲CGRectCreateDictionaryRepresentation(CGRect)建立的矩形引用
extern NSString * const UNNotificationAttachmentOptionsThumbnailClippingRectKey __IOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0);
//使用視頻中的某一幀做爲縮略圖 配置爲NSNumber時間
extern NSString * const UNNotificationAttachmentOptionsThumbnailTimeKey __IOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0);

7、定義通知模板UNNotificationCategory

        聊天類軟件在iOS系統中,經常採用後臺推送的方式推送新消息,用戶能夠在不進入應用程序的狀況下,直接在左面回覆通知推送過來的信息,這種功能就是經過UNNotificationCategory模板與UNNotificationAction用戶活動來實現的。關於文本回復框,UserNotification框架中提供了UNTextInputNotificationAction類,其是UNNotificationAction的子類。示例代碼以下:

//建立用戶活動
    /*
    options參數可選以下:
    //須要在解開鎖屏下使用
    UNNotificationActionOptionAuthenticationRequired
    //是否指示有破壞性
    UNNotificationActionOptionDestructive
    //是否容許活動在後臺啓動app
    UNNotificationActionOptionForeground
    //無設置
    UNNotificationActionOptionNone
    */
    UNTextInputNotificationAction * action = [UNTextInputNotificationAction actionWithIdentifier:@"action" title:@"回覆" options:UNNotificationActionOptionAuthenticationRequired textInputButtonTitle:@"活動" textInputPlaceholder:@"請輸入回覆內容"];
    //建立通知模板
    UNNotificationCategory * category = [UNNotificationCategory categoryWithIdentifier:@"myNotificationCategoryText" actions:@[action] intentIdentifiers:@[] options:UNNotificationCategoryOptionCustomDismissAction];
    UNMutableNotificationContent * content = [UNMutableNotificationContent new];
    content.badge = @1;
    content.body = @"這是iOS10的新通知內容:普通的iOS通知";
    //默認的通知提示音
    content.sound = [UNNotificationSound defaultSound];
    content.subtitle = @"這裏是副標題";
    content.title = @"這裏是通知的標題";
    //設置通知內容對應的模板 須要注意 這裏的值要與對應模板id一致
    content.categoryIdentifier = @"myNotificationCategoryText";
    //設置5S以後執行
    UNTimeIntervalNotificationTrigger * trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO];
      [[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObjects:category, nil]];
    UNNotificationRequest * request = [UNNotificationRequest requestWithIdentifier:@"NotificationDefaultText" content:content trigger:trigger];
  
    [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
        
    }];

須要注意,要使用模板,通知內容UNNotificationContent的categoryIdentifier要與UNNotificationCategory的id一致。效果以下:

        也能夠爲通知模板添加多個自定義的用戶交互按鈕,示例以下:

UNNotificationAction * action = [UNNotificationAction actionWithIdentifier:@"action" title:@"活動標題1" options:UNNotificationActionOptionNone];
    UNNotificationAction * action2 = [UNNotificationAction actionWithIdentifier:@"action" title:@"活動標題2" options:UNNotificationActionOptionNone];
    UNNotificationAction * action3 = [UNNotificationAction actionWithIdentifier:@"action" title:@"活動標題3" options:UNNotificationActionOptionNone];
    UNNotificationAction * action4 = [UNNotificationAction actionWithIdentifier:@"action" title:@"活動標題4" options:UNNotificationActionOptionNone];
     UNNotificationCategory * category = [UNNotificationCategory categoryWithIdentifier:@"myNotificationCategoryBtn" actions:@[action,action2,action3,action4] intentIdentifiers:@[] options:UNNotificationCategoryOptionCustomDismissAction];
    UNMutableNotificationContent * content = [UNMutableNotificationContent new];
    content.badge = @1;
    content.body = @"這是iOS10的新通知內容:普通的iOS通知";
    //默認的通知提示音
    content.sound = [UNNotificationSound defaultSound];
    content.subtitle = @"這裏是副標題";
    content.title = @"這裏是通知的標題";
    content.categoryIdentifier = @"myNotificationCategoryBtn";
    //設置5S以後執行
    UNTimeIntervalNotificationTrigger * trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO];
    UNNotificationRequest * request = [UNNotificationRequest requestWithIdentifier:@"NotificationDefault" content:content trigger:trigger];
    [[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObjects:category, nil]];
    [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
        
    }];

須要注意,系統模板最多支持添加4個用戶交互按鈕,以下圖:

8、自定義通知模板UI

        經過前邊的介紹,咱們發現經過UserNotification框架開發者已經能夠完成許多歷來很難實現的效果。然而這都不是UserNotification框架最強大的地方,UserNotification框架最強大的地方在於其能夠徹底自定義通知的UI界面。

        徹底自定義通知界面是經過iOS擴展來實現的,首先建立一個新的target,以下圖:

選擇Notification Content,以下:

建立完成後,會發現工程中多了一個Notification Content的擴展,其中自帶一個storyboard文件和一個NotificationViewController類,開發者能夠在storyboard文件或者直接在Controller類中進行自定義界面的編寫。

    須要注意,NotificationViewController自動遵照了UNNotificationContentExtension協議,這個協議專門用來處理自定義通知UI的內容展現,其中方法列舉以下:

//接收到通知時會被調用
/*
開發者能夠從notification對象中拿到附件等內容進行UI刷新
*/
- (void)didReceiveNotification:(UNNotification *)notification;
//當用戶點擊了通知中的用戶交互按鈕時會被調用
/*
response對象中有通知內容相關信息
在回調block塊completion中,開發者能夠傳入一個UNNotificationContentExtensionResponseOption參數來告訴系統如何處理此次用戶活動
UNNotificationContentExtensionResponseOption枚舉中可選值以下:
typedef NS_ENUM(NSUInteger, UNNotificationContentExtensionResponseOption) {
    //不關閉當前通知界面
    UNNotificationContentExtensionResponseOptionDoNotDismiss,
    //關閉當前通知界面
    UNNotificationContentExtensionResponseOptionDismiss,
    //關閉當前通知界面並將用戶活動傳遞給宿主app處理
    UNNotificationContentExtensionResponseOptionDismissAndForwardAction,
} __IOS_AVAILABLE(10_0) __TVOS_UNAVAILABLE __WATCHOS_UNAVAILABLE __OSX_UNAVAILABLE;
*/
- (void)didReceiveNotificationResponse:(UNNotificationResponse *)response completionHandler:(void (^)(UNNotificationContentExtensionResponseOption option))completion;
/*
這個屬性做爲get方法進行實現 這個方法用來返回一個通知界面要顯示的媒體按鈕
typedef NS_ENUM(NSUInteger, UNNotificationContentExtensionMediaPlayPauseButtonType) {
    //不顯示媒體按鈕
    UNNotificationContentExtensionMediaPlayPauseButtonTypeNone,
    //默認的媒體按鈕 當點擊按鈕後 進行播放與暫停的切換 按鈕始終顯示
    UNNotificationContentExtensionMediaPlayPauseButtonTypeDefault,
    //Overlay風格 當點擊按鈕後,媒體播放,按鈕隱藏 點擊媒體後,播放暫停,按鈕顯示。
    UNNotificationContentExtensionMediaPlayPauseButtonTypeOverlay,
} __IOS_AVAILABLE(10_0) __TVOS_UNAVAILABLE __WATCHOS_UNAVAILABLE __OSX_UNAVAILABLE;
*/
@property (nonatomic, readonly, assign) UNNotificationContentExtensionMediaPlayPauseButtonType mediaPlayPauseButtonType;
//返回媒體按鈕的位置
@property (nonatomic, readonly, assign) CGRect mediaPlayPauseButtonFrame;
//返回媒體按鈕的顏色
@property (nonatomic, readonly, copy) UIColor *mediaPlayPauseButtonTintColor;
//點擊播放按鈕的回調
- (void)mediaPlay;
//點擊暫停按鈕的回調
- (void)mediaPause;
//媒體開始播放的回調
- (void)mediaPlayingStarted __IOS_AVAILABLE(10_0) __TVOS_UNAVAILABLE __WATCHOS_UNAVAILABLE __OSX_UNAVAILABLE;
//媒體開始暫停的回調
- (void)mediaPlayingPaused __IOS_AVAILABLE(10_0) __TVOS_UNAVAILABLE __WATCHOS_UNAVAILABLE __OSX_UNAVAILABLE;

須要注意,自定義的通知界面上雖然能夠放按鈕,能夠聽任何UI控件,可是其不能進行用戶交互,惟一能夠進行用戶交互的方式是經過協議中的媒體按鈕及其回調方法。

        定義好了通知UI模板,若要進行使用,還須要再Notification Content擴展中的info.plist文件的NSExtension字典的NSExtensionAttributes字典裏進行一些配置,正常狀況下,開發者須要進行配置的鍵有3個,分別以下:

UNNotificationExtensionCategory:設置模板的categoryId,用於與UNNotificationContent對應。

UNNotificationExtensionInitialContentSizeRatio:設置自定義通知界面的高度與寬度的比,寬度爲固定寬度,在不一樣設備上有差異,開發者須要根據寬度計算出高度進行設置,系統根據這個比值來計算通知界面的高度。

UNNotificationExtensionDefaultContentHidden:是有隱藏系統默認的通知界面。

配置info.plist文件以下:

用以下的代碼建立通知:

UNNotificationAction * action = [UNNotificationAction actionWithIdentifier:@"action" title:@"活動標題1" options:UNNotificationActionOptionNone];
    //根據id拿到自定義UI的模板
    UNNotificationCategory * category = [UNNotificationCategory categoryWithIdentifier:@"myNotificationCategoryH" actions:@[action] intentIdentifiers:@[] options:UNNotificationCategoryOptionCustomDismissAction];
    UNMutableNotificationContent * content = [UNMutableNotificationContent new];
    content.badge = @1;
    content.body = @"這是iOS10的新通知內容:普通的iOS通知";
    //默認的通知提示音
    content.sound = [UNNotificationSound defaultSound];
    content.subtitle = @"這裏是副標題";
    content.title = @"這裏是通知的標題";
    content.categoryIdentifier = @"myNotificationCategoryH";
    //設置5S以後執行
    UNTimeIntervalNotificationTrigger * trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO];
    UNNotificationRequest * request = [UNNotificationRequest requestWithIdentifier:@"NotificationDefaultCustomUIH" content:content trigger:trigger];
    [[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObjects:category, nil]];
    [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
        
    }];

效果以下圖:

若是將UNNotificationExtensionDefaultContentHidden鍵值設置爲0或者不設置,則不會隱藏系統默認的UI,以下:

9、通知回調的處理

        UserNotification框架對於通知的回調處理,是經過UNUserNotificationCenterDelegate協議來實現的,這個協議中有兩個方法,以下:

/*
這個方法在應用在前臺,而且將要彈出通知時被調用,後臺狀態下彈通知不會調用這個方法
這個方法中的block塊completionHandler()能夠傳入一個UNNotificationPresentationOptions類型的枚舉
有個這個參數,開發者能夠設置在前臺狀態下,依然能夠彈出通知消息,枚舉以下:
typedef NS_OPTIONS(NSUInteger, UNNotificationPresentationOptions) {
    //只修改app圖標的消息數
    UNNotificationPresentationOptionBadge   = (1 << 0),
    //只提示通知音效
    UNNotificationPresentationOptionSound   = (1 << 1),
    //只彈出通知框
    UNNotificationPresentationOptionAlert   = (1 << 2),
} __IOS_AVAILABLE(10.0) __TVOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0);
//什麼都不作
static const UNNotificationPresentationOptions UNNotificationPresentationOptionNone 
*/
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler __IOS_AVAILABLE(10.0) __TVOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0);
/*
這個方法當接收到通知後,用戶點擊通知激活app時被調用,不管前臺仍是後臺
*/
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler __IOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0) __TVOS_PROHIBITED;

10、UserNotification框架中其餘零散知識

        前面所介紹的內容基本涵蓋了UserNotification框架中全部的內容,在之後的應用開發中,開發者能夠在通知方面發揮更大的想象力與創造力,給用戶更加友好的體驗。除了前邊所介紹過的核心內容外,UserNotification框架中還有一些零散的類、枚舉等。

1.錯誤碼描述

typedef NS_ENUM(NSInteger, UNErrorCode) {
    //通知不被容許
    UNErrorCodeNotificationsNotAllowed = 1,
    
    //附件無效url
    UNErrorCodeAttachmentInvalidURL = 100,
    //附件類型錯誤
    UNErrorCodeAttachmentUnrecognizedType,
    //附件大小錯誤
    UNErrorCodeAttachmentInvalidFileSize,
    //附件數據錯誤
    UNErrorCodeAttachmentNotInDataStore,
    UNErrorCodeAttachmentMoveIntoDataStoreFailed,
    UNErrorCodeAttachmentCorrupt,
    
    //時間無效
    UNErrorCodeNotificationInvalidNoDate = 1400,
    //無內容
    UNErrorCodeNotificationInvalidNoContent,
} __IOS_AVAILABLE(10.0) __TVOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0);

2.UNNotification類

@interface UNNotification : NSObject <NSCopying, NSSecureCoding>
//觸發的時間
@property (nonatomic, readonly, copy) NSDate *date;
//內置的通知請求對象
@property (nonatomic, readonly, copy) UNNotificationRequest *request;

- (instancetype)init NS_UNAVAILABLE;

@end

3.UNNotificationSettings類

        UNNotificationSettings類主要用來獲取與通知相關的信息。

@interface UNNotificationSettings : NSObject <NSCopying, NSSecureCoding>
//用戶權限狀態
@property (NS_NONATOMIC_IOSONLY, readonly) UNAuthorizationStatus authorizationStatus;
//音效設置
@property (NS_NONATOMIC_IOSONLY, readonly) UNNotificationSetting soundSetting __TVOS_PROHIBITED;
//圖標提醒設置
@property (NS_NONATOMIC_IOSONLY, readonly) UNNotificationSetting badgeSetting __WATCHOS_PROHIBITED;
//提醒框設置
@property (NS_NONATOMIC_IOSONLY, readonly) UNNotificationSetting alertSetting __TVOS_PROHIBITED;
//通知中心設置
@property (NS_NONATOMIC_IOSONLY, readonly) UNNotificationSetting notificationCenterSetting __TVOS_PROHIBITED;
//鎖屏設置
@property (NS_NONATOMIC_IOSONLY, readonly) UNNotificationSetting lockScreenSetting __TVOS_PROHIBITED __WATCHOS_PROHIBITED;
//車載設備設置
@property (NS_NONATOMIC_IOSONLY, readonly) UNNotificationSetting carPlaySetting __TVOS_PROHIBITED __WATCHOS_PROHIBITED;
//提醒框風格
@property (NS_NONATOMIC_IOSONLY, readonly) UNAlertStyle alertStyle __TVOS_PROHIBITED __WATCHOS_PROHIBITED;

@end

UNNotificationSetting枚舉以下:

typedef NS_ENUM(NSInteger, UNNotificationSetting) {
    //不支持
    UNNotificationSettingNotSupported  = 0,
    
    //不可用
    UNNotificationSettingDisabled,
    
    //可用
    UNNotificationSettingEnabled,
}

UNAuthorizationStatus枚舉以下:

typedef NS_ENUM(NSInteger, UNAuthorizationStatus) {
    //爲作選擇
    UNAuthorizationStatusNotDetermined = 0,
    
    // 用戶拒絕
    UNAuthorizationStatusDenied,
    
    // 用戶容許
    UNAuthorizationStatusAuthorized
}

UNAlertStyle枚舉以下:

typedef NS_ENUM(NSInteger, UNAlertStyle) {
    //無
    UNAlertStyleNone = 0,
    //頂部Banner樣式
    UNAlertStyleBanner,
    //警告框樣式
    UNAlertStyleAlert,
}

專一技術,熱愛生活,交流技術,也作朋友。

——琿少 QQ羣:203317592

相關文章
相關標籤/搜索