mBaaSお役立ちブログ

プッシュ通知に承認フローを設けよう【概要編】

プッシュ通知はアプリがインストールされているデバイスに対してダイレクトにアクセスできる便利な機能ですが、ユーザとの接触方法を誤るとアプリをアンインストールされたり、プッシュ通知をオフにされて二度とコンタクトできなくなる可能性もあります。

特に間違って送信してしまったとなると、送信ミスに続いてその謝罪までプッシュ通知で送ることになり、アプリに対する信頼を大きく損ねることになりかねません。そこで求められるのがプッシュ通知の権限管理です。

元々メールマーケティングでは行われていましたが、次のようなフローです。

  1. 担当者がプッシュ通知を作成
  2. テスト用のデバイスに配信
  3. 管理者が確認、承認
  4. プッシュ通知が送信される

今回はこのフローをニフティクラウド 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つの方法が考えられます。

  1. 担当者の端末へ配信
  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() {
    // ダミークラスの更新完了
  })

後はデータをプッシュ通知へ登録し、実際に配信されるのを待つだけです。プッシュ通知を適切に管理するのはアプリ運営において重要な存在になりますので、自社フローに合わせて専用ツールを作ってみてください。

バックナンバー