• 文字サイズ変更
  • S
  • M
  • L
  • No : 728
  • 公開日時 : 2026/03/16 17:29
  • 更新日時 : 2026/05/19 17:52
  • 印刷

Android用SDKでPush配信をしたい

回答

本記事では、b→dash mobile SDK(Android用)でPush配信を行うための実装方法について紹介しています。
実装手順は、大きく下記の4つです。

 1. Push通知の実装イメージと通知タイプ
 2. Push通知を導入する
 3. Push通知を利用する
 4. Push通知からアプリを起動する

各手順の詳細は、以下をご参照ください。

1. Push通知の実装イメージ

b→dash mobile SDKでは、Push配信時に「通知パラメーター」というデータを指定することで、配信から遷移する表示画面を変えるなどの制御が可能です。内部のPush通知サービスとしてFirebase Cloud Messaging(FCM)を利用しています。

通知タイプの種類

本SDKでは、エンドユーザーへのPush通知として下記の3パターンとサイレント通知を用意しており、現行のSDKでは「標準通知」のみをサポートしています。

通知タイプ

通知の仕方

影響度

標準通知 ステータスエリアへの通知、Android5以降ではロック画面への通知も行います

通常

割込通知 次期バージョン対応予定。画像を含めることが出来るレイアウトで独自の割込通知を行います

アクティブ状態を判断しての割込通知 次期バージョン対応予定。アプリケーションがアクティブのときのみ割込通知を行います

通常

サイレント通知 今後のバージョン対応予定。ユーザーへは通知を行わない通知です

※ Push通知は「ユーザー操作に割り込んで通知する」「アプリを起動しなくても通知する」という強いメッセージ性を持つため、適切なタイミングでの利用が重要です。Googleは下記4点を重視しています:
 1. エンドユーザーがオフにできるようにする
 2. 単なる広告の表示は避ける
 3. エンドユーザー自身に直接関係のある情報を優先して表示する
 4. 提供者視点ではなくエンドユーザー視点で通知の内容、タイミング、頻度、プライオリティを調整する

受信イメージ

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

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

2. Push通知を導入する

事前準備とFirebase Console設定

Push通知を利用するにはGoogleアカウントが必要です。事前に用意し、Firebase Consoleで「サーバーキー」を発行してください。

※ 詳細はFirebase公式ドキュメントもご参照ください

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

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

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

パラメーター名

com.f_scratch.bdash.mobile.push.launch 【オプション】起動アクティビティをフルパスで指定します
● 記載例:
 <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以降で「アイコンの背景色」を指定
com.f_scratch.bdash.mobile.push.bigIcon 【オプション】Android 5.0未満で自動的に有効
com.f_scratch.bdash.mobile.push.lollipop.bigIcon 【オプション】Android 5.0以降で自動的に有効
通知アイコンの推奨イメージサイズ

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 【オプション】通知チャンネルでバッジを付けるか(デフォルト: true)
com.f_scratch.bdash.mobile.push.channel.importance 【オプション】通知の重要度(high/default/low/min/none、デフォルト: high)

組み込みの設定画面

Android版では組み込みの「Push通知の設定画面」を3種類のデザインテーマで用意しています。

※ APIレベル26(Android 8.0)以降は「通知チャンネル」が導入されたため、本機能はAndroid 7.0以下で利用することを想定しています。Android 8.0については、「アプリ設定」の通知設定で切り替えます
  言語は「日本語」と「英語」の2言語に対応
  デザインテーマはお客様の方でオーバーライド可能(parent属性に「BDashSDK_Theme」を指定し、ヘッダカラー色の要素「colorPrimary」を上書き)

Push受信サービスの競合への対応(FCM導入済みの場合)

Push通知の受信処理に独自のペイロード解析を行っている場合、Androidでは「FirebaseMessagingService」クラスを継承して実装します。b→dash Mobile SDKでは上記のクラスを継承しmanifestで定義しているため、この定義はmanifest内に1つしか定義できず、アプリで定義するとSDKの定義が上書きされb→dashの通知受信が行われなくなります

アプリとSDK双方で受信できるように、「アプリ側でb→dash受信クラスを継承し処理を切り分ける」対応が必要です(FCMReceiverServiceを継承し、メッセージ種別によって処理メソッドを分ける)。

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

3. Push通知を利用する

ログ取得用API

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

API

送信内容

Tracker.setScreenName() スマホアプリでアクセスした画面の名前
Tracker.setRelationalKey(key, val) データ統合のためのレコードを一意に特定するカラムの名前
※ FCMトークンの値は、b→dash SDKが提供するプロパティ BDashNotification.getToken() からも取得可能です

Push通知用API

BDashNotificationクラスで公開されているAPIの主要なものは下記です(★は登録/解除を行う主要API)。

BDashNotification Push通知用APIの一覧

API

例外

概要

getInstance() - シングルトンのオブジェクトを取得
registerNotification() BDashBusyException ★b→dashサーバへFCMトークンを登録する
registerForceNotification() BDashBusyException ★強制してFCMトークンをサーバ登録する
cancelNotification() BDashBusyException ★b→dashサーバからFCMトークンを解除する
isRegisterNotification() - FCMトークンが登録されているかを返す
getToken() - FCMトークンを返す
getRegistrationId() - ストレージに保存されているFCMトークンを返す
addStateListener() / removeStateListener() / clearStateListener() - 通知状態を受け取るリスナーの追加/削除
addTokenRefreshListener() / removeTokenRefreshListener() / clearTokenRefreshListener() - トークンリフレッシュリスナーの追加/削除
setFCMNativeEventListener() - FCMのネイティブイベントを受け取るリスナーを設定
setEnableSound() / setEnableVibration() / isEnableSound() / isEnableVibration() - Android 8.0未満のみサウンド/バイブを切り替え/取得
定数・例外クラス・リスナーのメソッド一覧

一覧

概要

NotificationStateListener.onEnable() 通知がONで同期されたときに呼び出される
NotificationStateListener.onDisable() 通知がOFFで同期されたときに呼び出される
NotificationStateListener.onError(type, exception) 通知の同期でエラーが発生したときに呼び出される
ERROR_FCM_READY / ERROR_CONNECT FCMトークン未発行 / 同期エラーの定数
BDashNativeSyncException FCMトークン新規採番時の内部自動同期失敗時に設定
BDashBusyException b→dashが同期中のときに再度同期を行う関数が呼ばれたときに発生
FCMNativeEventListener.onNewToken(token) FirebaseMessagingService.onNewToken()と同一の挙動
FCMNativeEventListener.onDeletedMessages() 配信メッセージが削除されたとき(デバイスが1ヶ月以上オフライン/未配信メッセージが100件超過)
FCMNativeEventListener.onUnregistered(token) 現在利用しているトークンが無効になったときに呼び出される
FCMTokenRefreshListener.onRefreshToken(token) アプリ起動時にトークンを取得することができる

Push通知の有効/無効化

Push通知を有効/無効にするには、それぞれ下記のコードを呼び出します。

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();  // 有効化 (無効化は cancelNotification())
※ 通知の登録結果はaddStateListener()に登録したリスナーに通知されます。通信エラーやFCM内部エラー発生時はonErrorとして通知されるため、リトライ処理やユーザーへの促しを考慮してください
  リスナーは登録を解除しない限り生存するため、removeStateListener()で必要に応じて削除する必要があります

トークンリフレッシュのリスナー

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

トークンリフレッシュリスナーの登録は「Applicationクラス」で行ってください
本リスナーはApplicationを継承したクラスで登録する必要があります。Activityで登録すると、リスナー登録前にFCMイベントが完了してしまう可能性があるためご注意ください(setFCMNativeEventListenerも同様の制約)。
onRefreshToken()はアプリケーションのタスクが新規起動するたびに呼び出されます
  トークンが変わったときに同期を行う場合は、変わったことを検知できるようにトークンを独自に保存し、比較を行った上でregisterForceNotification()を呼ぶ必要があります

サウンド・バイブレーションのON/OFF

Android 8.0以降では、サウンド・バイブともに「通知チャンネルにてデフォルトでON」となります。Android 8.0未満では下記メソッドで制御可能ですが、現在は動作保証されていません。

bdashNotification.setEnableSound(true);      // サウンド有効
bdashNotification.setEnableVibration(true);  // バイブ有効
// false で無効化

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

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

Intent intent = getIntent();
int isNotification = intent.getIntExtra(BDashNotification.LAUNCH_NOTIFICATION, 0);
if (isNotification != 0) {
    String param = intent.getStringExtra(BDashNotification.LAUNCH_EXTRA_PARAM);
    if (param != null) {
        param = URLDecoder.decode(param, "UTF-8");  // URLデコード
        // 起動パラメーターを判断して画面遷移
    }
    // Tracking情報を生成
    Tracker.getInstance(this).setBootType(Tracker.BootType.BOOT_PUSH, param);
    Tracker.getInstance(this).setScreenName("任意のスクリーン名");
    Tracker.getInstance(this).send(new ScreenViewBuilder().build());
}

Push通知の実装における重要な注意事項

Push通知を利用するためには、b→dash SDKの導入が必須です
貴社の保持しているトークンを利用することはできません。Push通知を利用するにあたり、b→dash SDKを導入する主な理由は下記の2つです。
1. b→dash SDKを経由しないと配信対象者とみなされない: 通知受信可否の設定はSDKを通じて反映するため、SDKを導入しないとFCMトークンと受信可否の紐づけがb→dash上で行われず、配信ができません
2. 配信後の効果測定ができない: 配信後の開封確認など効果測定のためのログをSDKを通じて取得しているため、SDKがないと配信実績レポートが見れません
FCMトークンが変わった場合の挙動

FCM公式サイトによると、下記の場合に登録トークンが変更されることがあります。

● トークンが変更されるケース
 ・アプリによってインスタンスIDが削除される場合
 ・アプリが新しいデバイスで復元される場合
 ・ユーザーがアプリをアンインストール/再インストールする場合
 ・ユーザーがアプリのデータを消去する場合

トークンが更新されると内部ではonNewToken()が呼び出され、SDKでb→dashサーバーに自動連携されます。通信エラー発生時はリトライ処理は行われずonErrorが呼ばれ、BDashNativeSyncExceptionが設定されます。この場合はregisterNotification()またはregisterForceNotification()で手動同期する必要があります。

※ FCM 20.1.1以降にアップグレードされる場合、例外としてトークンが変わる事がありますのでご注意ください
Push通知が受信できない時の確認手順

下記のステップ順で確認してください。

1. Tracking.plist/manifestに設定している値が正しいか確認 - Pushが届かない場合で最も多い原因です
2. 設定した環境のライブラリを利用しているか確認 - 本番なのにSTGを設定しているケースなど
3. registerNotification()を呼び出した結果200ステータスが返り、トークンが出力されているか確認 - STG環境ではadb logcat/XCodeコンソールでログを確認可能。200が返らない場合はサーバーダウンの可能性
4. 3の結果onEnableが来ているか確認 - registerNotification()の引数に渡したクロージャーにコールバックされます
※ 各ステップに問題がないにも関わらず受信できない場合は、管理画面側の設定問題またはFCMサーバーダウンの可能性があります。FCMサーバーのステータスはGoogle公式ダッシュボードで確認できます