SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

MBaaSと連携するAndroidアプリを作る

MBaaSでつくろう、Androidアプリのプッシュ通知! しくみと手順を大解剖

MBaaSと連携するAndroidアプリを作る 第6回

カスタムレシーバを作成して、プッシュ通知を受信する

 最後にカスタムレシーバを作成して、プッシュ通知を受信してみます。カスタムレシーバを作成しておくと、プッシュ通知を受信した時点で自由にプッシュ通知の情報を扱うことができます。

 まず、AndroidManifest.xmlにカスタムレシーバの定義を追記します。

リスト10 AndroidManifest.xmlに追記
<receiver
    android:name="com.example.pushsamp.MyCustomReceiver" >
    <intent-filter>
        <action android:name="com.example.RECEIVE_PUSH" />
    </intent-filter>
</receiver>

 そして、リスト8のsendPush()を再度、修正します(リスト11)

リスト11
private void sendPush() throws JSONException {
    NCMBPush push = new NCMBPush();
    push.setChannel("ch1");
    JSONObject data = new JSONObject("{\"action\": \"com.example.RECEIVE_PUSH\", \"title\": \"test title\", \"target\": [android]}");(1)
    push.setData(data);             
    JSONObject user = new JSONObject("{\"URL\": \"http://www.google.co.jp/\"}");
    push.setUserSettingValue(user);
    push.setMessage("send push!");
    push.setImmediateDeliveryFlag(true);
    push.sendInBackground(new SendCallback() {
        @Override
        public void done(NCMBException e) {
            if (e != null) {
                e.printStackTrace();
                Toast.makeText(getApplication(),"Push登録に失敗", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(getApplication(),"Push登録に成功", Toast.LENGTH_SHORT).show();
            }
        }
    });
}

 \"action\": \"com.example.RECEIVE_PUSH\"をJSONデータdataに追加して、カスタムレシーバのインテントフィルタに掛かるようにします(1)

 それから、BroadcastReceiverを継承するカスタムレシーバMyCustomReceiverクラスを作成します。

リスト12 MyCustomReceiver.java
public class MyCustomReceiver extends BroadcastReceiver {
    private static final String TAG = MyCustomReceiver.class.getSimpleName();

    @Override
    public void onReceive(Context context, Intent intent) {

        try {
            String channel = intent.getExtras().getString("com.nifty.Channel");(1)
            JSONObject json = null;
            try {
                json = new JSONObject(intent.getExtras().getString("com.nifty.Data"));(2)
            } catch (Exception e) {
                e.printStackTrace();
            }

            StringBuilder sb =new StringBuilder();
            sb.append("channel:"+channel+"\n");

            if(null != json){
                Iterator<?> itr = json.keys();
                while (itr.hasNext()) {
                    String key = (String) itr.next();
                    sb.append("json key:"+key+", json_data:"+json.get(key)+"\n");
                }
            }
            Log.d(TAG, sb.toString());
        } catch (JSONException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 MyCustomReceiverでは、intent.getExtras()でインテントからチャンネル(1)とJSON形式のDataを取り出し(2)、StringBuilderを使って文字列化しています。

 他にも、次の表のようなパラメータ名でペイロードを取得することができます。

ペイロードの内容
パラメータ名 説明 データ型
com.nifty.PushId プッシュ通知ID 文字列
com.nifty.Data ユーザー設定値 オブジェクト
com.nifty.Title タイトル 文字列
com.nifty.Message メッセージ 文字列
com.nifty.Channel チャネル 文字列
com.nifty.Dialog ダイアログ 1(固定)
com.nifty.RichUrl リッチプッシュ通知用URL 文字列

 JSONデータからはIterator(イテレータ)を使って、キーと値を取得しています。ログ出力を見ると、チャンネルとユーザー設定のデータが取得できていることがわかります。

LogCatに出力された
LogCatに出力された

 カスタムレシーバを作成すれば、受信した値に柔軟に対応する処理を記述できます。

最後に

 このようにNCMBを使うと、簡単にプッシュ通知をアプリに実装できます。

 プッシュ通知の機能を本連載で作成したタスクタイマアプリに組み込むとすると、管理者がグループのメンバーにタスクの進捗状況を尋ねるような使い方が考えられるでしょう。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
MBaaSと連携するAndroidアプリを作る連載記事一覧

もっと読む

この記事の著者

金宏 和實(カネヒロ カズミ)

 富山県高岡市出身で在住。ソフトウェア開発者兼ライター。株式会社イーザー関西学院大学文学部仏文科卒。第一種情報処理技術者(今で言うと、応用情報技術者。第一種→ソフ開→応用と変遷したようだ)主な著書『作ればわかる!Androidプログラミング第2版 -SDK4対応-』『VS 2010で作る Web-DB アプリ入門』『ベテランが丁寧に教えてくれるデータベースの知識と実務』『はじめてのAndroidアプリ作成 センサー活用とクラウド連携』『はじめてのAndroidアプリ作成 基本プログラミング』Web連載『VB2008で楽々Webプログラミング』『再発見!VB2005快適プログラミング』 『こうしろうのMindStroms日記』 個人的なブログはこちらです。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/8237 2014/11/14 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー