今回エンジニアブログを担当する戸田です。
今回はiOS8で新規追加された、Push通知に選択肢を追加することが出来る「アクション付きPush通知」を紹介したいと思います。
アクション付きのPush通知を実装した場合、以下のように表示されます。また、ユーザーによっては通知設定により通知スタイルが変わりますので気を付けて下さい。
早速ですが、アクション付きPush通知の実装についての説明をしていきます。
通知アクションの設定
通知アクションは、Push通知を左スワイプ、または「オプション」をタップすると表示されます。通知アクション毎に別々処理を行うことが出来ます。また、通知アクションを表示出来るボタン数は通知センターで2つ、通知スタイルがダイアログで4つまで設定することが出来ます。
// アクション1を作成 UIMutableUserNotificationAction *action1 = [[UIMutableUserNotificationAction alloc] init]; action1.identifier = @"action1"; action1.title = @"action1"; action1.activationMode = UIUserNotificationActivationModeForeground; action1.destructive = NO; action1.authenticationRequired = NO;
UIMutableUserNotificationActionの各プロパティは、以下の通りです。
- identifier
アプリ内での一意になる識別子 - title
選択肢の表示される文字列 - activationMode
選択肢を選んだ時の動作モード
- destructive
選択肢の表示される文字列の強調表示
- authenticationRequired
選択肢を洗濯時に認証の有無
通知カテゴリの設定
通知カテゴリは、通知スタイル毎に通知アクションを設定が出来ます。
// 通知カテゴリの作成 UIMutableUserNotificationCategory *notificationCategory = [[UIMutableUserNotificationCategory alloc] init]; notificationCategory.identifier = @"sample_category"; // 通知スタイルがダイアログ時の選択肢表示を設定 [notificationCategory setActions:@[action1, action2] forContext:UIUserNotificationActionContextDefault]; // 通知スタイルがバナー時の選択肢表示を設定 [notificationCategory setActions:@[action1, action2] forContext:UIUserNotificationActionContextMinimal];
Push通知の登録
通知タイプと通知カテゴリを設定します。
UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert; UIUserNotificationSettings *notificationSettings = [UIUserNotificationSettings settingsForTypes:types categories:[NSSet setWithObject:newVersionCategory]]; [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];
通知タイプと通知カテゴリを設定後に「application:didRegisterUserNotificationSettings:」が呼ばれるので、Push通知の登録をします。
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { [application registerForRemoteNotifications]; }
サーバから送信するJSON
Push通知を送る際のJSON形式は、以下の通りです。
{ "aps": { "alert": "Sample Push Notification", "category": "sample_category" } }
アクション付きPush通知を使用する場合は、JSONに「category」を追加て、通知カテゴリで設定した「identifier」と同じ値を設定します。
※今回はサーバ周りの実装等は割愛させて頂きます。
通知アクション選時の処理
通知アクションが選択されたら「application:handleActionWithIdentifier:forRemoteNotification:completionHandler:」が呼ばれ、「identifier」にて、通知アクションを判別して処理をします。
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler { if ([identifier isEqualToString:@"action1"]) { // 通知アクション「action1」をタップした時の処理 } if ([identifier isEqualToString:@"action2"]) { // 通知アクション「action2」をタップした時の処理 } completionHandler(); }
最後に
アクション付きPush通知を使用する場合は、選択肢を表示する操作が分かりにくいため、アプリ内で使い方を説明した方が良いかもしれません。