2016/10/20作成
- ニフティクラウドmobile backendの『プッシュ通知』機能とプッシュ通知を受信する際、プッシュ通知の『ペイロードデータを取得する』機能を実装したサンプルプロジェクトです
- 簡単な操作ですぐに ニフティクラウドmobile backendの機能を体験いただけます★☆
- このサンプルはAndroid 4以降に対応しています
スマートフォンアプリのバックエンド機能(プッシュ通知・データストア・会員管理・ファイルストア・SNS連携・位置情報検索・スクリプト)が開発不要、しかも基本無料(注1)で使えるクラウドサービス!
詳しくはこちらをご覧ください
- Android Studio ver. 2.1.2
- Android 6.0
- このサンプルアプリは、プッシュ通知を受信する必要があるため実機ビルドが必要です
※上記内容で動作確認をしています
- ニフティクラウドmobile backendのプッシュ通知は、各プラットフォームが提供している通知サービスを利用しています
- Androidの通知サービス FCM(Firebase Cloud Messaging)
※ FCMはGCM(Google Cloud Messaging)の新バージョンです。既にGCMにてプロジェクトの作成・GCMの有効化設定を終えている場合は、継続してご利用いただくことが可能です。新規でGCMをご利用いただくことはできませんので、あらかじめご了承ください。
- 上図のように、アプリ(Android Studio)・サーバー(ニフティクラウドmobile backend)・通知サービス(FCM/GCM)の間でやり取りを行うため、認証が必要になります
- 認証に必要なプッシュ通知のAPIキーおよびSenderIDは手順にて説明します。
ニフティクラウド mobile backendと連携させるためのAPIキーを取得する必要があります。 以下のドキュメントを参考に、FCMプロジェクトの作成とAPIキーの取得を行ってください。
1. ニフティクラウドmobile backendの準備
- 上記リンクから会員登録(無料)をします
- 登録後、ログインをすると下図のように「アプリの新規作成」画面が出ますので、アプリを作成します
- アプリ作成されると下図のような画面になります
- この2種類のAPIキー(アプリケーションキーとクライアントキー)は先ほどインポートしたAndroidStudioで作成するAndroidアプリにニフティクラウドmobile backendの紐付けるため、あとで使います
- アプリ設定開いてプッシュ通知の設定をします
- 「プッシュ通知の許可」で「許可する」選択、「保存する」をクリックします
- 「Androidプッシュ通知」の「APIキー」には、FCMでプロジェクト作成時に発行された「サーバーキー」を記入し、「保存する」をクリックします
2. GitHubからサンプルプロジェクトのダウンロード
- プロジェクトのGithubページから「Clone or download」>「Download ZIP」をクリックします
- プロジェクトを解凍します
- AndroidStudioを開き、
Open an existing Android Project
を選択し、解凍したプロジェクトを選択します。
- プロジェクトを開きます。
MainActivity.java
ファイルを開きます。
MainActivity.java
を編集します- 先程ニフティクラウドmobile backendのダッシュボード上で確認したAPIキーを貼り付けます
- それぞれ
YOUR_APPLICATION_KEY
とYOUR_CLIENT_KEY
の部分を書き換えます - このとき、ダブルクォーテーション(
"
)を消さないように注意してください!
MainActivity.java
を編集します
ANDROID_SENDER_ID
の部分を、FCMでプロジェクト作成時に発行された「送信者ID (Sender ID)」に書き換えます- このとき、ダブルクォーテーション(
"
)を消さないように注意してください!
-
AndroidStudioからビルドする。
-
「プロジェクト場所」\app\build\outputs\apk\ ***.apk ファイルが生成される
-
インストールしたアプリを起動します
-
プッシュ通知の許可を求めるアラートが出たら、必ず許可してください!アプリを起動します。
- ニフティクラウドmobile backendのダッシュボードから「データストア (installationクラス(端末情報))」を確認してみましょう!
- まずはアプリを__起動した状態__でプッシュ通知を送ってみましょう!
- ニフティクラウドmobile backendのダッシュボードで「プッシュ通知」>「+新しいプッシュ通知」をクリックします
- プッシュ通知のフォームが開かれます
- タイトル、メッセージ、JSON、URL(他も後ほど試してみてください)を入力してプッシュ通知を作成します
- 対象端末が存在していることを確認します。
- プッシュ通知を作成しましょう。
- 端末を確認しましょう!
- 少し待つとプッシュ通知が届きます
- 通知が来て、タブすると、ペイロードを受信し、画面に表示します
- ペイロードデータの見方については「解説」をご覧ください
- 下記2点について解説します
- ペイロードデータについて
- サンプルプロジェクトに実装済みの内容
- ニフティクラウドmobile backendのダッシュボードで入力した内容は以下のようなJSONデータとして、Android端末に届きます
{
"com.nifty.PushId" : "********",
"com.nifty.Data" : "{key : value}",
"com.nifty.RichUrl" : "http://mb.cloud.nifty.com/"
}
- Androidのプッシュ通知の仕様により、ダッシュボードで「JSON」に入力したデータはそのまま
com.nifty.Data
に追加されて設定されます - ダッシュボードで「URL」に設定した場合、
com.nifty.RichUrl
として設定されます - 他にはプッシュ通知のIDは
com.nifty.PushId
に設定されます
- ニフティクラウドmobile backend のドキュメント(クイックスタート)をご用意していますので、ご活用ください
activity_main.xml
でデザインを作成し、MainActivity.java
にロジックを書いています- installationクラス(端末情報)が保存される処理は以下のように記述されます
- アプリを再インストールした時に、端末のデバイストークンが重複した場合の処理を考慮した実装となっています。
//**************** APIキーの設定とSDKの初期化 **********************
NCMB.initialize(this, "YOUR_APPLICATION_KEY", "YOUR_CLIENT_KEY");
final NCMBInstallation installation = NCMBInstallation.getCurrentInstallation();
//GCMからRegistrationIdを取得しinstallationに設定する
installation.getRegistrationIdInBackground("ANDROID_SENDER_ID", new DoneCallback() {
@Override
public void done(NCMBException e) {
if (e == null) {
installation.saveInBackground(new DoneCallback() {
@Override
public void done(NCMBException e) {
if (e == null) {
//保存成功
} else if (NCMBException.DUPLICATE_VALUE.equals(e.getCode())) {
//保存失敗 : registrationID重複
updateInstallation(installation);
} else {
//保存失敗 : その他
}
}
});
} else {
//ID取得失敗
}
}
});
-
ペイロードを実装するために、カスタムサービスを実装する必要があります。詳細の実装はこちらに参照ください。
-
AndroidManifest.xml
のサービスを定義している部分を書き換えます。
<service
android:name="com.nifty.cloud.mb.core.CustomGcmListenerService"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE"/>
</intent-filter>
</service>
CustomGcmListenerService.java
を作成します。以下のように実装されます。
public class CustomGcmListenerService extends NCMBGcmListenerService {
private static final String TAG = "GcmService";
private static final int REQUEST_RESULT = 0;
@Override
public void onMessageReceived(String from, Bundle data) {
//ペイロードデータの取得
if (data.containsKey("com.nifty.Data")) {
try {
JSONObject json = new JSONObject(data.getString("com.nifty.Data"));
} catch (JSONException e) {
//エラー処理
}
} else if (data.containsKey("com.nifty.PushId")) {
String pushid = data.getString("com.nifty.PushId");
Log.d(TAG, pushid);
} else if (data.containsKey("com.nifty.RichUrl")) {
String url = data.getString("com.nifty.RichUrl");
Log.d(TAG, url);
}
//デフォルトの通知
super.onMessageReceived(from, data);
}
}
- 画面にデータを表示するために以下のように
MainActivity.java
のonResume
メソッドにて実装します。
public void onResume() {
super.onResume();
//**************** ペイロード、リッチプッシュを処理する ***************
Intent intent = getIntent();
//プッシュ通知IDを表示
_pushId = (TextView) findViewById(R.id.txtPushid);
String pushid = intent.getStringExtra("com.nifty.PushId");
_pushId.setText(pushid);
//RichURLを表示
_richurl = (TextView) findViewById(R.id.txtRichurl);
String richurl = intent.getStringExtra("com.nifty.RichUrl");
_richurl.setText(richurl);
//プッシュ通知のペイロードを表示
if (intent.getStringExtra("com.nifty.Data") != null) {
try {
JSONObject json = new JSONObject(intent.getStringExtra("com.nifty.Data"));
if (json != null) {
ListView lv = (ListView) findViewById(R.id.lsJson);
lv.setAdapter(new ListAdapter(this, json));
}
} catch (JSONException e) {
//エラー処理
}
}
intent.removeExtra("com.nifty.RichUrl");
}
- ニフティクラウドmobile backend のドキュメント(プッシュ通知(Android))をご用意していますので、ご活用ください