2015年8月28日金曜日

NCMB で Android に対してダイアログプッシュしてみた

概要

NCMB で Android 端末に対してダイアログプッシュというのができるみたいなのでやってみました
普通のプッシュは Android の上部通知バーが表示されるのに対してダイアログプッシュはその名の通りプッシュ受信時にダイアログを表示することができます

環境

  • Android 4.0.4 (実機 : SH-01D)
  • Eclipse 4.4.2
  • NCMB.jar 1.5.3

事前準備

今回はこのサンプルを使って説明します
事前に必要になる作業

  • NCMB の登録
  • Google Developer Console で SenderId と APIキーの取得
  • サンプルが動作する環境の作成

は実施しておいてください
サンプルが動作してとりあえず実機の Android でプッシュが受信できるところまでできればOKです
では、コーディングしていきます

コーディング

表示するダイアログの定義をする

AndroidManifext.xml に以下を追記します

<activity
  android:name="com.nifty.cloud.mb.NCMBDialogActivity"
  android:excludeFromRecents="true"
  android:launchMode="singleInstance"
  android:noHistory="true"
  android:theme="@android:style/Theme.Wallpaper.NoTitleBar">
</activity>

これは NCMB.jar に含まれている、Activityを指定しているだけです
<application>タグ内に記載すればOKです

カスタムレシーバを作成する

com.example.android_ncmb_sample.utils.DialogPushReceiver を作成します
android.content.BroadcastReceiver を継承してください

create_receiver.png

作成したら以下のように変更します

package com.example.android_ncmb_sample.utils;

import com.nifty.cloud.mb.NCMBDialogPushConfiguration;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class DialogPushReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getExtras().getString("com.nifty.Dialog").equals("1")) {
            NCMBDialogPushConfiguration dialogPushConfiguration = new NCMBDialogPushConfiguration();
            dialogPushConfiguration.setDisplayType(NCMBDialogPushConfiguration.DIALOG_DISPLAY_DIALOG);
            NCMBPush.dialogPushHandler(context, intent, dialogPushConfiguration);
        }
    }

}

基本は onReceive を変更すればOKです
ダイアログフラグがONのときにだけダイアログプッシュを表示するようにします

カスタムレシーバの定義を追記する

AndroidManifext.xml に以下を追記します

<receiver android:name="com.example.android_ncmb_sample.utils.DialogPushReceiver" >
  <intent-filter>
    <action android:name="com.example.android_ncmb_sample.utils.DIALOG" />
  </intent-filter>
</receiver>

<receiver>タグ内に存在しているandroid:nameには作成したダイアログプッシュ用のレシーバを定義します
<action>タグ内に存在しているandroid:nameには「好きな文字列を指定してください」
ここは何でもOKです
プッシュを送信する際にactionというパラメータを指定するのですが、そのパラメータと<action>タグで指定した文字列にマッチする reciever が自動でコールされる仕組みになっています

サンプルではクラス名っぽいものを指定していますが、何でもOKです

動作確認

ここまでできたら動作確認してみます
まず実機をつないで Eclipse 上でアプリを起動しましょう

lunch_app.png

ここは普通に起動すると思います
起動が完了できて Logcat にもログができることを確認したらアプリをバックグラウンドにしてプッシュを送信してみましょう

プッシュを送信する

プッシュの送信は NCMB のコンパネから送信します
ポイントは1つ
プッシュを登録する画面で「Android 端末に送信する」のチェックをONにします
このときに「アクション」と「ダイアログ」を以下のようにします

  • アクション・・・com.example.android_ncmb_sample.utils.DIALOG
  • ダイアログ・・・チェックをON

を必ず設定してください
ちょっと前に説明しましたが、ここで指定したアクションと AndroidManifest.xml の<action>タグ内に記載した文字列がマッチして初めてカスタムレシーバがコールされます

プッシュを受信する

これでプッシュを登録し受信すると以下のように表示されると思います

dialog_result.png

うまく表示されない場合は

  • カスタムレシーバがそもそもコールされていない
  • コールされているけど、Dialog が有効になっていない

あたりを疑ってください
トラブルシュートは実機を接続しながら Logcat とにらめっこすれば、基本は解決できると思います

最後に

割りと簡単にできました
が、たぶんいろいろと事前に触っていて仕組みの流れを理解していたからだと思います
初見だと公式ドキュメントだけだと難しいかもしれないです

0 件のコメント:

コメントを投稿