前言
推送通知,想必大家都很熟悉,關於原理之類的,這裡就不過多闡述。在這裡我們主要介紹下iOS8及iOS9之後關於推送的新功能。大家可能見過聽說過,但可能有一些朋友並沒有上手做過。這篇文章便給大家詳細介紹推送中的快捷按鈕及快捷回復等功能的實現。
快捷點贊,如微博點贊功能
效果圖大家可以先看下:
首先先說如何為自己的推送添加快捷功能,該Demo中的動作 “贊”,代碼如下:
//創建消息上面要添加的動作 UIMutableUserNotificationAction *action1 = [[UIMutableUserNotificationAction alloc] init]; action1.identifier = kNotificationActionIdentifileStar; action1.title = @"贊"; //當點擊的時候不啟動程序,在後台處理 action1.activationMode = UIUserNotificationActivationModeBackground; //需要解鎖才能處理(意思就是如果在鎖屏界面收到通知,並且iPhone設置了屏幕鎖,點擊了贊不會直接進入我們的回調進行處理,而是需要輸入屏幕鎖密碼之後才進入我們的回調),如果action.activationMode = UIUserNotificationActivationModeForeground;則這個屬性被忽略; action1.authenticationRequired = YES; /* destructive屬性設置後,在通知欄或鎖屏界面左劃,按鈕顏色會變為紅色 如果兩個按鈕均設置為YES,則均為紅色(略難看) 如果兩個按鈕均設置為NO,即默認值,則第一個為藍色,第二個為淺灰色 如果一個YES一個NO,則都顯示對應的顏色,即紅藍雙色 (CP色)。 */ action1.destructive = NO;
關於參數的意思,上方代碼中已經有詳細的解釋了,那麼該動作按鈕創建完之後,我們需要的就是創建動作集合,並進行注冊,代碼如下:
//創建動作(按鈕)的類別集合 UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc] init]; //這組動作的唯一標示(kNotificationCategoryIdentifile為我定義的一個宏,可自行定義) category.identifier = kNotificationCategoryIdentifile; //最多支持兩個,如果添加更多的話,後面的將被忽略 [category setActions:@[action1, action2] forContext:(UIUserNotificationActionContextMinimal)]; //創建UIUserNotificationSettings,並設置消息的顯示類類型 UIUserNotificationSettings *uns = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound) categories:[NSSet setWithObject:category]]; [[UIApplication sharedApplication] registerUserNotificationSettings:uns];
到這裡便能實現推送中快捷點贊的功能了。當然我們還會注意到iPhone中短信有快捷回復功能,這個是怎麼實現的呢。 客官請往下繼續看。
快捷回復,如短信中下拉快捷回復功能
老規矩,還是先上效果圖,如下:
這個評論的動作和上面的“贊“只是多了一個屬性的設置,即”behavior“。代碼如下:
//第二個動作 UIMutableUserNotificationAction *action2 = [[UIMutableUserNotificationAction alloc] init]; action2.identifier = kNotificationActionIdentifileComment; action2.title = @"評論"; //當點擊的時候不啟動程序,在後台處理 action2.activationMode = UIUserNotificationActivationModeBackground; //設置了behavior屬性為 UIUserNotificationActionBehaviorTextInput 的話,則點擊了該按鈕會出現輸入框供輸入 action2.behavior = UIUserNotificationActionBehaviorTextInput;
細心的朋友可能注意到我在快捷回復輸入內容時候,輸入框右邊的按鈕名字和短信的快捷回復按鈕名字並不一樣(短信的為”發送“,該Demo為”評論“),這個按鈕我們也是可以進行自定義的,代碼如下:
//這個字典定義了當點擊了評論按鈕後,輸入框右側的按鈕名稱,如果不設置該字典,則右側按鈕名稱默認為 “發送” action2.parameters = @{UIUserNotificationTextInputActionButtonTitleKey: @"評論"};
到這裡,該Demo的基本功能就已經差不多完全實現了。剩下的就是回調了,回調走的函數便是AppDelegate中的代理方法了,如下:
// 本地通知回調函數,當應用程序在前台時調用 - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification; //在非本App界面時收到本地消息,下拉消息會有快捷回復的按鈕,點擊按鈕後調用的方法,根據identifier來判斷點擊的哪個按鈕,notification為消息內容 - (void)application:(UIApplication *)application handleActionWithIdentifier:(nullable NSString *)identifier forLocalNotification:(UILocalNotification *)notification withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler;
結束語
1:以上代碼是只注冊了本地推送的,遠程推送和本地推送類似,推送消息如果要觸發快捷動作,則需要在消息本體中含有上面category的identifier標志。如
//這個"Identifile"的需要和你在代碼中設置的kNotificationCategoryIdentifile保持一致 {"aps":{"Identifile":"test remote notification", "sound":"default", "badge": 1, "category":"category"}}
2:在碼代碼時候如果需要兼容低版本的話,請注意在代碼中進行版本的判斷。
3:最後奉上Demo地址。