プッシュ通知を配信する(メンバープラグイン)
ここでは、SDKからプッシュ通知を配信する方法について解説します。
はじめに
本SDKでプッシュ通知配信を行うには、あらかじめApple Push Notification Service(APNs)との連携設定を行ってください。
ここでは、連携設定が完了していることを前提に解説します。
配信端末登録(端末インスタレーション)
プッシュ通知を配信するには、配信端末をメンバー(ECHOMemberObject)に紐付けて登録する必要があります。
以下、SDKを使用したiOS端末の登録方法について解説します。
deviceTokenの発行要求
個々の配信端末は、APNs(Apple Push Notification Service)から発行されるdeviceTokenによって一意に識別されます。
このdeviceTokenをメンバーに紐付けてECHOPFに登録することで、ECHOPFから各メンバーのiOS端末に対してプッシュ通知を配信できるようになります。
deviceTokenをAPNsに要求するには、AppDelegate.mのapplication:didFinishLaunchingWithOptionsに以下のように記述します。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UIRemoteNotificationType types = UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert;
if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1) { // iOS8以上の場合
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
[application registerUserNotificationSettings:settings]
// deviceTokenの発行要求
[application registerForRemoteNotifications];
} else { // iOS8未満の場合
// deviceTokenの発行要求[application registerForRemoteNotificationTypes:types];
}
}
deviceTokenの登録
deviceTokenが正常に発行されると、AppDelegate.mのapplication:didRegisterForRemoteNotificationWithDeviceTokenが呼び出されます。
ここで発行されたdeviceTokenをECHOPFに登録します。
- (BOOL)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
// -----------------------------------------------
// 例:取得したdeviceTokenを既存メンバーに紐付ける
// 既存メンバーの取得
ECHOMemberObject *member = [[ECHOMemberObject alloc] initWithInstanceId:@"メンバーインスタンスID" refid:@"メンバーID"];
// 端末インスタレーションオブジェクトの生成し、deviceTokenをセット
ECHOInstallation *installation = [[ECHOInstallation alloc] init];
[installation setDeviceTokenInNSData:deviceToken];
// メンバーに紐付け
[member setObject:installation forKey:@"installation"];
// サーバーへ保存
[member push:nil];}
プッシュ通知オブジェクトECHOPushNotificationObject
ECHOPushNotificationObjectは、プッシュ通知を配信・操作するためのオブジェクトです。
オブジェクトを生成する
新しいプッシュ通知としてオブジェクトを初期化するには、初期化メソッドの第一引数にメンバーインスタンスのIDを指定します。
ECHOPushNotificationObject *push_notification = [[ECHOPushNotificationObject alloc] initWithInstanceId:@"メンバーインスタンスID"];
既存プッシュ通知としてオブジェクトを初期化するには、初期化メソッドの第二引数にプッシュ通知IDを指定します。
ECHOPushNotificationObject *push_notification = [[ECHOPushNotificationObject alloc] initWithInstanceId:@"メンバーインスタンスID" refid:@"プッシュ通知ID"];
オブジェクトフィールド
プッシュ通知オブジェクトは、以下のフィールドを持ちます。
フィールド名 | 型 | 説明 | 可変 |
---|---|---|---|
refid | NSString | プッシュ通知ID | × |
title | NSString | プッシュ通知タイトル | ◯ |
text | NSString | プッシュ通知本文 | ◯ |
distributed | NSDate | 配信予約日時 | ◯ |
target | NSObject | 配信ターゲット(配信先の指定には、ターゲット指定アクセサをご利用ください) | ◯ |
status | NSNumber | 配信ステータス
|
◯ |
フィールドからデータを取得する
オブジェクトのフィールドからデータを取得するには、objectForKeyメソッドを使用します。
id title = [push_notification objectForKey:@"title"];
フィールドにデータをセットする
オブジェクトのフィールドにデータをセットするには、setObject:forKey:メソッドを使用します。
[push_notification setObject:@"test push_notification" forKey:@"title"];
[push_notification setObject:@"push_notification text" forKey:@"text"];
配信ターゲットを指定する(ターゲット指定アクセサ)
プッシュ通知の配信先(ターゲット)を指定するには、以下のターゲット指定アクセサを使用します。
// 配信ターゲットをリセット
[push_notification resetTarget];
// 全てのメンバーを配信ターゲットに指定
[push_notification targetAllMembers];
// ルートグループを配信ターゲットに指定(グループに所属する全てのメンバーが配信対象になります)
[push_notification targetRootGroup];
// 特定のメンバーを配信ターゲットに追加
ECHOMemberObject member = [[ECHOMemberObject alloc] initWithInstanceId:push_notification.instanceId refid:@"メンバーID"]; // ターゲットに追加するメンバーオブジェクトを生成
[push_notification targetSpecificMember:member];
// 特定のグループを配信ターゲットに追加
ECHOMembersGroupObject group = [[ECHOMembersGroupObject alloc] initWithInstanceId:push_notification.instanceId refid:@"グループID"]; // ターゲットに追加するグループオブジェクトを生成
[push_notification targetSpecificGroup:group];
プッシュ通知を配信/下書き保存する
プッシュ通知を配信または下書き保存するには、push:メソッド(同期通信による保存)もしくはpushInBackgroundWithBlock:メソッド(非同期通信による保存)を使用します。
ECHOPushNotificationObject *push_notification = [[ECHOPushNotificationObject alloc] initWithInstanceId:@"メンバーインスタンスID"];
[push_notification setObject:@"test push_notification" forKey:@"title"]; // プッシュ通知タイトルをセット
[push_notification setObject:@"push_notification text" forKey:@"text"]; // プッシュ通知本文をセット
....
// 非同期でプッシュ通知をプッシュ
[push_notification pushInBackgroundWithBlock:^(NSError *e) {
if(e == null) { // 正常終了
NSLog(@"Complete: %@", push_notification);
}else{ // 異常発生
NSLog(@"Error: %@", e);
}
}];
プッシュ通知を取得する
リモートサーバー上に存在するプッシュ通知を取得するには、fetch:メソッド(同期通信による取得)もしくはfetchInBackgroundWithBlock:メソッド(非同期通信による保存)を使用します。
ECHOPushNotificationObject *push_notification = [[ECHOPushNotificationObject alloc] initWithInstanceId:@"メンバーインスタンスID" refid:@"プッシュ通知ID"];
// 非同期でプッシュ通知を取得
[push_notification fetchInBackgroundWithBlock:^(NSError *e) {
if(e == null) { // 正常終了
NSLog(@"Complete: %@", push_notification);
}else{ // 異常発生
NSLog(@"Error: %@", e);
}
}];
プッシュ通知を削除する
リモートサーバー上に存在するプッシュ通知を削除するには、delete:メソッド(同期通信による削除)もしくはdeleteInBackgroundWithBlock:メソッド(非同期通信による削除)を使用します。
ECHOPushNotificationObject *push_notification = [[ECHOPushNotificationObject alloc] initWithInstanceId:@"メンバーインスタンスID" refid:@"プッシュ通知ID"];
// 非同期でプッシュ通知を削除
[push_notification deleteInBackgroundWithBlock:^(NSError *e) {
if(e == null) { // 正常終了
NSLog(@"Complete");
}else{ // 異常発生
NSLog(@"Error: %@", e);
}
}];
現在のACLを取得する
オブジェクトに現在設定されているACLを取得するには、currentACLプロパティを使用します。
ECHOACLObject *current_acl = push_notification.currentACL;
ACLを変更する
オブジェクトに新しいACLを設定するには、setNewACL:メソッドを使用します。
ECHOACLObject *new_acl = [[ECHOACLObject alloc] init]; // ACLオブジェクトを生成
[new_acl putEntryForAll: [[ECHOACLEntry alloc] initWithGet:NO list:NO edit:NO delete:NO] ]; // 例:非ログイン訪問者の操作権限を全て奪う
[push_notification setNewACL:new_acl]; // 新しいACLをセット
[push_notification push:nil]; // セットしたACLを反映させるには、最後に必ず保存を実行してください