本記事では、b→dash mobile SDKをReact Nativeプロジェクトに導入する方法について紹介しています。
導入手順は、大きく下記の4つです。
各手順の詳細は、以下をご参照ください。
b→dash mobile SDK(ReactNative用)の推奨環境と動作環境は、下記のとおりです。
区分 |
ReactNative |
推奨環境 |
0.60.5 |
動作環境 |
0.60.5 |
区分 |
iOS |
Xcode |
Swift |
Objective-C |
推奨環境 |
10.0以上 |
12.1 |
4.0, 4.2, 5.3 |
2.0 |
動作環境 |
10.0以上 |
12.1, 12.2, 12.3 |
4.0, 4.2, 5.3 |
2.0 |
区分 |
Android |
言語 |
Android Studio |
推奨環境 |
5.0以上 |
OpenJDK・JDK8, Kotlin |
3.6.3以上 |
動作環境 |
5.0以上 |
OpenJDK・JDK7,8 |
3.4.x〜3.6.3 |
ビルド環境は、下記のとおりです。
区分 |
minSdkVersion |
compileSdkVersion |
targetSdkVersion |
ビルド環境 |
19 |
28 |
28 |
本SDKの計測は、下記のプラットフォームで動作確認を行っております。
ReactNativeプロジェクトへのSDK導入手順と、Expoを利用しているプロジェクトの追加対応について説明します。
b→dash mobile SDKは「BDash-Mobile-ReactNativeSDK_vX.X.X.zip」内に各種ファイルが格納されています。zip内の各ファイルは下記の用途で利用されます。
ファイル名称 |
説明 |
BDashTrackerModule.js |
SDKの「トラッキング機能」を利用するためのJavaScript-Nativeのブリッジクラス |
BDashNotificationModule.js |
SDKの「Push通知」を利用するためのJavaScript-Nativeのブリッジクラス |
BDashNotificationService.js |
SDKの「Push通知のメッセージ受信やON/OFF状態」を受け取るためのJavaScript-Nativeのブリッジクラス |
BDashWebReceptionView.js |
SDKの「アプリ接客機能」を利用するためのJavaScript-Nativeのブリッジクラス |
SDKを導入する手順は、下記のとおりです。
1.「BDash-Mobile-ReactNativeSDK_vX.X.X.zip」を展開し、「src」フォルダごとReactNativeプロジェクトのTOP階層に配置します。
2. SDKの「トラッキング機能」を利用するJavaScriptファイルで、下記のimportを実施します。
import BDashTrackerSDK from './src/bdash/BDashTrackerModule';
b→dash SDKはネイティブ用のSDKのため、Expoプロジェクトにそのままでは組み込むことができません。Expoプロジェクトでは、下記の手順でejectを行う必要があります。ejectを行うことで、XcodeやAndroid Studio上からネイティブSDKのビルドを行えるようになります。
1.プロジェクトのバックアップを行ったうえで、Windowsの場合はコマンドプロンプト、Macの場合はターミナルを立ち上げます。下記コマンドを実行し、プロジェクトのディレクトリに移動します。
cd [対象のExpoプロジェクト]
ls -la

2. プロジェクトに移動したことを確認したら、下記コマンドを実行してejectを行います。
expo eject
実行すると、Androidのパッケージ名、続いてiOSのバンドル名の入力を求められることがあります。画面内容に沿って入力を行います。処理が完了するまでに数分かかるので、完了するまで待ちます。

3. 下記コマンドを実行してプロジェクト構成を確認します。
ls -la
新しくAndroidとiOSのディレクトリが作成されているのを確認できます。それぞれのディレクトリが各プラットフォームの「ネイティブのビルド環境」となります。AndroidはAndroid Studio、iOSはXcodeを利用してプロジェクトを開き、本記事の「3. iOSの環境設定を行う」「4. Androidの環境設定を行う」に従ってSDKの導入を行ってください。

XcodeプロジェクトへのSDKの設置、AppDelegateへのコード追加、プロパティリストの設定、各種サービスとの連携について説明します。
b→dash mobile SDK(iOS分)は「BDash-Mobile-ReactNativeSDK_vX.X.X.zip」内に各種ファイルが格納されています。zip内の各ファイルとその利用機能(ログ取得/Push通知/アプリ接客)の対応は、下記の折りたたみをご参照ください。
ファイル名称 |
概要 |
ログ取得 |
Push通知 |
アプリ接客 |
| Tracker.swift | Swift言語で書かれたSDK本体 | ○ |
○ |
○ |
| tracking.plist | SDKの定義ファイル | ○ |
○ |
○ |
| BDashTrackerModule.h BDashTrackerModule.m |
JavaScriptからSDKのTracking機能を呼び出すためのObjective-C Bridgeクラス | ○ |
○ |
○ |
| BDashMobileSDK.h BDashMobileSDK.m |
SDKの処理を呼び出すためのクラス | ○ |
○ |
○ |
| BDashMobileSDK.xcdatamodeld | SDK内部で使用するDBモデル | ○ |
○ |
○ |
| BDashNotificationService.h BDashNotificationService.m |
JavaScriptへの通知を設定するためのクラス | ○ |
○ |
○ |
| BDashNotificationModule.h BDashNotificationModule.m |
JavaScriptからSDKのPush機能を呼び出すためのObjective-C Bridgeクラス | - |
○ |
- |
| BDashWebReceptionManager.h BDashWebReceptionManager.m |
JavaScriptからSDKのアプリ接客機能を呼び出すためのObjective-C Bridgeクラス | - |
- |
○ |
| BDashWebReceptionManagePopup.h BDashWebReceptionManagePopup.m |
アプリ接客機能のPopup画面 | - |
- |
○ |
| BDashWebReception.swift | Swift言語で書かれたSDK本体 | - |
- |
○ |
| jp_co_f-scratch_closebutton.png | アプリ接客で利用するリソース画像 | - |
- |
○ |
プロジェクトファイル(xcodeproj)と同じ階層に、b→dash mobile SDKフォルダごと格納します。SDKパッケージ内のファイルはSwift言語のバージョンごとに分かれています。組み込むと下記のような画面になります。

利用ケースに応じて、下記の方針でSwiftバージョンを選択してください。
続いて、Xcodeでの組み込み手順は下記のとおりです。
1. Xcodeのプロジェクトのナビゲータエリア内の任意の場所を右クリックし、「Add Files to "ターゲット名"」をクリックします。SDKファイルを選択し「Add」をクリックします。
2. Tracker.swiftのみを選択し、「Add」をタップします。
3. 再度ナビゲータエリア内のプロジェクトフォルダを右クリックし、「Add Files to "ターゲット名"」をクリックします。
4. 「BDashSDK」フォルダを選択し「Add」をクリックします。
5. 「BDashSDK」フォルダに、下記のファイルを移動します。
・Tracker.swift
・Bridging-Header.h(プロジェクトの使用言語が「Objective-C」の場合)

#import "【プロジェクト名】-Swift.h"アプリ作成時に自動で生成されるAppDelegateクラスに対して、「BDash-Mobile-SDK_vX.X.X.zip」内に同梱されている「AppDelegate.swift」の必要部分のソースコードのコピーを行います。
SDKの初期化を実施するため、下記のコードを追加してください(Objective-Cの場合)。
#import "BDashMobileSDK.h"
〜 省略
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
〜 省略
// SDKの初期化コードを追加
[BDashMobileSDK initSDK];
〜 省略
}
追加コード①(Push通知から起動された場合のJavaScript連携)
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
withCompletionHandler:(void (^)(void))completionHandler {
〜 省略
[BDashMobileSDK checkNotification:response.notification.request.content.userInfo isActive:NO];
〜 省略
}
追加コード②(Push通知から起動された場合のJavaScript連携)
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
willPresentNotification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
〜 省略
[BDashMobileSDK checkNotification:notification.request.content.userInfo isActive:YES];
〜 省略
}
追加コード③(applicationWillEnterForegroundでの処理)
#import "BDashNotificationService.h"
〜 省略
- (void)applicationWillEnterForeground:(UIApplication *)application {
if (!BDashNotification.alreadyDisplayDialogBox) {
return;
}
[[BDashNotification getInstance] applicationWillEnterForeground:^(NSString * _Nonnull type, BOOL isNotificationToJS) {
if (type == BDashNotification.ERROR) {
NSLog(@"-- response error --")
}
[BDashMobileSDK checkForeground];
if (isNotificationToJS) {
[BDashNotificationService.sharedManager sendWithType:type];
}
}];
}
iOS9以下をサポートする場合の追加コード
- (void)application:(UIApplication*) application didReceiveRemoteNotification:(NSDictionary*)userInfo {
[BDashMobileSDK checkNotification_iOS9:userInfo fetchCompletionHandler:^(UIBackgroundFetchResult a){}];
}
- (void)application:(UIApplication*) application didReceiveRemoteNotification:(NSDictionary*)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
[BDashMobileSDK checkNotification_iOS9:userInfo fetchCompletionHandler:completionHandler];
通知設定の取得のための追加コード
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings: (UIUserNotificationSettings
*)notificationSettings{
〜 省略
[[BDashNotification getInstance] didRegisterUserNotificationSettings:notificationSettings];
}
デバイストークン取得のための追加コード
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData
*)deviceToken {
〜 省略
[[BDashNotification getInstance] didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
アプリがアクティブ時にアイコンバッジをクリアする場合の追加コード
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
if (application.applicationState != UIApplicationStateActive
|| application.applicationIconBadgeNumber != 0) {
application.applicationIconBadgeNumber = 0;
[application cancelLocalNotification:notification];
}
}
b→dash mobile SDKの設定ファイル(プロパティリスト)である「tracking.plist」に対して、下記3つの設定値を入力します。
Plist属性名 |
値の内容 |
| APP_BDASH_APP_ID | 貴社カスタマーサクセス担当より連絡しますので、その値を入力してください |
| APP_BDASH_ACCOUNT_ID | 貴社カスタマーサクセス担当より連絡しますので、その値を入力してください |
| APP_BDASH_APP_GROUP_ID | リッチ通知で利用するAPP GROUP IDです。貴社のAppleDeveloperで設定した値を入力してください |
設定の手順は、下記のとおりです。
1. Xcodeのプロジェクトのナビゲータエリア内に表示される「tracking.plist」をクリックします。
2. tracking.plist内に、上記の設定値を入力します。

3.「BDashNotificationService」からも設定値を読み取れるように、Target Membership欄にある「BDashNotificationService」にチェックを入れます。

b→dash mobile SDKを利用するために必要な、CocoaPodsとFirebase Cloud Messaging(FCM)の連携手順を説明します。
下記バージョンの「CocoaPods」と「Firebase Cloud Messaging(FCM)」をインストールします。
## Podfile への導入例
pod 'Firebase/Core','5.19.0'
pod 'Firebase/Messaging','5.19.0'
Push通知を利用するためには、Firebase Consoleにて「サーバーキー」を発行する必要があります。また、証明書である「.p12」または「.p8」ファイルをFirebase Consoleに登録する必要があります。登録手順については、公式ドキュメントをご参照ください。

続いて、下記の手順でFirebase構成ファイルとXcodeの設定を行います。
1. Xcodeのプロジェクトのナビゲータエリア内の任意の場所を右クリックし、「Add Files to "ターゲット名"」をクリックします。「GoogleService-Info.plist」を選択し「Add」をクリックします。
2. Xcodeのプロジェクト設定を開き、Capabilitiesから「Push Notification」をONにします。
3. プロジェクト内の「Info.plist」に「FirebaseAppDelegateProxyEnabled(Boolean)」のプロパティを追加し、バリューに「NO」を設定します。

外部ライブラリの確認、SDKインストール、Push通知設定、SDKが生成するディレクトリ構成について説明します。
下記が、利用している外部ライブラリの一覧です。
外部ライブラリ名 |
使用用途 |
| play-services-ads-identifier | 広告ID("advertising ID")を利用するため |
| FCM(※1, ※2, ※3) | Firebase Cloud Messaging for Androidを利用するため |
| AndroidX(※4) | OSの互換性の開発に必要なため |
| GSON〜v2.8.5〜(※5) | SDKの基盤に必要なため |
b→dash mobile SDKでは「AndroidX」を利用しています。サポートライブラリはビルドが通らないため、下記の手順でAndroidXへのアップデートを行ってください。
1. build.gradleでcompileSdkVersionを28以降にします(実際の設定値は、最新の環境に合わせてください)。
<app/build.gradle>
android{
compileSdkVersion 28
..
}
2. build.gradleでgradle pluginを3.2.0以降にします。
<build.gradle>
dependencies{
classpath 'com.android.tools.build:gradle:3.2.0'
}
3. 上部メニューの「Refactor → Migrate to AndroidX」を選択すると移行が開始します。

実行するとgradle.propertiesに下記内容が自動的に設定されます。
android.enableJetifier=true
android.useAndroidX=true
b→dash mobile SDKをAndroidアプリケーションへインストールする手順を説明します。
付属のZIPファイルを展開し、付属のsrcディレクトリをAndroid Studio上の「JAVAパッケージ」の直下にDrag & Dropを行い組み込みます。下記はパッケージ名が「com.example.test.mytest」の場合の組み込み例です。

b→dash mobile SDKのコンパイルに必要な設定を、プロジェクトのbuild.gradleに追加します。下記はAndroid Studio 3.6.3以降のサンプルコードです。
repositories{
flatDir{
dirs 'libs'
}
}
dependencies {
… 省略 …{
implementation(name:'bdash-mobile-sdk', ext:'aar')
implementation 'com.google.android.gms:play-services-ads-identifier:17.0.0'
// Push通知を利用する場合は必須
implementation 'com.google.firebase.gms:firebase-messaging:20.2.4'
// AndroidX を利用. 「Android5 環境でのバグについて」もご確認ください
implementation 'androidx.appcompat:appcompat:1.2.0'
}
apply plugin: 'com.google.gms.google-services'
Android Studio 3以降からAndroidXのバージョンが異なるとクラッシュ警告が表記されるようになりました。アプリですでに利用しているバージョンを優先させるには、下記のようにgradleに記載します。
configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'androidx.core') {
details.useVersion '【利用バージョンを指定します】'
}
}
}
SDKの初期化とJS側への連携を行うために、プロジェクトに下記のコードを追加します。
import com.f_scratch.bdash.mobile.react.BDashPackage;
import com.f_scratch.bdash.mobile.react.BDashMobileSDK;
public class TrackerApplication extends Application
implements ReactApplication {
public void onCreate(){
super.onCreate();
… 省略
// b→dash SDK の初期化関数を呼び出します
BDashMobileSDK.initSDK(this);
}
@Override
protected List getPackages() {
List packages = new PackageList(this).getPackages();
… 省略
packages.add(new BDashPackage());
return packages;
}
}
Push通知、アプリ接客を行う場合は、MainActivityに下記のコードを追加します。MainActivityはマニフェストで <action android:name="android.intent.action.MAIN" /> を設定しているアクティビティです。React Nativeのデフォルト設定ではMainActivityに設定されています。
public class MainActivity extends ReactActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Push通知を利用する場合は、下記を設定します。
BDashMobileSDK.checkPushNotification(this, getReactNativeHost());
// Web接客 を利用する場合は、下記を設定します。
BDashMobileSDK.setMainActivity(this);
}
b→dash mobile SDKの動作に必要な設定を、AndroidManifest.xmlに追加します。<application>の前に、下記のパーミッションの設定を追加します。
パーミッション |
Protection Level |
概要 |
| INTERNET | normal |
b→dash mobile SDKが通信を行うために必要となります |
| ACCESS_NETWORK_STATE | normal |
b→dash mobile SDKが通信可能かを確認するために必要となります |
| VIBRATE | normal |
b→dash mobile SDKがPush通知を行う際に必要となります(Push通知を利用しない場合は不要) |
| WAKE_LOCK | normal |
SDK v2.6.0以降のご利用の場合は必要ありません |
下記はパラメーターの記載例です。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
本SDKをAndroid9以降かつAPIレベル28以上で正しく動作させるには、AndroidManifest.xmlに下記を記載する必要があります。
<uses-library android:name="org.apache.http.legacy" android:required="false" />
こちらはDefaultHttpClient利用時に「ClassCastExceptionが発生する問題」を延命する処置です。SDK動作自体には問題ありませんが、今後のバージョンアップで改修する予定です。
続いて、b→dash mobile SDKの実行に必要な下記の<meta-data>を、manifestの<application>内に追加します。
パラメーター |
値 |
| APP_BDASH_ACCOUNT_ID | 貴社カスタマーサクセス担当より連絡しますので、その値を入力してください |
| APP_BDASH_APP_ID | 貴社カスタマーサクセス担当より連絡しますので、その値を入力してください |
<meta-data android:name="APP_BDASH_ACCOUNT_ID"
android:value="カスタマーサクセス担当より連絡しますので、その値を入力してください。" />
<meta-data android:name="APP_BDASH_APP_ID"
android:value="カスタマーサクセス担当より連絡しますので、その値を入力してください。" />
Proguardを使って難読化される場合は、アプリケーションのappディレクトリにあるproguard-project.txtまたはproguard-rules.proに下記の設定を追加してください。本SDKのパッケージは「com.f_scratch.bdash.mobile.analytics」となっており、難読化は対象外の設定とします。
-keep class com.f_scratch.bdash.mobile.analytics.**{
*;
}
Push通知を利用する場合は、下記の設定を行います。
Push通知を利用するにはGoogleアカウントが必要となりますので事前にご用意ください。また、Firebase Consoleにて「サーバーキー」を発行しておく必要があります。詳細は公式ドキュメントをご参照ください。
Firebase Consoleにて任意のプロジェクトを作成し、ダウンロードしたgoogle-services.jsonをプロジェクトのappディレクトリに組み込みます。

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

下記はパラメーターの設定例です。「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 × height) |
ldpi |
18 × 18 |
mdpi |
24 × 24 |
hdpi |
36 × 36 |
xhdpi |
48 × 48 |
xxhdpi |
72 × 72 |
xxxhdpi |
96 × 96 |
通知チャンネルを有効にするためには、下記の設定をmanifestで定義します。
パラメーター名 |
値 |
| 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 | 【オプション】通知の重要度を以下の定数で指定します(デフォルト値はhigh) high / default / low / min / none |
Android版では組み込みの「Push通知の設定画面」を用意しています。APIレベル26(Android 8.0)以降は「通知チャンネル」が導入されたため、本機能はAndroid7.0以下で利用することを想定しています。Android 8.0については、「アプリ設定」の通知設定で切り替えます。
デザインテーマはBDashSDK_Theme、BDashSDK_Theme.gray、BDashSDK_Theme.greenの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);
Push通知の受信処理に独自のペイロード解析を行っている場合、Androidでは「FirebaseMessagingService」クラスを継承し実装することになります。b→dash Mobile 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>
フック処理を実装し「メッセージ種別」によって処理するメソッドを分けます。サンプルコードは下記のとおりです。
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);
}
}
導入されるアプリケーションの[パッケージ名]以下に、SDKは下記の構成で「フォルダ/ファイル」を生成します。