プッシュ通知はアプリがインストールされているデバイスに対してダイレクトにアクセスできる便利な機能ですが、ユーザとの接触方法を誤るとアプリをアンインストールされたり、プッシュ通知をオフにされて二度とコンタクトできなくなる可能性もあります。
特に間違って送信してしまったとなると、送信ミスに続いてその謝罪までプッシュ通知で送ることになり、アプリに対する信頼を大きく損ねることになりかねません。そこで求められるのがプッシュ通知の権限管理です。
元々メールマーケティングでは行われていましたが、次のようなフローです。
- 担当者がプッシュ通知を作成
- テスト用のデバイスに配信
- 管理者が確認、承認
- プッシュ通知が送信される
今回はこのフローをニフティクラウド mobile backendで行う方法を紹介します。
ダミーのプッシュ通知クラスを用意する
プッシュ通知自体は登録されると即座に配信対象になります。そのためプッシュ通知のクラスへデータを登録してはいけません。そのダミークラス(dPushなど)を用意します。
そして、担当者はダミークラスに対してプッシュ通知を登録します。登録するデータは次のようになります。
パラメータ名 | 説明 | データ型 | 必須 |
---|---|---|---|
deliveryTime | 配信時刻 | 日付 | △ |
immediateDeliveryFlag | 即時配信 | 真偽値 | △ |
target | ターゲット | 配列 | |
searchCondition | 検索条件 | オブジェクト | |
message | メッセージ | 文字列 | |
userSettingValue | ユーザー設定値 | オブジェクト | |
deliveryExpirationDate | 配信期限日 | 日付 | |
deliveryExpirationTime | 配信期限時間 | 文字列 | |
action | アクション | 文字列 | |
title | タイトル | 文字列 | |
dialog | ダイアログ通知有効化フラグ | 真偽値 | |
badgeIncrementFlag | バッジ数増加フラグ | 真偽値 | |
badgeSetting | バッジ数 | 数値 | |
sound | 音楽ファイル | 文字列 | |
contentAvailable | content-available | 真偽値 | |
richUrl | リッチプッシュURL | 文字列 | |
category | カテゴリ | 文字列 | |
permitTime | 承認済みフラグ | 日付 | |
acl | ACL | オブジェクト |
プッシュ通知クラスと同じ形にすることでダミークラスからプッシュ通知クラスへのコピーを簡単にできます。また、permitTimeとして承認した日付を用います。
ダミークラスからプッシュ通知クラスへのコピー
後は上司の承認イベントのタイミングでダミークラスからプッシュ通知クラスへデータをコピーします。これはobjectId、createDate、updateDateを除いたデータをそのままコピーするだけです。
dPush.fetch(objectId) .then(function(dpush) { var push = new ncmb.Push; for (var i in dpush) { var key = dpush[i]; // 除外するカラム if (['objectId', 'createDate', 'updateDate'].indexOf(key) > 0) { continue; } push.set(key, dpush[k]); } return push.save() }) .then(function(obj) { // プッシュ通知登録完了 return dpush.set('permitTime', new Date) .update(); }) .then(function() { // ダミークラスの更新完了 })
テスト配信
プッシュ通知をテスト配信するというのも大切です。ここでは2つの方法が考えられます。
- 担当者の端末へ配信
- あらかじめ決まった端末へ配信
簡単なのは前者の担当者の端末ですが、iOS/Android端末が必要になります。あらかじめ決まった端末であれば対象になるInstallationクラスのobjectIdも決まっているので運用がシンプルです。今回はobjectIdを決め打ちで行うこととします。
例えば以下のようなコードになります。iOS_objectIdが特定のデバイストークンを入れたInstallationクラスのobjectIdになります。
dPush.fetch(objectId) .then(function(dpush) { var push = new ncmb.Push; for (var i in dpush) { var key = dpush[i]; // 除外するカラム if (['objectId', 'createDate', 'updateDate', 'searchCondition'].indexOf(key) > 0) { continue; } push.set('searchCondition', {objectId: iOS_objectId}) push.set(key, dpush[k]); } return push.save() }) .then(function(obj) { // プッシュ通知登録完了 return dpush.set('permitTime', new Date) .update(); }) .then(function() { // ダミークラスの更新完了 })
後はデータをプッシュ通知へ登録し、実際に配信されるのを待つだけです。プッシュ通知を適切に管理するのはアプリ運営において重要な存在になりますので、自社フローに合わせて専用ツールを作ってみてください。