Android用SDKでPush配信をしたい

はじめに

Push通知配信をするにはSDKの導入が必要です
導入手順の詳細については 以下の記事を参照ください

Push通知の実装イメージ

b→dash mobile SDKではPush配信時に、どの画面を表示するかなどに利用する「通知パラメーター」というデータを配信時に指定します。この機能を利用することで、Push配信から遷移する表示画面を変えると言った制御が可能になります。

通知タイプの種類

内部で利用しているPush通知サービスとして Firebase Cloud Messaging(FCM) を利用しています。本SDKでは、エンドユーザーへのPush通知として下記の3パターンとサイレント通知を用意しており、現行のSDK では「標準通知」のみをサポートしております。

通知タイプ 通知の仕方 ユーザーへの影響度
標準通知 ステータスエリアへの通知、Android5 以降ではロック画面への通知も行います。 通常
割込通知 (次期バージョンで対応予定)
画像を含めることが出来るレイアウトで独自の割込通知を行います。この通知を受けたエンドユーザーは、アクションを起こさない限り、通知が画面に表示され続けます。
アクティブ状態を判断しての割込通知 (次期バージョンで対応予定)
アプリケーションがアクティブのときのみ割込通知を行います。非アクティブのときには標準通知と同じです。
通常
サイレント通知 (今後のバージョンで対応予定. 時期は未定)
ユーザーへは通知を行わない通知です。バックグラウンドで処理を行いたい時などに利用できます。
ユーザー目線での注意点とは??

Push通知は「ユーザー操作に割り込んで通知する」 「ユーザーがアプリを起動しなくても通知する」という強いメッセージ性を持っているため、適切なタイミングで利用することが重要になります。

利用方法を間違えると、エンドユーザーにアプリをアンインストールされてしまったり、レビューで星1を付けられたり、Push通知を再度 ON にして貰えない可能性が高く、貴重な通知手段をなくしてしまうことになります。

Google としては以下の4点を重要視しています。

①エンドユーザーがオフにできるようにする。
②単なる広告の表示は避ける。
③エンドユーザー自身に直接、関係のある情報を優先して表示する。
④提供者視点ではなくエンドユーザー視点で通知の内容、タイミング、頻度、プライオリティを調整する。

どのように通知するのが効果的か迷いましたら、カスタマーサクセス担当まで、ご連絡をお願いいたします。

受信イメージ

Android端末で「Push通知」を受信したときのイメージを、「Push通知」「リッチ通知(画像付きPush通知)」の場合でそれぞれご紹介します。

OSのバージョンや機種によって見栄えが異なることがあります。

Push通知を導入する

Google アカウントとサーバーキーの事前準備

Push通知を利用するにはGoogleアカウントが必要となりますので事前にご用意ください。また Firebase Console にて「サーバーキー」を発行しておく必要があります。公式ドキュメントも参照ください。

 設定ファイルの組み込み

Firebase Console にて任意のプロジェクトを作成し、ダウンロードしてきた google-service.jsonをプロジェクトの app ディレクトリに組み込みます。

組み込み完了後のイメージは以下の通りです。

起動するアクティビティの設定

Push通知を受け取った時、標準ではandroid.intent.category.LAUNCHERの Activity が起動します。独自に指定する場合は、以下の <meta-data> をmanifest の <application> 内に追加します。

パラメーター名
com.f_scratch.bdash.mobile.push.launch 【オプション】起動アクティビティをフルパスで指定します

下記は「起動対象にする Activity」を指定するパラメーターの記載例です。

<meta-data
  android:name="com.f_scratch.bdash.mobile.push.launch"
  android:value="パッケージ名も含めてActivityを指定します" />
受信時のアイコンの設定

デフォルトでは「アプリケーション組み込みのアイコン」が利用されます。アプリケーションのアイコンと通知アイコンの画像サイズは異なっているため、イメージが崩れてしまうのを防ぐためにもmanifest で定義を行う必要があります。

パラメーター名
com.f_scratch.bdash.mobile.push.icon 【必須】drawable ディレクトリ内の画像を指定します。
com.f_scratch.bdash.mobile.push.accentColor 【オプション】Android5以降で「アイコンの背景色」を指定します。targetSdkVersion が21以上で有効になります。
com.f_scratch.bdash.mobile.push.bigIcon 【オプション】drawable ディレクトリ内の画像を指定します。Android 5.0 未満までの OS で自動的に有効になります。
com.f_scratch.bdash.mobile.push.lollipop.bigIcon 【オプション】drawable ディレクトリ内の画像を指定します。Android 5.0 以降の OS で自動的に有効になります。

Android 5以降での各パラメーターが反映されるイメージ画像です。

下記はパラメーターの設定例です。 「drawable ディレクトリ」の画像を指定します。

<!-- BDash SDK の通知時のアイコン(必須) -->
<meta-data android:name="com.f_scratch.bdash.mobile.push.icon"
           android:value="@drawable/【画像ファイルを指定します】" />

<!-- BDash SDK のアイコン背景色(オプション)-->
<meta-data android:name="com.f_scratch.bdash.mobile.push.accentColor"
           android:value="@color/【色を指定します】" />

<!-- BDash SDK の通知時のビッグアイコン(オプション)Android 5.0未満で自動有効 -->
<meta-data android:name="com.f_scratch.bdash.mobile.push.bigIcon"
           android:value="@drawable/【画像ファイルを指定します】" />

<!-- BDash SDK の通知時のビッグアイコン(オプション)Android 5.0以降で自動有効 -->
<meta-data android:name="com.f_scratch.bdash.mobile.push.lollipop.bigIcon"
           android:value="@drawable/【画像ファイルを指定します】" />

通知アイコンのイメージサイズは、以下のサイズが推奨されています。( Android Developerサイトより )

drawable-dpi Image size( width x height)
ldpi 18 x 18
mdpi 24 x 24
hdpi 36 x 36
xhdpi 48 x 48
xxhdpi 72 x 72
xxxhdpi 96 x 96
オプションの 「ビックアイコン」 のみを指定することは不可!?
オプションの 「ビックアイコン」 のみを指定することはできません
Android OS の端末の表示仕様(見え方)は Android ICS, JellyBean, Lollipop 以降で見え方が異なるので事前にどのように見えるかご確認ください。
なおビックアイコンは Lollipop 未満と以降で見え方が異なるので、それぞれで指定できるようにしています。
通知チャンネルの設定

通知チャンネルを有効にするためには、以下の必須設定をmanifest で定義する必要があります。

最初に「通知チャンネル」を作成したあと、「通知チャンネル名/説明」の更新は問題なく可能ですが、通知の重要度などはAPIを通して変更することができません。変更を行う場合は、既存の通知チャンネルを削除し新しく作り直す必要があります。

パラメーター名
com.f_scratch.bdash.mobile .push.channel.id 【必須】通知チャンネルIDをユニークで指定します。
com.f_scratch.bdash.mobile .push.channel.name 【必須】通知チャンネル名を指定します。
com.f_scratch.bdash.mobile .push.channel.desc 【オプション】通知チャンネルの説明を行います。
com.f_scratch.bdash.mobile .push.channel.badge 【オプション】通知チャンネルでバッジを付けるか指定します。
実際にバッジが付くかはホームアプリと OS の双方に依存します。
現SDK では正式にサポートはしていません。(デフォルト値は true)
com.f_scratch.bdash.mobile .push.channel.importance 【オプション】通知の重要度を以下の定数を指定します。
Oreo の前と同じ挙動を期待する場合はhigh を指定します。
(デフォルト値は high)
high:NotificationManager.IMPORTANCE_HIGH
default:NotificationManager.IMPORTANCE_DEFAULT
low:NotificationManager.IMPORTANCE_LOW
min:NotificationManager.IMPORTANCE_MIN
none:NotificationManager.IMPORTANCE_NONE

下記はパラメーターの設定例です。種類によって value/resource の差異があるため設定の際はご注意ください。

<meta-data android:name="com.f_scratch.bdash.mobile.push.channel.id"
   android:value="【通知チャンネルIDを指定します。ユニークである必要があります】">
</meta-data>

<meta-data android:name="com.f_scratch.bdash.mobile.push.channel.name"
   android:resource="@string/【通知チャンネル名を指定します】">
</meta-data>

<meta-data android:name="com.f_scratch.bdash.mobile.push.channel.desc"
   android:resource="@string/【通知チャンネルの説明を記載します】">
</meta-data>

<meta-data android:name="com.f_scratch.bdash.mobile.push.channel.badge"
   android:value="【バッジを表示する: true 表示しない: false】">
</meta-data>

<meta-data android:name="com.f_scratch.bdash.mobile.push.channel.importance"
   android:value="【重要度を指定します】">
</meta-data>
 組み込みの設定画面

Android版では組み込みの「Push通知の設定画面」を用意しています。

APIレベル26(Android 8.0)以降は「通知チャンネル」が導入されたため、本機能はAndroid7.0以下で利用することを想定しています。Android 8.0については、「アプリ設定」の通知設定で切り替えます。
デザインテーマとしては3パターン用意しております。

組み込みの「設定画面」を利用する場合は、以下の情報を <activity> として定義します。

<activity
 android:name="com.f_scratch.bdash.mobile.analytics.notification.BDashNotificationSettings"
android:screenOrientation="portrait"
android:theme="@style/BDashSDK_Theme"
/>

プログラムコードからは以下のように呼び出します。

Intent intent = new Intent(this, BDashNotificationSettings.class);
startActivity(intent);
言語は「日本語」と「英語」の2言語に対応しています。
好みのデザインテーマに変更するには⁇

デザインテーマはお客様の方でオーバライドすることもできます。parent 属性に「BDashSDK_Theme」 を指定した上で、ヘッダカラー色の要素「colorPrimary」の上書きが可能です。

 Push受信サービスの競合について(※FCM導入済みの場合のみ)

Push通知の受信処理に独自のペイロード解析を行っている場合、Android では「FirebaseMessagingService」クラスを継承し実装することになります。b→dash Mobeile SDK では上記のクラスを継承しmanifestファイルに下記定義を行っています。

<service 
android:name="com.f_scratch.bdash.mobile.analytics.notification.FCMReceiverService">
<intent-filter>
   <action android:name="com.google.firebase.MESSAGING_EVENT" />
 </intent-filter>
</service>

この定義は manifest 内に1つしか定義ができないため、アプリで定義すると SDK の定義が上書きされ「b→dash の通知受信」が行われなくなります。

アプリと SDK 双方で受信できるように、下記のいずれかの対策を取る必要があります。

パターン1パターン2
アプリ側で「b→dash 受信クラス」を継承し処理を切り分ける
– フック処理を実装し「メッセージ種別」によって処理するメソッドを分ける

サンプルコードは以下のようになります。

import com.f_scratch.bdash.mobile.analytics.notification.FCMReceiverService;
// b→dash の通知サービスを継承させます. 
public class HookFCMReceiverService extends FCMReceiverService {   
   @Override
   public void onCreate() {
       // 必須です. super クラスの onCreate() を呼び出します
       super.onCreate();
  }
  @Override
  public void onMessageReceived(RemoteMessage message, Bundle data) {
      if( アプリの通知と判断 又は b→dash SDK の通知 と判断する(1) ){
          // アプリ側の通知処理を行います
        } else {
          // b→dash 側の通知処理を行います   
          super.onMessageReceived(message, data);
        }
      }
    @Override
    public void onNewToken(String token) {
       // 現行SDK では onNewToken は未実装なので下記は必須ではありません
       // SDK v2.3.0 からは必須になります。
       super.onNewToken(token);
    }
    @Override
    public void onDeletedMessages() {
       super.onDeletedMessages();
    }
    @Override
    public void onMessageSent(String msgId) {
        super.onMessageSent(msgId);
    }
}

※1 「b→dash の通知と判断」する場合、第二引数data のペイロードの中に “jp_co_fscratch” というキーが定義されているのでそちらをご利用ください。 値には 1 が入ってますが、値そのものは無視してください。

b→dash 側で判断し、対象外のメッセージを特定のサービスクラスに連携する
– 準備中のためお待ちください

※現在は 1番のみで対応可能です。2番は今後のバージョンで対応予定です。

Push通知を利用する

ログ取得用API

Android版SDKのログ取得用クラスにて公開されているAPIのうち、Push通知で利用するAPIは以下となっております。

API 送信内容
Tracker.setScreenName() スマホアプリでアクセスした画面の名前
Tracker.setRelationalKey(key, val) データ統合のためのレコードを一意に特定するカラムの名前
FCMトークンを紐付ける

Push通知を利用するために計測ログとしてFCMトークンを送信する必要があります。

// Push通知のためのFCMトークンを紐付ける
Tracker.setScreenName("外部データ紐付けサンプル");
tracker.setRelationalKey(”notificationId”, ”FCMトークンの値”);
tracker.send(new ScreenViewBuilder().build());

FCMトークンの値はbdashSDKが提供するプロパティからも取得が可能です。

// Push通知のためのFCMトークンを紐付ける
Tracker.setScreenName("外部データ紐付けサンプル");

// SDKからFCMトークンの値を取得する
String fcmTokenId = BDashNotification.getToken()

// 取得したFCMトークンをセットする
tracker.setRelationalKey(”notificationId”, fcmTokenId);
tracker.send(new ScreenViewBuilder().build());

Push通知用API

Android版SDKのPush通知クラス(BDashNotification)にて公開されているAPIは以下となっております。下記は全てBDashNotificationに属する関数になります。

API 例外 概要
BDashNotification.getInstance() - シングルトンのオブジェクトを取得
registerNotification() BDashBusyException ★b→dashサーバへFCMトークンを登録する
・すでに同期済みの場合は何も行われない
・FCMトークンがない時はonError が通知される
・エンドユーザーに承諾が必要なアプリの場合、本関数を呼び出す前に承諾を得る必要がある
registerForceNotification() BDashBusyException ★b→dashサーバへFCMトークンを登録する
・本関数は同期状態に関わらず強制して実施する
cancelNotification() BDashBusyException ★b→dashサーバからFCMトークンを解除する
isRegisterNotification() - FCMトークンが登録されているかを返す
SDK側視点での同期状態となる
True: 通知有効
False: 通知無効
getToken() - FCMトークンを返す
getRegistrationId() - ストレージに保存されている FCM トークンを返す
GCM 時代の互換用API
addStateListener() - 通知状態を受け取るリスナーを追加する
主要API の結果を受け取れるようになる
removeStateListener() - 登録したリスナーを削除する
clearStateListener() - 登録したすべてのリスナーをクリアする
addTokenRefreshListener() - トークンリフレッシュを受け取るリスナーを追加する
removeTokenRefreshListener() - 登録したトークンリフレッシュリスナーを削除する
clearTokenRefreshListener() - 登録したすべてのトークンリフレッシュリスナーをクリアする
clearTokenRefreshListener() - 登録したすべてのトークンリフレッシュリスナーをクリアする
setFCMNativeEventListener() - FCM のネイティブイベントを受け取るリスナーを設定する。一つのみ設定可能。
setEnableSound() - Android 8.0未満のみサウンドを鳴らすかを切り替える
setEnableVibration() - Android 8.0未満のみバイブを振動させるかを切り替える
isEnableSound() - Android 8.0未満のみサウンドが有効かを返す
isEnableVibration() - Android 8.0未満のみバイブが有効かを返す
概要欄に★が付いているのは登録/解除を行う主要API になります。

定数・例外クラス・リスナーのメソッド一覧

一覧 概要
BDashNotificationStateListener. onEnable() BDashNotificationStateListener のコールバック関数。
通知がONで同期されたときに呼び出されます。
BDashNotificationStateListener. onDisable() BDashNotificationStateListener のコールバック関数。
通知が OFF で同期されたときに呼び出されます。
BDashNotificationStateListener. onError( int type, Exception exception ) BDashNotificationStateListener のコールバック関数。
通知の同期で何かしらのエラーが発生したときに呼び出されます。
NotificationStateListener. ERROR_FCM onError の第1引数に渡されます。
過去に利用されていましたが、現在は設定されることはありません。
NotificationStateListener. ERROR_FCM_READY onError の第1引数に渡されます。FCMトークンが発行されていないときに設定されます。
NotificationStateListener. ERROR_CONNECT onError の第1引数に渡されます。同期エラーが発生したときに設定されます。
BDashNativeSyncException onError の第2引数に渡されることがあります。
FCMトークンが新規に採番されたときに、内部で自動同期を行いますが、その通信に失敗したときに設定されます。
SDK内部仕様のFCMトークンが変わったらどうなる?もご確認ください。
BDashBusyException b→dash が同期中のときに、再度、同期を行う関数が呼ばれたときに発生します。
この例外が出たときは、実装ロジックが好ましくない可能性もございます。
(とても短い周期で、何度も同期を行っていることになります)
FCMNativeEventListener.onNewToken( String token ) FirebaseMessagingServiceのonNewToken() と同一の挙動をするコールバック関数です。
FCMNativeEventListener.onDeletedMessages() FirebaseMessagingServiceのonDeletedMessage()と同一の挙動をするコールバック関数です。
FCMNativeEventListener.onUnregistered( String token ) 現在利用しているトークンが無効になったときに呼び出されます。
精度は完全ではなく、エンドユーザーがタスクキルをしたりすると呼び出されない事があります。
・onNewToken関数との呼び出す順序は不定です。
・ご利用される場合は目安程度でご利用ください。
FCMTokenRefreshListener.onRefreshToken(String token ) アプリ起動時にトークンを取得することができます。
FCM のトークンが発行されてから呼び出されるので、本コールバック後にregisterNotification() を呼び出すのが正しいフローです。
・onNewToken() と異なり、アプリ起動毎に1度は必ず呼び出されます。

Push通知用APIの利用

b→dash mobile SDK ではPush通知を利用することができます。なお通知状態の取得はアプリ側で行う必要があります。またエラー処理についてはアプリ側で適時実装をお願いいたします。導入の手順を説明します。

SDKのインポート
import com.f_scratch.bdash.mobile.analytics.notification.BDashNotification;
Push通知を有効にする

Push通知を有効にするには、以下のコードを呼び出します。

try {
    BDashNotification bdashNotification = Tracker.getInstance(this).getNotification();
    bdashNotification.addStateListener(new BDashNotification.NotificationStateListener() {
        @Override
public void onEnable() {
// 通知が有効になったときに来ます
        }
        @Override
public void onDisable() {
            // 通知が無効になったときに来ます
        }
        @Override
public void onError(int i, Throwable throwable) {
            // 通知処理でエラーが発生したときに来ます. 引数は無視しても問題ありません

        }
    });
    bdashNotification.registerNotification();.
} catch( Exception e ) {
}
通知の登録結果

通知の登録結果は「BDashNotification.addStateListener()」に登録したリスナークラスに通知されます。通信エラーや FCMの内部エラーが発生すると onError として通知されるので、リトライ処理やユーザーへの促しを(アプリに応じて)考慮する必要があります。

本リスナークラスは登録を解除しない限りリスナーが生存しているのでAPI の「BDashNotification.removeStateListener()」を呼び、必要に応じて削除する必要があります。

Push通知を無効にする

Push通知を無効にするには、以下のコードを呼び出します。

try {
    BDashNotification bdashNotification = Tracker.getInstance(this).getNotification();
    bdashNotification.addStateListener(new BDashNotification.NotificationStateListener() {
        @Override
public void onEnable() {
// 通知が有効になったときに来ます
}
        @Override
public void onDisable() {
// 通知が無効になったときに来ます
}
        @Override
public void onError(int i, Throwable throwable) {
// 通知処理でエラーが発生したときに来ます. 引数は無視しても問題ありません
}
    });
    bdashNotification.registerNotification();.
} catch( Exception e ) {
}

b->dashと連携を行うため、通知が無効のとき呼び出す必要があります。

サウンド・バイブレーションをON/OFFにする

Android 8.0 以降では、サウンド・バイブともに「通知チャンネルにてデフォルトでON」 となります。Android 8.0未満では、下記メソッドをコールしての制御を行えましたが現在は動作保証しておりません。

サウンドとバイブレーションを有効にするには、以下のコードを呼び出します。

bdashNotification.setEnableSound(true); // サウンドの有効
bdashNotification.setEnableVibration(true); // バイブの有効

無効にするには、以下のコードを呼びます。

bdashNotification.setEnableSound(false); // サウンドの無効
bdashNotification.setEnableVibration(false); // バイブの無効

互換性のために、引き続きメソッドをコールすることは可能です。

トークン情報を受け取る/トークンリフレッシュのリスナー

トークンを取得したタイミングで処理を行いたい場合、BDashNotification.FCMTokenRefreshListenerを使うことで適切なタイミングで取得することが可能です。ほとんどのアプリでは本実装は必須になります。

public class MyApplication extends Application {

 // トークンリフレッシュリスナーを定義します
BDashNotification.FCMTokenRefreshListener tokenRefreshListener = 
  new BDashNotification.FCMTokenRefreshListener() {
    @Override
    public void onRefreshToken( String newToken ) {
       
 // トークンを取得できます
        String tokenId = newToken;

      
  // b→dash サーバーへ連携します(同期処理)        // 同期を強制させる場合registerForceNotification() もご検討ください 
        BDashNotification.getInstance(MyApplication.this).
        registerNotification();

      
  // (任意)必要なければ、トークンリフレッシュリスナーを削除します        // 削除した場合、トークンが更新されたとき本コールバックが受け取れなくなります
        BDashNotification.getInstance(MyApplication.this)
        .removeTokenRefreshListener(tokenRefreshListener);
     }
};
public void onCreate(){
   super.onCreate();
 
  // 起動時にトークンリフレッシュリスナーを追加します
   BDashNotification.getInstance(this).addTokenRefreshListener(tokenRefreshListener);
  }
}
登録方法の注意点

本リスナーはApplication を継承したクラスで登録する必要があります。Actovity で登録するとリスナー登録前にFCMイベントが完了してしまう可能性があるのでご注意ください。

onRefreshToken() は、アプリケーションのタスクが新規起動するたびに呼び出されます。
トークンが変わったときに同期を行う場合は、変わったことを検知できるようにトークンを独自に保存し、比較を行った上で registerForceNotification() を呼ぶ必要があります。

FCM Push通知のネイティブイベントについて

FCM Push通知には、下記のようなネイティブのイベントが存在しています。

・トークンが新規に発行された
・デバイスが1ケ月以上オフラインのため、配信メッセージが削除された
・未配信メッセージが100件を超えている

最新のb→dash mobile SDK では、上記イベントを「BDashNotification . setFCMNatgiveEventListener 関数」を利用することで上記イベントを受け取ることができます。

BDashNotification.getInstance(this).setFCMNativeEventListener(
   new BDashNotification.FCMNativeEventListener() {
    @Override
    public void onNewToken(String s) {
      // トークンが新規に発行された
    }

    @Override
    public void onDeletedMessages() {
      // 配信メッセージが削除された
      // ・デバイスが1ケ月以上オフライン
      // ・未配信メッセージが100件を超えた
    }
    @Override
    public void onUnregistered(String s) {
      // 以前利用していたトークンが無効になった
    }
});
登録方法の注意点

本リスナーはApplication を継承したクラスで登録する必要があります。Actovity で登録するとリスナー登録前にFCMイベントが完了してしまう可能性があるのでご注意ください。

Push通知を利用するためには、b→dashSDKの導入が必要です

Push通知の配信において、貴社の保持しているトークンを利用することはできません。Push通知を利用するにあたり、b→dashSDKを導入する主な理由は以下の2つです。

1.b→dashSDKを経由しないと、配信対象者とみなされない
b→dashでは「配信可能な対象者」について、エンドユーザーごとにアプリで設定される通知受信可否の設定を見ています。通知受信可否の設定の反映はb→dashSDKを通じて行っているため、SDKを導入しないと、FCMトークンと受信可否の紐づけがb→dash上で行われず、配信ができません。

2.配信後の効果測定ができない
配信後の開封確認など、効果測定のためのログをb→dashSDKを通じて取得しているため、効果測定ができず、配信実績レポートが見れません。

Push通知からアプリを起動する

エンドユーザーが受信した通知をタップ(起動)した時には、導入手順の「起動アクティビティ」で設定した Activity が起動されます。通知から遷移した時に含まれる「起動パラメーター」を利用した判定方法や、成果としてTracking 情報を送るには以下のコードを呼び出します。起動した Activity の onCreate() を用いてデータを送信します。

Intent intent = getIntent();
// Push通知から起動かの判定
int isNotification = intent.getIntExtra(BDashNotification.LAUNCH_NOTIFICATION, 0);
if( isNotification != 0 ) {
  
 // 起動パラメーターがあるかの判定
   String param = intent.getStringExtra(BDashNotification.LAUNCH_EXTRA_PARAM);
   if (param != null) {
      
  // パラメーターが URL エンコードして渡されます
        try {
           param = URLDecoder.decode(param, "UTF-8");
        } catch (Exception e) {
        }
// 起動パラメーターを判断して画面遷移させる( WebView 画面、アプリ内の画面など)
        if ( param == "news" ) {
        } else if ( param == "event" ) {
        }

}
// Tracking 情報を生成します。デコード後の param を渡します
Tracker.getInstance(this).setBootType(Tracker.BootType.BOOT_PUSH, param);
Tracker.getInstance(this).setScreenName("任意のスクリーン名");
Tracker.getInstance(this).send(new ScreenViewBuilder().build());
}

[参考]FCMトークンが変わった場合

公式サイトには、下記の場合に登録トークンが変更されることがあると定義されています。
・アプリによってインスタンス ID が削除される場合
・アプリが新しいデバイスで復元される場合
・ユーザーがアプリをアンインストール / 再インストールする場合
・ユーザーがアプリのデータを消去する場合

トークンが更新されると、内部ではonNewToken() が呼び出されます。このとき SDK では b→dash サーバーに自動連係される仕組みになっています

但し、通信エラーが発生した場合はリトライ処理は行われず onErrorが呼ばれ、第2引数にBDashNativeSyncException が設定されます(※1)。この場合は手動で同期する(※2)必要があります。
また同期前にアプリをキルされたときは、次に起動したときに onRefereshToken() にて新しいトークンを伴って呼び出されますので、そのタイミングで同期を行う必要(※2)があります。

※1 Application クラス内でaddStateListener() を行っている必要があります
※2 registerNotification() または registerForceNotification() を利用する必要があります

トークンが更新されるケースは、通常利用の範囲(公式の定義以外)では発生しませんが、
FCM 20.1.1 以降にアップグレードされる場合、例外としてトークンが変わる事がありますのでご注意ください

[参考]Push通知が受信できない時

b→dash からPush通知を受信できない場合、以下のステップ順で確認をお願いいたします。

1,Tracking.plist/manifest に設定している値が正しいか確認する

– Pushが届かない場合で、最も多い原因となっています

2,1番で設定した環境のライブラリを利用しているか確認する

– 本番なのにSTG を設定しているなどがあります

3,registerNotification() を呼び出した結果 200 ステータスが返り、トークンが出力されているかを確認する

– STG 環境の場合、adb logcat/XCode コンソールでログを確認できます
– 200が返ってこない場合、サーバーが落ちてる可能性が有ります
=> お問い合わせください

4, 3番の結果 onEnable が来ているのかを確認する

– registerNotification() の引数に渡したクロージャーにコールバックされます

各ステップに問題がないにも関わらず、Push通知を受信できない場合は、管理画面側の設定に問題があるか、FCM サーバーがダウンしている可能性が有ります。カスタマーサクセス担当までお問い合わせをお願いいたします。なお FCM サーバーがダウンしているかは Google 公式のダッシュボードで確認できます。