你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS8新特性之交互式通知

iOS8新特性之交互式通知

編輯:IOS開發綜合

iOS8以前的遠程通知想必大家都非常熟悉了,這裡不做過多介紹,直接介紹iOS8中的交互式遠程通知。


一、通過調用 [[UIApplicationsharedApplication]registerForRemoteNotifications];來實現

application:didRegisterForRemoteNotificationsWithDeviceToken:application:didFailToRegisterForRemoteNotificationsWithError:的回調


二、設置 UIUserNotificationActionUIMutableUserNotificationCategory

UIUserNotificationAction的設置:

UIMutableUserNotificationAction *cancelAction = [[UIMutableUserNotificationAction alloc] init];
[cancelAction setIdentifier:@"CancelNotificationActionIdentifier"];
[cancelAction setTitle:@"Cancel"];
[cancelAction setActivationMode:UIUserNotificationActivationModeBackground];
[cancelAction setAuthenticationRequired:YES];
[cancelAction setDestructive:YES];

identifier

User notificaton aciton的唯一標示

title

User notificaton aciton button的顯示標題

activationMode

UIUserNotificationActivationModeForeground 激活App並打開到前台展示

UIUserNotificationActivationModeBackground 在後台激活App,測試時發現如果沒有啟動App(App不在後台也沒有打開),那麼執行這種模式下的操作,App不會打開;如果App已經在前台了,那麼執行這種模式下的操作,App依然在前台。

authenticationRequired

如果設置為YES,執行這個操作的時候必須解鎖設備,反之,無需解鎖。

如果activationMode為UIUserNotificationActivationModeForeground時,authenticationRequired被作為YES處理。

測試時發現,如果用戶設備有密碼,在鎖屏時authenticationRequired設置為YES執行操作時需要用戶輸入密碼,如果設置為NO則不需要用戶輸入密碼,如果用戶設備沒有密碼,那麼無論如何設置都不需要輸入密碼。

destructive

標示操作按鈕是否為紅色,只有在鎖屏和從通知中心向左滑動出現時才有這種突出顯示,在頂部消息展示時沒有這種突出效果。


UIMutableUserNotificationCategory的設置:

UIMutableUserNotificationCategory *notificationCategory = [[UIMutableUserNotificationCategory alloc] init];
[notificationCategory setIdentifier:@"NotificationCategoryIdentifier"];
[notificationCategory setActions:@[acceptAction, cancelAction]
                      forContext:UIUserNotificationActionContextDefault];
identifier
category的唯一標示,identifier的值與payload(從服務器推送到客戶端的內容)中category值必須一致。

actions

UIUserNotificationAction 數組,如果設置為nil,那麼將不會顯示操作按鈕。

context

UIUserNotificationActionContextDefault 通知操作的默認Context,在這種情況下,你可以指定4個自定義操作。(還未驗證)

UIUserNotificationActionContextMinimal 通知操作的最小Context,在這種情況下,你可以指定2個自定義操作。(還未驗證)


三、設置 UIUserNotificationSettings

UIUserNotificationType notificationTypes = (UIUserNotificationTypeAlert|
                                            UIUserNotificationTypeSound|
                                            UIUserNotificationTypeBadge);
NSSet *categoriesSet = [NSSet setWithObject:notificationCategory];
UIUserNotificationSettings *notificationSettings = [UIUserNotificationSettings settingsForTypes:notificationTypes
                                                                                     categories:categoriesSet];
設置通知所支持的類型和Category,這裡沒有難點,不過多解釋。

四、注冊通知 registerUserNotificationSettings

[[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];
在iOS8中通過以上方式注冊通知,可以根據操作系統版本做區分處理

五、處理回調事件

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler
{
    if([identifier isEqualToString:@"CancelNotificationActionIdentifier"])
    {
        NSLog(@"You chose cancel action.");
    }
    else if ([identifier isEqualToString:@"AcceptNotificationActionIdentifier"])
    {
        NSLog(@"You chose accept action.");
    }
    
    if(completionHandler)
    {
        completionHandler();
    }
}
application
收到通知的對象

identifier

UIUserNotificationAction的唯一標示

userInfo

payload的內容

completionHandler

當執行完指定的操作後,必須在最後調用這個方法


我測試用的paload是

{
    aps =     {
        alert = "Thank you very much";
        badge = 1;
        category = NotificationCategoryIdentifier;
        sound = "ping.caf";
    };
}


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved