Android SDK インストール
本ドキュメントはAndroid版SDKの組み込み方に関するドキュメントです。
- Android Studio Ladybug Feature Drop | 2024.2.2
- Android SDK Version 35 (Android 15)
- Android Gradle Plugin 8.6.1
- Gradle 8.10.2
- Android OS 5.0以上
| OSバージョン | 状態 | 説明 |
|---|---|---|
| 4.1 (Jelly Bean) 以上 | ⚠️ 組み込み可能 | アプリはクラッシュしませんが、BeaconBankは動作しません |
| 4.4 (KitKat) 以上 | ⚡ 動作可能 | BeaconBankは動作しますが、サポート対象外です |
| 5.0 (Lollipop) 以上 | ✅ サポート対象 | 完全にサポートされています |
インストール手順
Section titled “インストール手順”1. Android Studioのインストール
Section titled “1. Android Studioのインストール”Android Studioを公式ページよりダウンロードします。
2. Android版SDKの配置
Section titled “2. Android版SDKの配置”- 「BeaconBank_SDK_forAndroid_x.x.x_product.zip」を展開し、sdkディレクトリを表示します。
- 「beaconbank-release.aar」というファイルがあるので、プロジェクトのlibsディレクトリに配置します。

3. gradleの設定
Section titled “3. gradleの設定”BeaconBank SDKで利用しているライブラリやビルドする時に利用するAPI Levelを設定します。
- project直下のbuild.gradleを編集します。
buildscript { ext.kotlin_version = '2.0.0' repositories {...} dependencies { // Gradle 8.7 classpath 'com.android.tools.build:gradle:8.6.1' // Kotlinで作成したライブラリのためKotlinを使えるようにする classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // 位置情報を取得する時に使用する classpath 'com.google.gms:google-services:4.3.15' }}- app直下のbuild.gradleを編集します。
// kotlinで作成したライブラリのためkotlinを使えるようにするapply plugin: 'kotlin-android'
android { compileSdk = 35 buildToolsVersion = '35.0.0' defaultConfig { .... minSdkVersion 16 // 利用するAndroid API Levelを設定します。(※) targetSdkVersion 35 .... } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' }}
repositories { flatDir { dirs 'libs' }}
dependencies { // libsディレクトリのaarファイルを読み込む implementation(name: 'beaconbank-release', ext: 'aar')
// 位置情報を使用するのに使用します implementation 'com.google.android.gms:play-services-location:21.0.1'
// adid(広告ID)を取得するのに使用します implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
// BeaconBank SDK内で使用しているライブラリです。 implementation "androidx.preference:preference-ktx:1.2.0" implementation "androidx.work:work-runtime-ktx:2.7.1" implementation "androidx.multidex:multidex:2.0.1" implementation 'androidx.lifecycle:lifecycle-process:2.5.1' implementation 'com.google.android.gms:play-services-appset:16.0.2'}- 35 (Android 15)以上の設定が可能です。
4. Applicationクラスの作成
Section titled “4. Applicationクラスの作成”Applicationクラスのサブクラスを作成し、BeaconBank SDKとアプリケーションのインターフェースを作成します。
また、作成したApplicationクラスでは、アプリ全体の設定も行います。
- Applicationクラスを作成し、IBbManagerインターフェイスを継承します。
public class CustomApplication extends Application implements IBbManager {}- BeaconBank SDKとアプリケーション間を連携するためのインターフェイスが自動生成されます。
public class CustomApplication extends Application implements IBbManager {
@Override public void didBeaconFound(long beaconId, int rssi, @NotNull List<GroupInfo> groups, @NotNull List<UserGroupInfo> userGroups, @NotNull List<ContentInfo> contents, @NotNull Map<String, String> attributes) { }
@Override public void didBeaconExit(long beaconId, @NotNull List<GroupInfo> groups, @NotNull List<UserGroupInfo> userGroups, @NotNull List<ContentInfo> contents) { }
@Override public void didUpdateLocations(@NotNull Location location) { }
@Override public void notification(ResultStatusCode code, @NotNull String message) { }}onCreateメソッドで、WebViewの設定を行います。
WebViewは、Cookieなどのデータを、特定のデータディレクトリに保存しています。
このデータディレクトリは、異なるプロセス間では共有されないようになっています。
そのため、アプリケーション、または、アプリケーションで利用しているSDKが、複数のプロセスで構成されており、かつ、複数のプロセスからWebViewを利用していると、アプリがクラッシュするなどの問題が発生します。
BeaconBank SDKは一部機能で、WebViewを利用しているため、この問題が発生する場合があります。
この問題を回避するために、WebViewのデータディレクトリをプロセスごとに異なるディレクトリとなるように設定を行う必要があります。
onCreate メソッドで、以下のような実装を行い、WebViewの設定を行なってください。
詳細は、Android 9の変更点 > Web-based data directories separated by processをご確認ください。
@Overridepublic void onCreate() { super.onCreate();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { String processName = getProcessName(); if (!getPackageName().equals(processName)) { WebView.setDataDirectorySuffix(processName); } }
// TODO: BeaconBankサービスの起動 ...}5. AndroidManifestの設定
Section titled “5. AndroidManifestの設定”AndroidManifest.xmlにパーミッション設定やBeaconBank SDK利用する上で必要な項目を追加します。
- パーミッションを追加します。使用用途については、以下の表を確認してください。
<manifest ...> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> ...</manifest>- アプリケーションクラスを変更します。
<manifest ...> <application android:name=".application.CustomApplication" ... > ... </application></manifest>- adid(広告ID)を取得するためにメタデータを設定します。
<manifest ...> <application ...> ... <meta-data android:name="com.google.android.gms.ads.AD_MANAGER_APP" android:value="true" /> ... </application></manifest>- 端末再起動時にBeaconBankサービスを起動させるためにレシーバを設定します。
<manifest ...> <application ...> ... <receiver android:name=".receiver.SampleReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> ... </application></manifest>パーミッションについて
Section titled “パーミッションについて”| パーミッション名 | 用途 |
|---|---|
| android.permission.INTERNET | BeaconBankサーバーとの通信で使用します。 |
| android.permission.ACCESS_NETWORK_STATE | BeaconBank SDK内部で通信状態を確認するために使用します。 |
| android.permission.BLUETOOTH | ビーコンスキャンするのに使用します。 |
| android.permission.BLUETOOTH_ADMIN | ビーコンスキャンするのに使用します。 |
| android.permission.ACCESS_FINE_LOCATION | ビーコンスキャンやジオフェンス等で使用します。 |
| android.permission.ACCESS_BACKGROUND_LOCATION | Android10以上でビーコンスキャン等をバックグラウンドで起動するために使用します。(targetSdkVersion >= 29) |
| android.permission.RECEIVE_BOOT_COMPLETED | 端末再起動時にBeaconBankサービスを起動させるために使用します。 |
| android.permission.BLUETOOTH_SCAN | ビーコンスキャンするのに使用します。 |
| android.permission.POST_NOTIFICATIONS | 通知を発行します。 |
| android.permission.FOREGROUND_SERVICE | ビーコンスキャンするのに使用します。フォアグラウンドサービスを利用する場合に必要です。 |
| android.permission.FOREGROUND_SERVICE_LOCATION | ビーコンスキャンするのに使用します。フォアグラウンドサービスを利用する場合に必要です。 |
6. パーミッションチェックの実装
Section titled “6. パーミッションチェックの実装”BeaconBank SDKの動作に必要なパーミッションをユーザーに要求する処理を実装します。
ここでは、targetSdkVersion毎に新たに必要となったパーミッションに絞って説明しています。
具体的な実装方法については、サンプルコードのMainActivity.ktを参考にしてください。
なお、サンプルコードではアプリ起動直後にまとめてパーミッション要求していますが、チュートリアル内や利用する直前にパーミッション要求した方が許可してくれる可能性が高くなります。
targetSdkVersion=33(Android 13)向け
Section titled “targetSdkVersion=33(Android 13)向け”targetSdkVersionが33以上のアプリの場合、通知を利用する際にユーザーの許諾が必要となりました。
アプリ側で下記2点の対応が必要です。
- AndroidManifest.xmlにpermission追加
- 権限リクエストの実装
公式ドキュメント:
https://developer.android.com/about/versions/13/changes/notification-permission?hl=ja
- AndroidManifest.xmlにpermission追加
android.permission.POST_NOTIFICATIONS を追加してください。
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application></manifest>- 権限リクエストの実装
POST_NOTIFICATIONSの許諾画面を実装してください。
String[] permissions = new String[]{Manifest.permission.POST_NOTIFICATIONS};ActivityCompat.requestPermissions(this, permissions, PERMISSIONS_REQUEST_BEACONBANK);targetSdkVersionが32以下のアプリの挙動
targetSdkVersionが32以下のアプリではPOST_NOTIFICATIONSの権限指定は不要です。
Android13環境でtargetSdkVersionが32以下のアプリを実行すると、最初に通知チャネルが作成された時点でOSが自動的に通知の許諾画面を表示します。
許諾画面の表示タイミングを制御したい場合は、targetSdkVersion=33として上記の対応を行なってください。
targetSdkVersion=31(Android 12)向け
Section titled “targetSdkVersion=31(Android 12)向け”Android 12から、targetSdkVersion=31でビルドしたアプリでは、ビーコンの検出にBLUETOOTH_SCANパーミッションが必要となりました。
AndroidManifest.xmlに android.permission.BLUETOOTH_SCAN を追加し、requestPermissionsで権限を要求するようにしてください。
- AndroidManifest.xmlにpermission追加
android.permission.BLUETOOTH_SCAN を追加してください。
<manifest ...> <uses-permission android:name="android.permission.BLUETOOTH_SCAN"/> <application ...> ... </application></manifest>- 権限リクエストの実装
BLUETOOTH_SCANの許諾画面を実装してください。
String[] permissions = new String[]{Manifest.permission.BLUETOOTH_SCAN};ActivityCompat.requestPermissions(this, permissions, PERMISSIONS_REQUEST_BEACONBANK);targetSdkVersion=30(Android 11)向け
Section titled “targetSdkVersion=30(Android 11)向け”Android 11からtargetSdkVersion=30でビルドしたアプリでは、位置情報パーミッションの要求でACCESS_FINE_LOCATIONパーミッションとACCESS_BACKGROUND_LOCATIONパーミッションを同時にリクエストすることが出来なくなりました。 ※詳細は公式ドキュメントを参照して下さい。
そのため、はじめにACCESS_FINE_LOCATIONパーミッションを要求してフォアグラウンドでの位置情報パーミッションを取得した後、任意のタイミングでACCESS_BACKGROUND_LOCATIONパーミッションを要求してシステム設定の位置情報設定ページに遷移し、ユーザーに「常に許可」を選択してもらう必要があります。
以下の実装例は解りやすさのためにUIやAndroid11未満の実装例を割愛しています。
SDK同梱のサンプルコードでは、より具体的な実装を行っていますので、そちらも参考にして下さい。
- フォアグラウンドの位置情報パーミッションチェックと要求部分を実装します。
public class SampleActivity extends AppCompatActivity {
private static final int PERMISSIONS_REQUEST_BEACONBANK = 1;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
// BeaconBank SDK管理用インスタンスを取得 bbManager = BbManager.getInstance(getApplicationContext());
// サンプルなので起動直後に実装していますが、適切な箇所で要求してください。 // サポートしているOSのみパーミッションチェックを行う(Android 4.4.3以上かつBLE対応) if (bbManager.isSupportOs()) { // 権限チェック&要求 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { // Android 11以降 boolean permissionFineLocation = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED; if (!permissionFineLocation) { Log.d(TAG, "権限なし");
// 権限がなかったら要求 String[] permissions = new String[]{Manifest.permission.ACCESS_FINE_LOCATION}; ActivityCompat.requestPermissions(this, permissions, PERMISSIONS_REQUEST_BEACONBANK); } else { Log.d(TAG, "権限あり"); // 利用規約表示 showBbTerms(); } } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // Android10以上 ... } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Android6〜9 ... } else { // Android5以下 ... } } }}バックグラウンドの位置情報パーミッションを同時に要求していない(できない)のでシステムダイアログには「常に許可」の選択肢は表示されません。

- パーミッション要求の結果を受け取る処理を実装します。
public class SampleActivity extends AppCompatActivity {
private static final int PERMISSIONS_REQUEST_BEACONBANK = 1;
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (PERMISSIONS_REQUEST_BEACONBANK == requestCode) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 許可された Log.d(TAG, "許可された"); } else { // 拒否された Log.d(TAG, "拒否された"); } showBbTerms(); // BeaconBank利用規約を表示 } }
}- 任意の画面 or タイミングでバックグラウンドの位置情報パーミッション要求部分を実装します。
public class SampleActivity extends AppCompatActivity implements View.OnClickListener {
private static final int PERMISSIONS_REQUEST_BACKGROUND = 2;
@Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_request_bg: Log.d(TAG, "onClick btn_request_bg");
// ここへ来るのはACCESS_FINE_LOCATIONが許可されている前提です。 // btn_request_bgはAndroid10以上でACCESS_FINE_LOCATIONが許可されている場合のみ表示されているものと読み取って下さい。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { String[] permissions = new String[]{Manifest.permission.ACCESS_BACKGROUND_LOCATION}; ActivityCompat.requestPermissions(this, permissions, PERMISSIONS_REQUEST_BACKGROUND); } break; } }}ActivityCompat.requestPermissions()を呼び出すとシステム設定の位置情報設定ページに遷移します。

- パーミッション要求の結果を受け取る処理を実装します。
public class SampleActivity extends AppCompatActivity {
private static final int PERMISSIONS_REQUEST_BACKGROUND = 2;
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) { case PERMISSIONS_REQUEST_BACKGROUND: { Log.d(TAG, "onRequestPermissionsResult PERMISSIONS_REQUEST_BACKGROUND results=" + grantResults[0]); if (grantResults[0] == PackageManager.PERMISSION_DENIED) { // 拒否された場合はshouldShowRequestPermissionRationaleの値をチェックします。 boolean shouldShowRequestPermissionRationale = ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_BACKGROUND_LOCATION); Log.d(TAG, "onRequestPermissionsResult shouldShowRequestPermissionRationale=" + shouldShowRequestPermissionRationale);
if (!shouldShowRequestPermissionRationale) { // falseの場合、次回ActivityCompat.requestPermissions()の呼び出しを行っても、システム設定画面には遷移せず、即時にPERMISSION_DENIEDが返されます。 // 必要に応じて、アプリ側のUIでシステム設定画面へ誘導する等の実装を行って下さい、 } } break; } } }}targetSdkVersion=29(Android 10)向け
Section titled “targetSdkVersion=29(Android 10)向け”
- パーミッションチェックと要求部分を実装します。
public class SampleActivity extends AppCompatActivity {
private static final int PERMISSIONS_REQUEST_BEACONBANK = 1;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // サンプルなので起動直後に実装していますが、適切な箇所で要求してください。 // サポートしているOSのみパーミッションチェックを行う(Android 4.4.3以上かつBLE対応) if (BbUtil.isSupportOs(getApplicationContext())) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // Android10以上 boolean permissionFineLocation = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
if (!permissionFineLocation) { Log.d(TAG, "権限なし");
// 権限がなかったら要求 String[] permissions = new String[]{ Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_BACKGROUND_LOCATION, }; ActivityCompat.requestPermissions(this, permissions, PERMISSIONS_REQUEST_BEACONBANK); } else { // ACCESS_BACKGROUND_LOCATIONパーミッションについて確認 boolean permissionBackgroundLocation = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_BACKGROUND_LOCATION) == PackageManager.PERMISSION_GRANTED; if (!permissionBackgroundLocation) { Log.d(TAG, "権限あり(アプリ使用中のみ許可)"); String[] permissions = new String[]{ Manifest.permission.ACCESS_BACKGROUND_LOCATION, }; ActivityCompat.requestPermissions(this, permissions, PERMISSIONS_REQUEST_BEACONBANK); } else { Log.d(TAG, "権限あり(常に許可)"); showBbTerms(); // BeaconBank利用規約を表示 } } } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Android6〜9 boolean permissionFineLocation = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
if (!permissionFineLocation) { Log.d(TAG, "権限なし");
// 権限がなかったら要求 String[] permissions = new String[]{ Manifest.permission.ACCESS_FINE_LOCATION, }; ActivityCompat.requestPermissions(this, permissions, PERMISSIONS_REQUEST_BEACONBANK); } else { Log.d(TAG, "権限あり"); showBbTerms(); // BeaconBank利用規約を表示 }
} else { // Android5以下 showBbTerms(); // BeaconBank利用規約を表示 } } }}- パーミッション要求の結果を受け取る処理を実装します。
public class SampleActivity extends AppCompatActivity {
private static final int PERMISSIONS_REQUEST_BEACONBANK = 1;
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (PERMISSIONS_REQUEST_BEACONBANK == requestCode) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 許可された Log.d(TAG, "許可された"); } else { // 拒否された Log.d(TAG, "拒否された"); } showBbTerms(); // BeaconBank利用規約を表示 } }
}targetSdkVersion=28(Android 9)向け
Section titled “targetSdkVersion=28(Android 9)向け”
- パーミッションチェックと要求部分を実装します。
public class SampleActivity extends AppCompatActivity {
private static final int PERMISSIONS_REQUEST_BEACONBANK = 1;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // サンプルなので起動直後に実装していますが、適切な箇所で要求してください。 // サポートしているOSのみパーミッションチェックを行う(Android 4.4.3以上かつBLE対応) if (BbUtil.isSupportOs(getApplicationContext())) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Android6以上 boolean permissionFineLocation = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
if (!permissionFineLocation) { Log.d(TAG, "権限なし");
// 権限がなかったら要求 String[] permissions = new String[]{ Manifest.permission.ACCESS_FINE_LOCATION, }; ActivityCompat.requestPermissions(this, permissions, PERMISSIONS_REQUEST_BEACONBANK); } else { Log.d(TAG, "権限あり"); showBbTerms(); // BeaconBank利用規約を表示 }
} else { // Android5以下 showBbTerms(); // BeaconBank利用規約を表示 } } }}- パーミッション要求の結果を受け取る処理を実装します。
public class SampleActivity extends AppCompatActivity {
private static final int PERMISSIONS_REQUEST_BEACONBANK = 1;
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (PERMISSIONS_REQUEST_BEACONBANK == requestCode) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 許可された Log.d(TAG, "許可された"); } else { // 拒否された Log.d(TAG, "拒否された"); } showBbTerms(); // BeaconBank利用規約を表示 } }
}7. 利用規約画面の表示
Section titled “7. 利用規約画面の表示”BeaconBank SDKでビーコンスキャンを行うには、ユーザーへのパーミッション確認と利用規約同意が必須です。
利用規約の文言設定
Section titled “利用規約の文言設定”利用規約は2部構成となっており、前半をアプリの利用規約、後半をBeaconBank SDK利用規約が表示されます。
前半のアプリの利用規約はBeaconBank管理ページより設定可能です。
- BeaconBank管理ページにアクセスし、ログインを行う。
- アプリ設定変更画面に遷移し、アプリ利用規約を設定し、「変更する」ボタンを押下する。

利用規約画面の表示
Section titled “利用規約画面の表示”パーミッション要求と同様に、サンプルアプリでは起動直後に表示させていますが、チュートリアルや利用直前に表示させるようにした方が同意してくれる可能性が高くなります。
bbManager.confirmTermsOfUse(this, true, true, true, null);| 引数 | 型 | 説明 |
|---|---|---|
| 第1引数 | Activity | Activityクラスのインスタンス |
| 第2引数 | Boolean | trueの場合、既に同意済みの場合は利用規約画面を表示しなくなります。 |
| 第3引数 | Boolean | trueの場合、「同意しない」ボタンを表示します。 |
| 第4引数 | Boolean | trueの場合、下までスクロールしないと「同意ボタン」を押せなくなります。 |
| 第5引数 | String | 最下部までスクロールする旨のポップアップ説明文の文言が設定できます。nullの場合はデフォルトのものが表示されます。 |

利用規約画面のイベント通知を受け取る
Section titled “利用規約画面のイベント通知を受け取る”IBbManagerのインターフェイスを実装したApplicationクラスのnotification()で受け取れます。
@Override public void notification(ResultStatusCode code, @NotNull String message) { Log.d(TAG, String.format("notification code:%d message:%s", code.getCode(), message)); switch (code) { case BB_TERMS_AGREED: { // 利用規約同意 break; } case BB_TERMS_NOTAGREED: { // 利用規約未同意 break; } default: {
} } }利用規約画面のカスタマイズ
Section titled “利用規約画面のカスタマイズ”assets/bbui.jsonを設置することで変更が可能です。
{ "terms": { "title_bg_color": "3F51B5", "title_text_color": "ffffff", "title_text_size": 18, "status_bar_bg_color": "303F9F", "agree_bg_color": "007aff", "agree_text_color": "000000", "not_agree_bg_color": "FF4081", "not_agree_text_color": "000000", "button_text_size": 16, "content_bg_color": "e0e0e0", "content_text_color": "000000", "content_text_size": 12, "scroll_text_color": "FFFFFF", "scroll_text_bg_color": "000000", "scroll_text_size": 14, "navigation_bar_bg_color": "000000" }, "rich_push": { "status_bar_bg_color": "878787", "close_bg_color": "8080ff", "close_text_color": "000000", "button_text_size": 16, "navigation_bar_bg_color": "000000" }}| オブジェクト名 | キー名 | 型 | 説明 | 例 |
|---|---|---|---|---|
| terms | title_bg_color | String | タイトル部分の背景色 | E0E0E0 |
| terms | title_text_color | String | タイトル部分の文字色 | 000000 |
| terms | title_text_size | int | タイトル部分の文字サイズ | 32 |
| terms | status_bar_bg_color | String | ステータスバーの背景色 | 303F9F |
| terms | agree_bg_color | String | 同意するボタンの背景色 | 8080ff |
| terms | agree_text_color | String | 同意するボタンの文字色 | 000000 |
| terms | not_agree_bg_color | String | 同意しないボタンの背景色 | a0a0a0 |
| terms | not_agree_text_color | String | 同意しないボタンの文字色 | 000000 |
| terms | button_text_size | int | ボタンの文字サイズ | 24 |
| terms | content_bg_color | String | 利用規約本文の背景色 | a0a0a0 |
| terms | content_text_color | String | 利用規約本文の文字色 | 000000 |
| terms | content_text_size | int | 利用規約本文の文字サイズ | 32 |
| terms | scroll_text_color | String | 利用規約スクロール説明ポップアップの背景色 | 000000 |
| terms | scroll_text_bg_color | String | 利用規約スクロール説明ポップアップの文字色 | ffffff |
| terms | scroll_text_size | int | 利用規約スクロール説明ポップアップの文字サイズ | 14 |
| terms | navigation_bar_bg_color | String | ナビゲーションバーの背景色 | 000000 |
※ カラーコードは16進6桁のRGB値を指定してください。
※ 文字サイズは1以上の数値を指定してください。
※ 指定のない項目、規定通りでない項目はデフォルト値が適用されます。
8. BeaconBankサービスの起動
Section titled “8. BeaconBankサービスの起動”- ApplicationクラスにonCreate()に処理を実装します。BbManagerクラスのインスタンス取得とSDKからのコールバックを受け取るための設定を行います。
// BeaconBankインスタンス取得bbManager = BbManager.getInstance(getApplicationContext());// BeaconBank SDKからのコールバック設定bbManager.delegate = this;- BeaconBankサービスを初期化します。
// BeaconBankサービスを初期化bbManager.initialize("API KEYを設定します");- BeaconBankSDKのプッシュ通知機能の利用を設定します。
// BeaconBank側でコンテンツ表示bbManager.isAutoNotifyBeaconContent = true;- フォアグラウンドサービスの設定を行います。
フォアグラウンドサービスを利用しない場合は、この設定は省略してください。
// フォアグラウンド、またはバックグラウンドサービスのどちらでモニタリングを行うかを設定します。if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Android 8 以降で、フォアグラウンドサービスを有効にする場合 bbManager.useForegroundServiceForAndroid8Later = true; // フォアグラウンドサービス
// フォアグラウンドサービスで起動する場合、サービス起動中に表示する通知を指定します。 bbManager.setNotification(createFgNotification());} else { // Android 7 以下で、フォアグラウンドサービスを有効にする場合 bbManager.isForeground = true; // フォアグラウンドサービス
// フォアグラウンドサービスで起動する場合、フォアグラウンド通知に表示するアイコンやメッセージを指定します。 bbManager.foregroundNotificationResId = R.drawable.ic_notification; // アイコンのリソースID bbManager.foregroundNotificationColor = Color.GREEN; // 通知のカラー SDK Ver 1.7.42~ bbManager.foregroundNotificationTitle = "ビーコンスキャン"; // 通知タイトル bbManager.foregroundNotificationMessage = "フォアグラウンドで起動中"; // 通知メッセージ bbManager.foregroundNotificationGroupKey = ""; // 通知のグループキー}Android 8 以降で、フォアグラウンドサービスを利用する場合、アプリ独自の通知を表示することができます。
以下のようなメソッドを実装し、BbManagerクラスのインスタンスに、作成したNotificationを渡してください。
private Notification createFgNotification() { NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); NotificationChannel channel = new NotificationChannel("APP_FGSERVICE_NOTIFICATION", "FGサービス用チャンネル", NotificationManager.IMPORTANCE_LOW); notificationManager.createNotificationChannel(channel);
Intent intent = new Intent(getApplicationContext(), MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity( getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
RemoteViews notificationLayout = new RemoteViews(getPackageName(), R.layout.fg_notification_custom); RemoteViews notificationLayoutExpanded = new RemoteViews(getPackageName(), R.layout.fg_notification_custom_expand);
return new NotificationCompat.Builder(getApplicationContext(), "APP_FGSERVICE_NOTIFICATION") .setSmallIcon(R.drawable.ic_notification) .setStyle(new NotificationCompat.DecoratedCustomViewStyle()) .setCustomContentView(notificationLayout) .setCustomBigContentView(notificationLayoutExpanded) .setContentIntent(pendingIntent) .setAutoCancel(true) .build();}- モニタリングを開始します。
// モニタリングを開始するbbManager.startMonitoring();BbManagerのパラメータ
Section titled “BbManagerのパラメータ”| パラメータ名 | 内容 | デフォルト値 |
|---|---|---|
| delegate | SDKからのコールバックを受け取るクラスを設定します。 | - |
| isAutoNotifyBeaconContent | ビーコンプッシュをSDKとアプリどちらで処理するかを設定します。trueの場合はSDKで表示、falseの場合はアプリ側で独自実装となります。 | false |
| useForegroundServiceForAndroid8Later | Android 8以上でビーコン検出をフォアグラウンドサービスで実行するかどうかを設定します。trueの場合は、フォアグラウンドサービスを使用します。falseの場合は、バックグラウンドでビーコンの検出を行います。 | false |
| isForeground | Android7以下でビーコン検出をフォアグラウンドサービス、またはバックグラウンドサービスどちらで検出するか設定します。trueの場合はフォアグラウンドサービス、falseの場合はバックグラウンドサービスとなります。 | false |
| foregroundNotificationResId | isForeground=trueの場合、設定してください。フォアグラウンドサービス通知に表示するアイコンのリソースIDを設定します。 | - |
| foregroundNotificationColor (SDK Ver 1.7.42~) | isForeground=trueの場合、設定してください。フォアグラウンドサービス通知のアクセントカラーの値を設定します。 | - |
| foregroundNotificationTitle | isForeground=trueの場合、設定してください。フォアグラウンドサービス通知に表示する通知タイトルを設定します。 | - |
| foregroundNotificationMessage | isForeground=trueの場合、設定してください。フォアグラウンドサービス通知に表示する通知メッセージを設定します。 | - |
| foregroundNotificationGroupKey | isForeground=trueの場合、設定してください。フォアグラウンドサービス通知のグループキーを設定します。 | - |

BeaconBankサービスの起動方式
Section titled “BeaconBankサービスの起動方式”| Androidバージョン | サービス起動方式 |
|---|---|
| 7.0以下 | フォアグラウンドサービス or バックグラウンドサービス |
| 8.0以上 | フォアグラウンドサービス or バックグラウンドサービス |
ユーザー識別子
Section titled “ユーザー識別子”BeaconBankでは、アプリの管理ID等を最大2個までBeaconBankのユーザー情報と紐付けすることが可能です。
どのタイミングでも設定が可能です。
bbManager.setExtraInfo("test", "android");また、アプリで設定しているユーザー識別子は、以下の方法で確認できます。
// setExtraInfo の第一引数で指定したユーザー識別子を取得するbbManager.getExtraInfo1();// setExtraInfo の第二引数で指定したユーザー識別子を取得するbbManager.getExtraInfo2();9. 通知周りの実装
Section titled “9. 通知周りの実装”通知チャンネルの設定
Section titled “通知チャンネルの設定”ビーコンプッシュやリモートプッシュ等の通知するために利用する通知チャンネルを作ります。
bbManager.createNotificationChannel("BeaconBank サンプルアプリ");引数に通知チャンネル名を設定します。
※ createNotificationChannelではSDK側で通知チャンネルの作成を行います。アプリ側で作成した通知チャンネルに通知を行いたい場合はcreateNotificationChannelを使わずにsetNotificationChannel(ver 1.7.15〜)を使用してください。
詳細はインターフェース仕様を参照してください。
通知オプションの設定
Section titled “通知オプションの設定”通知に表示されるsmall iconのリソースID
Section titled “通知に表示されるsmall iconのリソースID”bbManager.setNotificationSmallIconResId(R.drawable.ic_notification) // 任意の画像リソースID通知のカラー (SDK Ver 1.7.42~)
Section titled “通知のカラー (SDK Ver 1.7.42~)”通知のアクセントカラーを設定する場合は指定してください。
bbManager.setNotificationColor(Color.MAGENTA); // カラーの整数値通知のグループキー
Section titled “通知のグループキー”通知のグループ化を行う場合は指定してください。
bbManager.setNotificationGroupKey("GROUP_KEY")リッチプッシュ画面のUIカスタマイズ
Section titled “リッチプッシュ画面のUIカスタマイズ”通知コンテンツ設定でアプリ内WebViewでのコンテンツ表示ができます。利用規約画面同様assets/bbui.jsonを設置することでカスタマイズが可能です。
{ "terms": { "title_bg_color": "3F51B5", "title_text_color": "ffffff", "title_text_size": 18, "status_bar_bg_color": "303F9F", "agree_bg_color": "007aff", "agree_text_color": "000000", "not_agree_bg_color": "FF4081", "not_agree_text_color": "000000", "button_text_size": 16, "content_bg_color": "e0e0e0", "content_text_color": "000000", "content_text_size": 12, "scroll_text_color": "FFFFFF", "scroll_text_bg_color": "000000", "scroll_text_size": 14, "navigation_bar_bg_color": "000000" }, "rich_push": { "status_bar_bg_color": "878787", "close_bg_color": "8080ff", "close_text_color": "000000", "button_text_size": 16, "navigation_bar_bg_color": "000000" }}| オブジェクト名 | キー名 | 型 | 説明 | 例 |
|---|---|---|---|---|
| rich_push | status_bar_bg_color | String | ステータスバーの背景色 | 303F9F |
| rich_push | close_bg_color | String | 閉じるボタンの背景色 | E0E0E0 |
| rich_push | close_text_color | String | 閉じるボタンの文字色 | 000000 |
| rich_push | button_text_size | int | 閉じるボタンの文字サイズ | 32 |
| rich_push | navigation_bar_bg_color | String | ナビゲーションバーの背景色 | 000000 |
※ カラーコードは16進6桁のRGB値を指定してください。
※ 文字サイズは1以上の数値を指定してください。
※ 指定のない項目、規定通りでない項目はデフォルト値が適用されます。

通知のハンドリング
Section titled “通知のハンドリング”通知一覧からアプリが起動されると、コンテンツデータがランチャーアクティビティの起動インテントへ配信されます。
起動インテントをBbManagerのonReceiveNotificationIntentExtras()へ渡してください。
通知に設定されているリンク先URLが、アプリ内コンテンツ(URLスキーム)だった場合、アプリ側でURLを取得し、コンテンツを表示するようにしてください。
// アプリ内コンテンツの処理済みフラグのキー名public static final String IS_HANDLED_URI = "IS_HANDLED_URI";
// アプリ内コンテンツの処理済みフラグprivate boolean isHandledUri = false;
@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {
...
// 以前の状態から、通知で渡されたURLを処理したかという状態を復元する if (savedInstanceState != null) { if (savedInstanceState.getBoolean(IS_HANDLED_URI, false)) { isHandledUri = true; } }
Intent intent = getIntent();
// 通知から起動した場合、bbManagerへイベント通知する bbManager.onReceiveNotificationIntentExtras(this, intent.getExtras());
// 通知データから、設定されているURLを取得し、表示を行う final String dataString = intent.getDataString(); if (dataString != null && !dataString.isEmpty()) { final Uri uri = Uri.parse(dataString); if (uri != null && !isHandledUri) { // URLで指定されているコンテンツの表示を行う ...
// URLを表示したので処理済みのフラグを設定する isHandledUri = true; } }
...
}
@Overrideprotected void onNewIntent(Intent intent){ // 通知から起動した場合、bbManagerへイベント通知する bbManager.onReceiveNotificationIntentExtras(this, intent.getExtras());}
@Overrideprotected void onSaveInstanceState(@NonNull Bundle savedInstanceState) { // アプリ内コンテンツの処理済みフラグを保存する savedInstanceState.putBoolean(IS_HANDLED_URI, isHandledUri);}10. 難読化の除外設定
Section titled “10. 難読化の除外設定”リリースビルド等でアプリの圧縮、難読化、最適化を行う場合はSDKで使用しているライブラリなどの除外設定が必要です。
proguard-rules.proファイルに以下の除外設定を追加して下さい。
-keep class jp.beaconbank.manager.notification.** { *; }
-keep class jp.beaconbank.activity.** { *; }-keep class jp.beaconbank.logic.ui.** { *; }
-keep class jp.beaconbank.worker.api.** { *; }