ここでは、SDKからプッシュ通知を配信する方法について解説します。

はじめに

本SDKでプッシュ通知配信を行うには、あらかじめApple Push Notification Service(APNs)との連携設定を行ってください。

ここでは、連携設定が完了していることを前提に解説します。

配信端末登録(端末インスタレーション)

プッシュ通知を配信するには、配信端末をメンバー(ECHOMemberObject)に紐付けて登録する必要があります。
以下、SDKを使用したiOS端末の登録方法について解説します。

deviceTokenの発行要求

個々の配信端末は、APNs(Apple Push Notification Service)から発行されるdeviceTokenによって一意に識別されます。
このdeviceTokenをメンバーに紐付けてECHOに登録することで、ECHOから各メンバーの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をECHOに登録します。

- (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 配信ステータス
  • 1: 配信予約(デフォルト)
  • -1: 下書き保存


フィールドからデータを取得する

オブジェクトのフィールドからデータを取得するには、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を反映させるには、最後に必ず保存を実行してください