iOS8のInteractive Notifications

Interactive Notificationsとは?

iOS8では今までのNotificationに少し機能が追加されて、
受信したNotificationに対してアプリでアクションを設定できるようになります。
isana.netではOneSpeakというPush通知サービスを運営しており、OneSpeakの機能追加のためにInteractive Notificationsについて調査してみました。

従来はNotificationを受信した場合にはNotificationからアプリケーションを起動してから
ユーザーに何らかのアクションをしてもらう必要がありましたが、
アクションのタイプによってはアプリケーションを起動する必要がなくなり、ユーザービリティの向上に繋がります。

Appleからの発表の画像の例だと、Facebookの「Like」がNotificationからできるようになります。
(投稿の内容をアプリで確認してからでないと「イイね」しづらいよね、というツッコミはあります。)

ボタンのタイトルはアプリから設定することができます。
使用中のアプリを離れること無くNotificationからアクションできるのは便利ですよね。

Interactive Notificationsの実装方法

対応するためには
・Notification受信側のiOSアプリ
・Notification送信側のサーバーサイド
両方に実装が必要です。

ではiOSアプリの実装から見てみます。
必要な実装は以下の通りです。

1.Notificationに表示するアクションを生成する
2.生成したアクションをカテゴリに設定する
3.生成したカテゴリをUIUserNotificationSettingsに設定する
4.設定したUIUserNotificationSettingsをNotificationに登録する

Notificationの内容を「承認」「拒否」するケースを例に実装してみます。

//1.Notificationに表示するアクションを生成する

// 「承認」の選択肢のアクション
UIMutableUserNotificationAction *accept = [[UIMutableUserNotificationAction alloc] init];
accept.identifier = @”ACCEPT”;

//ボタン文字の設定
accept.title = @”承認”;

//選択後のアプリの挙動:Backgroundで選択結果を処理
accept.activationMode = UIUserNotificationActivationModeBackground;

// 選択ボタンの強調表示 デフォルトでNO Notification Centerでボタンが青表示になる
accept.destructive = NO;

// 「拒否」の選択肢のアクション
UIMutableUserNotificationAction *refuse = [[UIMutableUserNotificationAction alloc] init];
refuse.identifier = @”REFUSE”;

refuse.title = @”拒否”;

//選択後のアプリの挙動:アプリがForegroundに遷移して選択結果を処理
refuse.activationMode = UIUserNotificationActivationModeForeground;

// 選択ボタンの強調表示 この場合はNotification Centerでボタンが赤くなる
refuse.destructive = YES;

//2.生成したアクションをカテゴリに設定する
UIMutableUserNotificationCategory *marryme = [[UIMutableUserNotificationCategory alloc] init];

marryme.identifier = @”MARRY_ME”;

[marryme setActions:@[accept, refuse]
forContext:UIUserNotificationActionContextMinimal];

//3.生成したカテゴリをUIUserNotificationSettingsに設定する
UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
NSSet *categories = [NSSet setWithObject:marryme];
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:categories];

//4.設定したUIUserNotificationSettingsをNotificationに登録する
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];


続いてNotification送信側のサーバーサイドの実装です。
Notification送信時にcategoryの指定を行います。
(iOSアプリ側で実装したUIMutableUserNotificationCategoryのidentifierと合わせる)

{
“aps” : {
“alert” : “ぼくと結婚してください!”,
“category” : “MARRY_ME”
}
}


最後にiOSアプリ側でNotificationからアクションを選択された場合の処理の実装です。
iOS8からは以下のdelegate methodが追加されました。
application:handleActionWithIdentifier:forRemoteNotification:completionHandler:

– (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler {

//各アクションに設定したidentifierで判定する
if ([identifier isEqualToString:@”ACCEPT”]) {
// “承認”した時の処理
NSLog(@”承認をえらんだね”);
}
if ([identifier isEqualToString:@”REFUSE”]) {
// 拒否した時の処理
NSLog(@”拒否をえらんだね”);
}

// You must call this block at the end of your method.
completionHandler();

}


以上で必要な実装が完了しました。

このNotificationの場合には「ぼくと結婚して下さい!」のメッセージに「承認」と「拒否」ボタンが表示されます。
「承認」を選択した時はBackgroundで動作するように実装していますのでアプリケーションが起動しなくても承認用の処理が行われます。

弊社のOneSpeakにもInteractive Notificationsを実装する予定です。

%d人のブロガーが「いいね」をつけました。