アプリからプッシュ通知を送信する
次にアプリからプッシュ通知を配信できるようにしてみましょう。
下図の手順で、同じアプリに送信と受信の処理を追加して行きます。
まず、リスト3のonCreateメソッドにリスト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()がプッシュ通知を送るように作成した処理です。
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データなので、キーと値を設定します。キーとして設定できる項目は次の表の通りです。
キー | 説明 |
---|---|
target | androidかiOSか送信対象を指定する。何も指定しなければ両方 |
title | Notificationに表示されるタイトル |
action | カスタムレシーバのフィルタ設定 |
dialogFlag | ダイアログプッシュ通知するか否かの真偽値 |
setUserSettingValueメソッドはプッシュ通知にユーザー設定値を追加します(4)。
setMessageメソッドはプッシュ通知で表示するメッセージを設定します(5)。
setImmediateDeliveryFlagメソッドは真偽値でプッシュ通知の即時配信フラグを設定します(6)。trueにすると即時に配信されます。
sendInBackgroundメソッドでプッシュ通知を非同期に送信します(7)。
下図はこの設定で作成したプッシュ通知をNCMB管理画面で表示したところです。
通知に表示されたタイトルをタップすると、ReceiveActivityが起動します。
プッシュ通知が開封されたかどうかを知ることもできます。プッシュ通知を受信した際に、プッシュ通知が開封されたことをサーバに通知することができます。
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メソッドを追加します。
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メソッドを実行します。
@Override protected void onResume(){ super.onResume(); NCMBPush.richPushHandler(this, getIntent(), true); }
指定したURLがwebViewで表示されます。