コンテンツにスキップ

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) 以上✅ サポート対象完全にサポートされています

Android Studioを公式ページよりダウンロードします。

  1. 「BeaconBank_SDK_forAndroid_x.x.x_product.zip」を展開し、sdkディレクトリを表示します。
  2. 「beaconbank-release.aar」というファイルがあるので、プロジェクトのlibsディレクトリに配置します。

Android版SDKの配置

BeaconBank SDKで利用しているライブラリやビルドする時に利用するAPI Levelを設定します。

  1. 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'
}
}
  1. 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)以上の設定が可能です。

Applicationクラスのサブクラスを作成し、BeaconBank SDKとアプリケーションのインターフェースを作成します。
また、作成したApplicationクラスでは、アプリ全体の設定も行います。

  1. Applicationクラスを作成し、IBbManagerインターフェイスを継承します。
public class CustomApplication extends Application implements IBbManager {
}
  1. 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) {
}
}
  1. onCreate メソッドで、WebViewの設定を行います。

WebViewは、Cookieなどのデータを、特定のデータディレクトリに保存しています。
このデータディレクトリは、異なるプロセス間では共有されないようになっています。
そのため、アプリケーション、または、アプリケーションで利用しているSDKが、複数のプロセスで構成されており、かつ、複数のプロセスからWebViewを利用していると、アプリがクラッシュするなどの問題が発生します。
BeaconBank SDKは一部機能で、WebViewを利用しているため、この問題が発生する場合があります。
この問題を回避するために、WebViewのデータディレクトリをプロセスごとに異なるディレクトリとなるように設定を行う必要があります。
onCreate メソッドで、以下のような実装を行い、WebViewの設定を行なってください。
詳細は、Android 9の変更点 > Web-based data directories separated by processをご確認ください。

@Override
public 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サービスの起動
...
}

AndroidManifest.xmlにパーミッション設定やBeaconBank SDK利用する上で必要な項目を追加します。

  1. パーミッションを追加します。使用用途については、以下の表を確認してください。
<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>
  1. アプリケーションクラスを変更します。
<manifest ...>
<application
android:name=".application.CustomApplication"
... >
...
</application>
</manifest>
  1. adid(広告ID)を取得するためにメタデータを設定します。
<manifest ...>
<application ...>
...
<meta-data
android:name="com.google.android.gms.ads.AD_MANAGER_APP"
android:value="true" />
...
</application>
</manifest>
  1. 端末再起動時に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>
パーミッション名用途
android.permission.INTERNETBeaconBankサーバーとの通信で使用します。
android.permission.ACCESS_NETWORK_STATEBeaconBank SDK内部で通信状態を確認するために使用します。
android.permission.BLUETOOTHビーコンスキャンするのに使用します。
android.permission.BLUETOOTH_ADMINビーコンスキャンするのに使用します。
android.permission.ACCESS_FINE_LOCATIONビーコンスキャンやジオフェンス等で使用します。
android.permission.ACCESS_BACKGROUND_LOCATIONAndroid10以上でビーコンスキャン等をバックグラウンドで起動するために使用します。(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以上のアプリの場合、通知を利用する際にユーザーの許諾が必要となりました。
アプリ側で下記2点の対応が必要です。

  • AndroidManifest.xmlにpermission追加
  • 権限リクエストの実装

公式ドキュメント:
https://developer.android.com/about/versions/13/changes/notification-permission?hl=ja

  1. AndroidManifest.xmlにpermission追加

android.permission.POST_NOTIFICATIONS を追加してください。

<manifest ...>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<application ...>
...
</application>
</manifest>
  1. 権限リクエストの実装

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として上記の対応を行なってください。

Android 12から、targetSdkVersion=31でビルドしたアプリでは、ビーコンの検出にBLUETOOTH_SCANパーミッションが必要となりました。
AndroidManifest.xmlに android.permission.BLUETOOTH_SCAN を追加し、requestPermissionsで権限を要求するようにしてください。

  1. AndroidManifest.xmlにpermission追加

android.permission.BLUETOOTH_SCAN を追加してください。

<manifest ...>
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
<application ...>
...
</application>
</manifest>
  1. 権限リクエストの実装

BLUETOOTH_SCANの許諾画面を実装してください。

String[] permissions = new String[]{Manifest.permission.BLUETOOTH_SCAN};
ActivityCompat.requestPermissions(this, permissions, PERMISSIONS_REQUEST_BEACONBANK);

Android 11からtargetSdkVersion=30でビルドしたアプリでは、位置情報パーミッションの要求でACCESS_FINE_LOCATIONパーミッションとACCESS_BACKGROUND_LOCATIONパーミッションを同時にリクエストすることが出来なくなりました。 ※詳細は公式ドキュメントを参照して下さい。

そのため、はじめにACCESS_FINE_LOCATIONパーミッションを要求してフォアグラウンドでの位置情報パーミッションを取得した後、任意のタイミングでACCESS_BACKGROUND_LOCATIONパーミッションを要求してシステム設定の位置情報設定ページに遷移し、ユーザーに「常に許可」を選択してもらう必要があります。

以下の実装例は解りやすさのためにUIやAndroid11未満の実装例を割愛しています。
SDK同梱のサンプルコードでは、より具体的な実装を行っていますので、そちらも参考にして下さい。

  1. フォアグラウンドの位置情報パーミッションチェックと要求部分を実装します。
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以下
...
}
}
}
}

バックグラウンドの位置情報パーミッションを同時に要求していない(できない)のでシステムダイアログには「常に許可」の選択肢は表示されません。

パーミッションの許可ダイアログ SDK 30

  1. パーミッション要求の結果を受け取る処理を実装します。
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利用規約を表示
}
}
}
  1. 任意の画面 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()を呼び出すとシステム設定の位置情報設定ページに遷移します。

設定アプリの権限画面

  1. パーミッション要求の結果を受け取る処理を実装します。
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;
}
}
}
}

パーミッションの許可ダイアログ SDK 29

  1. パーミッションチェックと要求部分を実装します。
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利用規約を表示
}
}
}
}
  1. パーミッション要求の結果を受け取る処理を実装します。
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利用規約を表示
}
}
}

パーミッションの許可ダイアログ SDK 28

  1. パーミッションチェックと要求部分を実装します。
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利用規約を表示
}
}
}
}
  1. パーミッション要求の結果を受け取る処理を実装します。
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利用規約を表示
}
}
}

BeaconBank SDKでビーコンスキャンを行うには、ユーザーへのパーミッション確認と利用規約同意が必須です。

利用規約は2部構成となっており、前半をアプリの利用規約、後半をBeaconBank SDK利用規約が表示されます。
前半のアプリの利用規約はBeaconBank管理ページより設定可能です。

  1. BeaconBank管理ページにアクセスし、ログインを行う。
  2. アプリ設定変更画面に遷移し、アプリ利用規約を設定し、「変更する」ボタンを押下する。

利用規約文言の設定

パーミッション要求と同様に、サンプルアプリでは起動直後に表示させていますが、チュートリアルや利用直前に表示させるようにした方が同意してくれる可能性が高くなります。

bbManager.confirmTermsOfUse(this, true, true, true, null);
引数説明
第1引数ActivityActivityクラスのインスタンス
第2引数Booleantrueの場合、既に同意済みの場合は利用規約画面を表示しなくなります。
第3引数Booleantrueの場合、「同意しない」ボタンを表示します。
第4引数Booleantrueの場合、下までスクロールしないと「同意ボタン」を押せなくなります。
第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: {
}
}
}

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"
}
}
オブジェクト名キー名説明
termstitle_bg_colorStringタイトル部分の背景色E0E0E0
termstitle_text_colorStringタイトル部分の文字色000000
termstitle_text_sizeintタイトル部分の文字サイズ32
termsstatus_bar_bg_colorStringステータスバーの背景色303F9F
termsagree_bg_colorString同意するボタンの背景色8080ff
termsagree_text_colorString同意するボタンの文字色000000
termsnot_agree_bg_colorString同意しないボタンの背景色a0a0a0
termsnot_agree_text_colorString同意しないボタンの文字色000000
termsbutton_text_sizeintボタンの文字サイズ24
termscontent_bg_colorString利用規約本文の背景色a0a0a0
termscontent_text_colorString利用規約本文の文字色000000
termscontent_text_sizeint利用規約本文の文字サイズ32
termsscroll_text_colorString利用規約スクロール説明ポップアップの背景色000000
termsscroll_text_bg_colorString利用規約スクロール説明ポップアップの文字色ffffff
termsscroll_text_sizeint利用規約スクロール説明ポップアップの文字サイズ14
termsnavigation_bar_bg_colorStringナビゲーションバーの背景色000000

※ カラーコードは16進6桁のRGB値を指定してください。
※ 文字サイズは1以上の数値を指定してください。
※ 指定のない項目、規定通りでない項目はデフォルト値が適用されます。

  1. ApplicationクラスにonCreate()に処理を実装します。BbManagerクラスのインスタンス取得とSDKからのコールバックを受け取るための設定を行います。
// BeaconBankインスタンス取得
bbManager = BbManager.getInstance(getApplicationContext());
// BeaconBank SDKからのコールバック設定
bbManager.delegate = this;
  1. BeaconBankサービスを初期化します。
// BeaconBankサービスを初期化
bbManager.initialize("API KEYを設定します");
  1. BeaconBankSDKのプッシュ通知機能の利用を設定します。
// BeaconBank側でコンテンツ表示
bbManager.isAutoNotifyBeaconContent = true;
  1. フォアグラウンドサービスの設定を行います。
    フォアグラウンドサービスを利用しない場合は、この設定は省略してください。
// フォアグラウンド、またはバックグラウンドサービスのどちらでモニタリングを行うかを設定します。
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();
}
  1. モニタリングを開始します。
// モニタリングを開始する
bbManager.startMonitoring();
パラメータ名内容デフォルト値
delegateSDKからのコールバックを受け取るクラスを設定します。-
isAutoNotifyBeaconContentビーコンプッシュをSDKとアプリどちらで処理するかを設定します。trueの場合はSDKで表示、falseの場合はアプリ側で独自実装となります。false
useForegroundServiceForAndroid8LaterAndroid 8以上でビーコン検出をフォアグラウンドサービスで実行するかどうかを設定します。trueの場合は、フォアグラウンドサービスを使用します。falseの場合は、バックグラウンドでビーコンの検出を行います。false
isForegroundAndroid7以下でビーコン検出をフォアグラウンドサービス、またはバックグラウンドサービスどちらで検出するか設定します。trueの場合はフォアグラウンドサービス、falseの場合はバックグラウンドサービスとなります。false
foregroundNotificationResIdisForeground=trueの場合、設定してください。フォアグラウンドサービス通知に表示するアイコンのリソースIDを設定します。-
foregroundNotificationColor (SDK Ver 1.7.42~)isForeground=trueの場合、設定してください。フォアグラウンドサービス通知のアクセントカラーの値を設定します。-
foregroundNotificationTitleisForeground=trueの場合、設定してください。フォアグラウンドサービス通知に表示する通知タイトルを設定します。-
foregroundNotificationMessageisForeground=trueの場合、設定してください。フォアグラウンドサービス通知に表示する通知メッセージを設定します。-
foregroundNotificationGroupKeyisForeground=trueの場合、設定してください。フォアグラウンドサービス通知のグループキーを設定します。-

BeaconBankサービスの起動

Androidバージョンサービス起動方式
7.0以下フォアグラウンドサービス or バックグラウンドサービス
8.0以上フォアグラウンドサービス or バックグラウンドサービス

BeaconBankでは、アプリの管理ID等を最大2個までBeaconBankのユーザー情報と紐付けすることが可能です。
どのタイミングでも設定が可能です。

bbManager.setExtraInfo("test", "android");

また、アプリで設定しているユーザー識別子は、以下の方法で確認できます。

// setExtraInfo の第一引数で指定したユーザー識別子を取得する
bbManager.getExtraInfo1();
// setExtraInfo の第二引数で指定したユーザー識別子を取得する
bbManager.getExtraInfo2();

ビーコンプッシュやリモートプッシュ等の通知するために利用する通知チャンネルを作ります。

bbManager.createNotificationChannel("BeaconBank サンプルアプリ");

引数に通知チャンネル名を設定します。

※ createNotificationChannelではSDK側で通知チャンネルの作成を行います。アプリ側で作成した通知チャンネルに通知を行いたい場合はcreateNotificationChannelを使わずにsetNotificationChannel(ver 1.7.15〜)を使用してください。
詳細はインターフェース仕様を参照してください。

通知に表示されるsmall iconのリソースID
Section titled “通知に表示されるsmall iconのリソースID”
bbManager.setNotificationSmallIconResId(R.drawable.ic_notification) // 任意の画像リソースID

通知のアクセントカラーを設定する場合は指定してください。

bbManager.setNotificationColor(Color.MAGENTA); // カラーの整数値

通知のグループ化を行う場合は指定してください。

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_pushstatus_bar_bg_colorStringステータスバーの背景色303F9F
rich_pushclose_bg_colorString閉じるボタンの背景色E0E0E0
rich_pushclose_text_colorString閉じるボタンの文字色000000
rich_pushbutton_text_sizeint閉じるボタンの文字サイズ32
rich_pushnavigation_bar_bg_colorStringナビゲーションバーの背景色000000

※ カラーコードは16進6桁のRGB値を指定してください。
※ 文字サイズは1以上の数値を指定してください。
※ 指定のない項目、規定通りでない項目はデフォルト値が適用されます。

BeaconBankサービスの起動

通知一覧からアプリが起動されると、コンテンツデータがランチャーアクティビティの起動インテントへ配信されます。
起動インテントをBbManagerのonReceiveNotificationIntentExtras()へ渡してください。

通知に設定されているリンク先URLが、アプリ内コンテンツ(URLスキーム)だった場合、アプリ側でURLを取得し、コンテンツを表示するようにしてください。

MainActivity.java
// アプリ内コンテンツの処理済みフラグのキー名
public static final String IS_HANDLED_URI = "IS_HANDLED_URI";
// アプリ内コンテンツの処理済みフラグ
private boolean isHandledUri = false;
@Override
public 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;
}
}
...
}
@Override
protected void onNewIntent(Intent intent){
// 通知から起動した場合、bbManagerへイベント通知する
bbManager.onReceiveNotificationIntentExtras(this, intent.getExtras());
}
@Override
protected void onSaveInstanceState(@NonNull Bundle savedInstanceState) {
// アプリ内コンテンツの処理済みフラグを保存する
savedInstanceState.putBoolean(IS_HANDLED_URI, isHandledUri);
}

リリースビルド等でアプリの圧縮、難読化、最適化を行う場合は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.** { *; }