FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

プッシュ通知をお知らせ一覧に利用する(データ保存。個別配信編)

f:id:mbaasdevrel:20200408172252p:plain

プッシュ通知をアプリ内でお知らせ一覧として利用する試みです。それによってデータストアでわざわざお知らせ用のクラスを作成、管理しなくてもよくなるでしょう。

今回はプッシュ通知を個別配信にのみ利用している場合における、データ保存法を紹介します。

個別配信とは

プッシュ通知は大きく分けて3つの配信方法があるといえます。

  • 全体配信
  • 条件配信
  • 個別配信

全体配信とは、登録されているデバイストークン全体に対して配信するものです。条件を指定しない分、シンプルな管理が可能ですが、セグメント化されていない分、役立たない内容の配信も行われてしまうことも多くなります。そのため開封率はそれほど高くないでしょう。

f:id:mbaasdevrel:20200408172220p:plain

条件配信はデバイストークンに条件を指定しておいて、絞り込み条件として使うものです。例えば性別、年齢層、興味のある情報、居住地域などです。配信条件を絞り込む分、より確度の高い配信が可能になります。利用者にとってもマッチした情報が配信される傾向にあるので、開封率も高くなります。

f:id:mbaasdevrel:20200408172245p:plain

個別配信はよりセグメントを細かくした配信方法です。また、チャットアプリなどで個人宛にメッセージが来た際のプッシュ通知としても使われます。mBaaSの管理画面では配信したプッシュ通知ごとに開封率を取っているため、表示は若干煩雑になりがちです。

f:id:mbaasdevrel:20200408172252p:plain

今回はこの中の3つ目、個別配信について考えます。

個別配信の特徴

個別配信の特徴は、配信対象の端末が1台であると言うことです。この場合、絞り込み条件はinstallationsのobjectIdになるでしょう。例えばユーザをプログラム上で特定し、そのユーザと紐付くデバイストークンを取得するといった具合です。例えばチャットアプリや、アプリ内のDMなどをプッシュ通知でお知らせする際に使われます。

会員登録を行っており、その会員情報とデバイストークンが紐付いている場合は、PushクラスのデータをACLで制限するという方法が考えられます。しかし、そういう実装になっていない場合も多いでしょう。

そこで、プッシュ通知のobjectIdをinstallationsに紐付けるのがお勧めです。

データの保存について

今回はJavaScript SDKでの実装例を紹介します。スクリプト機能を使えばサーバレスでも実装可能です。まずNCMBを初期化します。

const NCMB = require('NCMB');
const applicationKey = '70d...934';
const clientKey = '4d0...dff';
const ncmb = new NCMB(applicationKey, clientKey);

次に配信したプッシュ通知を取得します。配信した直後に実行することを想定し、最新の1件をターゲットとします。

const push = await ncmb.Push.order('createDate', true).fetch();

そして配信対象になったデバイストークンを取得します。 push.searchCondition はプッシュ通知を配信する対象を絞り込んだ時の検索条件が入っています。この中にはobjectIdが指定されているはずです。これで対象データを取得できます。

const objectId = push.searchCondition.objectId;
const installation = await ncmb.Installation
  .equalTo('objectId', objectId)
  .fetch();

取得したデバイストークンに対して、プッシュ通知を結びつけていきます。この時、プッシュ通知は今後も増えていくデータになりますのでリレーションを使いたいところなのですが、プッシュ通知のクラスはリレーションが使えないようです。そのため、 pushes というカラムに対してプッシュ通知のobjectIdを追加していく形にしています。

if (!installation.pushes) {
  installation.set('pushes', [push.objectId]);
} else {
  installation.add(push.objectId);
}
await installation.update();

これでデバイストークンと配信したプッシュ通知の紐付けが完了です。

データの取り出し方

次にデータの取り出し方の解説です。各スマートフォンでは自分のデバイストークンは分かっていることとします。そのデバイストークンを使えば自分のinstallationは簡単に取得できます。

const installation = await ncmb.Installation.equalTo('deviceToken', 'eBI...cft').fetch();

この installationのpushesカラムにプッシュ通知のオブジェクトIDが入っていますので、検索をします。配列になるのでinを使います。

const pushes = await ncmb.Push.in('objectId', installation.pushes).fetchAll();

これで受信したプッシュ通知の一覧が得られました。後はこのプッシュ通知一覧を表示してあげればいいだけです。

まとめ

個別配信で行う際には、配信したであろうプッシュ通知とデバイストークンを紐付けて残しておく必要があります。実装としては条件配信と大きく変わりません(取得部分は同じ)ので、条件配信と個別配信を組み合わせている場合も利用可能です。

今回の実装を参考にお知らせ一覧機能を実装してみてください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。