SHOEISHA iD

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

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

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

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

アプリからプッシュ通知を送信する

 次にアプリからプッシュ通知を配信できるようにしてみましょう。

 下図の手順で、同じアプリに送信と受信の処理を追加して行きます。

アプリによるプッシュ通知の送受信
アプリによるプッシュ通知の送受信

 まず、リスト3のonCreateメソッドにリスト5を追記します。

リスト5
NCMBPush.subscribe(this, "ch1", ReceiveActivity.class);(1)

Button btnPush = (Button) findViewById(R.id.BtnPush);
btnPush.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        try {
            sendPush();(2)
        } catch (JSONException e) {
            e.printStackTrace();
            Toast.makeText(getApplication(),"Push登録に失敗", Toast.LENGTH_SHORT).show();
        }
    }
});

 これは受信時の設定ですが、NCMBPushクラスのsubscribeメソッドで、プッシュ通知を受信したときに起動するアクティビティをチャンネルごとに指定することができます。ここではch1だったら、ReceiveActivityを起動するように指定しています(1)

 sendPush()がプッシュ通知を送るように作成した処理です。

リスト6
private void sendPush() throws JSONException {
    NCMBPush push = new NCMBPush();(1)
    push.setChannel("ch1");(2)                 
    JSONObject data = new JSONObject("{\"title\": \"test title\", \"target\": [android]}");
    push.setData(data);(3)
    
    JSONObject user = new JSONObject("{\"URL\": \"http://www.google.co.jp/\"}");
    push.setUserSettingValue(user);(4)
    
    push.setMessage("send push!");(5)
    push.setImmediateDeliveryFlag(true);(6)
    push.sendInBackground(new SendCallback() {(7)
        @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();
            }
        }
    });
}

 sendPush()の処理を順にみていきます。

 プッシュ通知はNCMBPushクラスを使って送信します(1)

 setChannelメソッドでチャネルを設定できます(2)

 setDataメソッドで送信するメッセージのデータを設定します(3)。JSONデータなので、キーと値を設定します。キーとして設定できる項目は次の表の通りです。

プッシュ通知のsetDataメソッドに指定するキー
キー 説明
target androidかiOSか送信対象を指定する。何も指定しなければ両方
title Notificationに表示されるタイトル
action カスタムレシーバのフィルタ設定
dialogFlag ダイアログプッシュ通知するか否かの真偽値

 setUserSettingValueメソッドはプッシュ通知にユーザー設定値を追加します(4)

 setMessageメソッドはプッシュ通知で表示するメッセージを設定します(5)

 setImmediateDeliveryFlagメソッドは真偽値でプッシュ通知の即時配信フラグを設定します(6)。trueにすると即時に配信されます。

 sendInBackgroundメソッドでプッシュ通知を非同期に送信します(7)

 下図はこの設定で作成したプッシュ通知をNCMB管理画面で表示したところです。

この設定で作成したプッシュ通知をNCMB管理画面で表示した
この設定で作成したプッシュ通知をNCMB管理画面で表示した

 通知に表示されたタイトルをタップすると、ReceiveActivityが起動します。

通知にタイトルが表示された
通知にタイトルが表示された
ReceiveActivityが起動した
ReceiveActivityが起動した

 プッシュ通知が開封されたかどうかを知ることもできます。プッシュ通知を受信した際に、プッシュ通知が開封されたことをサーバに通知することができます。

リスト7
public class ReceiveActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_receive);
        NCMBAnalytics.trackAppOpened(getIntent());(1)

    }

 そのためには、起動されるActivityのonCreateメソッドでNCMBAnalyticsクラスのtrackAppOpenedメソッドを実行します(1)。trackAppOpenedメソッドはプッシュ通知の開封登録処理をするように設定します。

 右端の統計ボタンをクリックすると、開封状況をみることができます。

右端の統計ボタンをクリックする
右端の統計ボタンをクリックする

 今、送ったプッシュ通知とアプリ全体の開封率がわかります。

開封率が表示されています
開封率が表示されています

 次に、リッチプッシュ通知を配信してみましょう。リッチプッシュ通知とは、プッシュ通知配信時に指定したWebページを受信時に開くものです。リスト6のsendPush()にsetRichUrlメソッドを追加します。

リスト8
private void sendPush() throws JSONException {
    NCMBPush push = new NCMBPush();
    push.setChannel("ch1");
    JSONObject data = new JSONObject("{\"title\": \"test title\", \"target\": [android]}");
    push.setData(data);     
    JSONObject user = new JSONObject("{\"URL\": \"http://www.google.co.jp/\"}");
    push.setUserSettingValue(user);
    push.setMessage("send push!");
    push.setRichUrl("http://wpa.exe.jp/~kanehiro/");(1)
    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();
            }
        }
    });
}

 リッチプッシュ通知を送るにはsetRichUrlメソッドで開きたいURLを指定します(1)

 リッチプッシュ通知を表示するためには、リッチプッシュ通知で起動するActivityのonResume()で、richPushHandlerメソッドを実行します。

リスト9 ReceiveActivityのonResumeメソッド
@Override
protected void onResume(){
    super.onResume();
    NCMBPush.richPushHandler(this, getIntent(), true);
}

 指定したURLがwebViewで表示されます。

Webページが表示された
Webページが表示された

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
MBaaSと連携するAndroidアプリを作る連載記事一覧

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8237 2014/11/14 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング