Remote Notification の組み込み Shell App SDK for Android 1.7.0 以降について

 

This page is not available in English.
Please select another language.

Mobage Shell App SDK (Android) 1.7.0 未満から、 Mobage Shell App SDK (Android) 1.7.0 以降へ変更する場合、かつリモート通知を利用する際には本ページに記載する内容の変更が必要になります。

AndroidManifest.xml の変更

Remote Notification を利用する場合、以下の AndroidManifest に追加で設定しなくてはなりません。

<application> タグの外の以下の要素を削除します。

下記の項目は Shell App SDK 1.6.0 の時点で不要となっています。

 

<application> タグの外の以下の permission は必要ですので削除しないでください

<application> タグ内に記載された以下の項目をすべて削除してください

<manifest> タグに xmlns:tools="http://schemas.android.com/tools" を追記してください。

 

<application> タグ内に以下を記載してください


  • リモート通知には、 rn_icon.png を通知アイコンとして使用されます。drawable の下に rn_icon.png を設置してください。

     

    drawable/rn_icon.png が設置されていないとリモート通知が通知されません。

    リモート通知用に設定するアイコンファイルは、以下 URL に記載されているような、アルファ設定付きの白の単色画像を設定する必要があります。
    https://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar#size11

    AndroidManifest.xml の <application> タグ内の Main Activity の launchMode は、以下のように設定してください。

     

build.gradle の変更

以下の項目をアプリケーションの build.gradle へ追加します。 firebase-messaging は 17.1.0 以上、 firebase-jobdispatcher は 0.8.5 以上がサポート対象になります。

 

プロジェクトの build.gradle 内で、google() が jcenter() よりも先に記述されていることを確認してください。

記述の順番が違う場合にビルドエラーとなりますのでご注意ください。

 

FCM 初期化について

リモート通知機能を利用する場合、setClientCredentials() を呼び出したあと、必ず setFirebaseDefaultApp() を呼び出してください。(ただし、Firebase をパートナー様に置いてもご利用される場合は設定が異なります。)

Shell App SDK 1.7.0 よりリモート通知を利用する場合には setClientCredentials() の引数を変更する必要があります。

  • setClientCredentials("_EMBEDDED_KEY_", "_EMBEDDED_SECRET_", ServerMode)
GameActivity.java

Firebase の機能をアプリ内で利用する場合

Mobage Shell App SDK 以外で、アプリ内で Firebase (Realtime Database 等含む) を利用される場合、mMobageContext.setFirebaseDefaultApp() に与える引数が異なることがあります。

  1. アプリ側で Firebase の初期化 ([DEFAULT] での初期化)を mMobageContext.registerForRemoteNotification() 呼び出しよりも前に行う場合
    1. mMobageContext.setFirebaseDefaultApp(true) を呼び出します。
  2. アプリ側で Firebase の初期化を mMobageContext.setFirebaseDefaultApp() 呼び出しよりも後に行う場合
    1. mMobageContext.setFirebaseDefaultApp() を呼び出します。
    2. こちらのリンクに従い、 FirebaseApp.initializeApp での初期化時の第三引数に、アプリ側で決定したインスタンス名を指定して初期化してください。


ProGuard の設定変更について

ProGuard 利用する場合には proguard-project.txt が変更になりますので、下記のURLを確認し設定してください。

ProGuard_of_ShellAppSDK_for_Android

 

Remote Notification の送信テスト

Mobage Developers Japan より、リモート通知予約機能からリモート通知の送信を試すことができます。以下のドキュメントに従って、予約してみてください。

https://docs.mobage.com/display/JPSA/How+to+use+the+Remote+Notificatio+Reservation_ShellApp

 

RemoteNotification の受信側のカスタマイズ方法

受信側のカスタマイズ方法については Shell App SDK 1.7.0 未満から変更はありません。

 

ここから先の内容は Java や Android SDK に触れたことのある上級者向けの解説になります。Android アプリの状態には以下の 3 つの状態が存在します。

  • アプリケーションがフォアグラウンドの場合
    • アプリがユーザーに見えている状態になります
  • アプリケーションがバックグラウンドの場合
    • アプリがユーザーには見えていないが、アプリは起動している状態になります
  • アプリケーションが起動していない場合
    • アプリが完全に起動していない場合になります

 

上記の状態ごとに通知された時の動作を記載していきます。(ステータスバーに通知される通知の内容をカスタマイズする方法も後述します)

 

アプリケーションがフォア・バックグラウンドの場合の通知受け取り時の動作をカスタマイズする方法

デフォルトの挙動としてはステータスバーに通知が行われますが、Remote Notification 受信時の動作をカスタマイズしたい場合、RemoteNotification.setRemoteNotificationListener() にリスナーを登録することで、受信した Remote Notification を受け取り任意の動作を行うことができます。

リスナーに null 以外を登録した場合、デフォルトのステータスバー通知動作は行われなくなります。null を指定した場合は、通常通りステータスバーへの通知が行われます。

 

アプリケーションがフォアグラウンドの時に iOS と同様に Remote Notification の通知を行わない場合には、以下のように Activity の onPause/onResume にてリスナーを登録・解除します。

 

フォアグラウンド状態の時は、onResume メソッド内で RemoteNotification.setRemoteNotificationListener() にリスナーを登録することで、受信した Remote Notification を受け取り任意の動作を行うことができます。

バックグラウンド状態の時は、onPause メソッド内で RemoteNotification.setRemoteNotificationListener() にリスナーを登録することで、受信した Remote Notification を受け取り任意の動作を行うことができます。

 

アプリケーションが起動していない場合の通知受け取り時の動作をカスタマイズする方法

 デフォルトの挙動としてはステータスバーに通知が行われますが、Remote Notification 受信時(通知タップ時ではなく、通知受信時になります)の動作をカスタマイズしたい場合、Application クラスの onCreate()に RemoteNotification.setRemoteNotificationClient()  でリスナーを登録することで、受信した Remote Notification を受け取り任意の動作を行うことができます。Application クラスの定義の仕方から説明していきます。(作成されたことのある方は読み飛ばして結構です)

 

上記 RemoteNotificationClient#handleMessage() にて true を返した場合、デフォルトのステータスバー通知や setRemoteNotificationListener() にて設定したリスナーの呼び出しは行われなくなります。false を返した場合、ステータスバーへの通知もsetRemoteNotificationListener() で設定したリスナーの呼び出しも維持されます。

 

Application クラスの定義

まずは、Application クラスを継承したクラスを新たに定義し、定義した onCreate メソッドに上記の RemoteNotification.setRemoteNotificationClient() を記載する必要があります。

新しい Application クラスを定義するには、Eclipse の Package Explorer 上で src/com.example.shellappsdksample の上で右クリックし、メニューから 「New」 -> 「Class」を選択します。

 

以下の様な、「New Java Class」ダイアログが表示されますので、Name に適切な名前を入力し、「Browse...」ボタンをクリックします。


 

以下の様な「Superclass Selection」ダイアログが表示されますので、Choose a type: に「Application」と入力し、「Matching items:」から「Application - android.app」を選択して「OK 」ボタンをクリックします。

 

「New Java Class」ダイアログに戻ってきますので、「Finish」ボタンをクリックします。Package Explorer 上で、以下のように SampleApplication.java が追加されたことを確認してください。

 

 

あとは、SampleApplication.java で onCreate メソッドをオーバーライドして、RemoteNotification.setRemoteNotificationClient() を記載してください。以下に実装例を記載します。

 

Application クラスの定義に伴う AndroidManifest.xml の編集

Application クラスを継承したクラスを新たに定義した場合、それを有効にするために AndroidManifest.xml の application タグの属性に android:name="com.example.shellappsdksample.SampleApplication" のように絶対パス(FQCN)で android:name 属性の追記を行います。

 

ステータスバーに通知される通知内容をカスタマイズする場合

デフォルトで行われるステータスバー通知の内容をカスタマイズしたい場合、「アプリケーションが起動していない場合の通知受け取り時の動作をカスタマイズする方法」で作成した Application クラスの onCreate() にて RemoteNotification.setRemoteNotificationClient() に設定したコールバック内で tweakNotification をオーバーライドしたメソッドで設定することができます。

 

実際に Application クラスに実装した例は以下になります。

 

 


更新履歴

  • 2018/11/30
    • 新規作成

 

 

PREVIOUS

Shell App SDK とは

NEXT

Shell App SDK とは