LoginSignup
11
11

More than 5 years have passed since last update.

リテンション風なプッシュ通知配信ができるUnityアプリを作ってみた(Android)

Posted at

前段

プッシュ通知を配信する中で、よく使われる方法が「しばらく起動していないユーザー」に対してプッシュ通知を送る「リンテンション」的な使われ方。
今回はニフティクラウド mobile backendのプッシュ通知機能を使って上記のリテンション風なプッシュ通知を実装してみた。

ニフティクラウド mobile backendにおける配信端末の管理からみるリテンションプッシュ通知実装法

ニフティクラウド mobile backendでは配信端末をデータストアのinstallationクラスで管理しています。

スクリーンショット 2016-02-27 17.19.04.png

このinstallationの各フィールド(カラム)の値を使って絞り込みも行えるようになります。

スクリーンショット 2016-02-27 17.23.29.png

installationに「login」というフィールド作りそこにタイムスタンプを入れれば、「○○日以降起動していない人」だけにプッシュ通知を配信できるようになります。

リテンションプッシュ通知実装までの流れ

リテンションプッシュ通知実装までには下記の作業が必要になります。

  1. 通常のプッシュ通知を配信できるようにする
  2. NCMBManager.csのコードを少し変更する
  3. ダッシュボードから絞り込みプッシュ通知を配信する

上記の内容を1から順に説明していきます

通常のプッシュ通知を配信できるようにする

いきなりで申し訳ないですがこちらは、以前のブログに記載しているのでそちらをご参照ください。
UnityアプリにAndroidのプッシュ通知を組み込んでみる、開封通知も加えてみる

NCMBManager.csのコードを少し変更する

上記のブログの中で設定したNCMBManager.csを変更して,
「login」フィールドを加えて、タイムスタンプを入れるようにします。

NCMBManager.csはAssets>Pluginにあります。

その235行目〜269行目に実装しているメソッドTokenReceivedの「//端末情報をデータストアに登録」(253行目)と描かれている行の下の行に
System.DateTime now = System.DateTime.UtcNow;
installation["login"] = now;
と実装します。

NCMBManager.cs
//ネイティブでデバイストークン取得後に呼び出されます
internal void onTokenReceived (string token)
{
    _token = token; //onAnalyticsReceivedで使用。

    string path = SearchPath ();    //currentInstallationのパスを設定

    //currentInstallationがあれば読み込み、更新の必要性を判定します
    string jsonText = "";
    NCMBInstallation installation = null;
    if ((jsonText = ReadFile (path)) != "") {   //currentInstallationあり
        installation = new NCMBInstallation (jsonText);
    } else {
        installation = new NCMBInstallation ();
    }

        nstallation.DeviceToken = _token;

        //端末情報をデータストアに登録
        //この下2行を記載します////////
        System.DateTime now = System.DateTime.UtcNow;
        installation["login"] = now;
        ////////////////////////////////
        installation.SaveAsync ((NCMBException saveError) => {      //更新実行
        if (saveError != null) {
            //対処可能なエラー
            if (saveError.ErrorMessage.Equals ("Duplication Error")) {
                //過去に登録したデバイストークンと衝突。アプリの再インストール後などに発生
                updateExistedInstallation (installation, path);
            } else {                    
                //想定外のエラー
                OnRegistration (saveError.ErrorMessage);
            }
        } else {
            OnRegistration ("");
        }
    });
}

あとはプロジェクトをビルドします。

ダッシュボードから絞り込みプッシュ通知を配信する

ビルド後、アプリを起動してinstallationクラスを確認してください。deviceTokenフィールドにトークンがloginフィールドにタイムスタンプが入っているのをそれぞれご確認ください
スクリーンショット 2016-02-27 14.31.29.png

またもう一回、アプリを落として再度、アプリを起動してloginフィールドが更新されていることをご確認ください

スクリーンショット 2016-02-27 18.44.55.png

ダッシュボードから絞り込みのプッシュ通知を配信します。
配信に関しては
ダッシュボードからプッシュ通知を配信する
をお読みください。

ダッシュボードから絞り込み配信は下記ドキュメントをお読みください
ダッシュボードでの絞り込み

今回、16:00を境に「大きい」、「小さい」で絞り込んだところ下記のようになりました

「16:00より大きいで絞り込んだ時」、1端末だけ配信する端末があると表示されています。

スクリーンショット 2016-02-27 16.31.12.png

「16:00より小さいで絞り込んだ時」、1端末も配信する端末がないと表示されています。

スクリーンショット 2016-02-27 16.30.57.png

どうやら正確に絞り込めているようです。
実際に配信したら、大きい場合はちゃんとどきました。

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11