システム要件
測位情報を受信できない端末では SDK の測位だけが動作せず、アプリはそのまま動作します。
ただし
initialize はキー・通信エラーを、session.begin() は非対応端末エラーを投げるため、下のサンプルのように try/catch(Java は onError)で受け取ってください。
SDK のインストール
1
settings.gradle(.kts) に Maven Central リポジトリを追加します。settings.gradle.kts
2
アプリモジュールのビルドファイルに OneS1ght SDK を追加します。
3
JVM target のバージョンと
BuildConfig オプションを確認します。JVM は 1.8 以上を推奨します。Android 権限設定
測位に必要な権限は、SDK のマニフェストがアプリに自動でマージします。
ランタイム権限は
requestPermission(activity) 1 回でまとめてリクエストします。すでに許可済みならダイアログなしで即座に返り、
initialize の前にも呼べます。ユーザーが拒否するか 30 秒以内に応答しない場合は
DENIED です。システムがダイアログを表示しなくなった場合は、設定アプリへ案内してください。
SDK の初期化
測位エンジンを稼働させるための初期化を開始します。プロフィール
ユーザー(アカウントまたは端末)1 人の動線はプロフィール単位で管理されます。プロフィール ID は一意で、紛失すると復元できないため保管に注意してください。
プロフィールの作成
新しいプロフィールを作成するとプロフィール ID が返ります。属性はレポート・指標のセグメントとして使われ、Key-Value に制約はありません。発行された ID はアプリ(または自社サーバー)に保管し、起動のたびに測位前に
identify で紐付けます。
プロフィール情報の取得
プロフィール ID から、保存されたパーソナライズ属性を取得します。プロフィール情報の更新
パーソナライズ属性はまるごと置き換えられます。更新後、以前の値は削除され、元に戻せません。プロフィールの削除
パーソナライズ属性を削除します。削除した属性は元に戻せません。建物・フロアの選択
測位座標を受信するには、ロケーターが設置された建物とフロアを選択する必要があります。BLE 受信で選択
SDK の測位エンジンがロケーターの BLE 信号からフロアを検出すると、onFloorDetected にフロア ID が届きます。フロアを見失うと
null が届きます。
手動で選択
ユーザーにフロアを選ばせる場合や、測位前に地図を先に描画する場合は、建物とフロアを直接指定します。リアルタイム測位情報の受信
floorSession() で測位セッションを取得し、begin() で開始、end() で終了します。位置は
onPosition で受け取り、座標(メートル)はエンジンが出す速度のまま届きます。サーバーへはコンソールの設定値(デフォルトは毎秒 4 回)に間引いて送信されます。
begin() は権限を得てから呼んでください。権限なしで呼ぶとエラーなしで開始しますが、座標は届かず E2003 が記録されます。測位中に再度呼んだ
begin() は無視(WARN ログ)されるため、ユーザーが権限を許可したら end() を呼んでから begin() を呼び直してください。ゾーンイベント
コンソールの空間管理で描いたゾーンの進入・退出・滞在イベントを受け取ります。判定は端末内で行われるため、すぐに届きます。ゾーンに紐付いた施策(クーポン・サイネージなど)はサーバーがマッチングし、
onTriggers で届きます。
ゾーン情報の更新
コンソールでゾーン情報が変わるとonConfigChanged が呼ばれます。連続して届く場合は 1 秒ほどまとめて、refreshZones() を 1 回だけ呼びます。
図面の表示
ロケーターに紐付く図面と、ユーザーの現在位置を表示できます。図面を設定しない場合、背景はグリッドで表示されます。
その他のオプション
データ送信の制御
座標は 300 件たまるか、前回の送信から 60 秒経過すると自動で送信されます。ただし、アプリが強制終了されると座標は破棄されます。セッションのリセット
セッションを破棄して測位を止め、保存された SDK キーと建物情報(setFloorMap の建物)を消去します。新しいセッションは作りません。その後はほとんどの API が
SdkError.NotInitialized(E1001)を投げるため、initialize を再度呼んでください。実行中にキーを切り替えるときに使います。identify で紐づけたプロフィールは残ります。
測位終了時の処理
測位エンジンが終了するとonStopped イベントが発生し、測位可能な状態へ戻せます。
対応端末の確認
deviceAvailability はネットワーク(インターネット)接続なしで即時に確認できます。ただしチップの確認にアプリの
Context が必要なため、initialize()(または requestPermission(activity))の後に読んでください。それより前に読むと Android 17 以上の端末でも
DEVICE_NOT_SUPPORTED が返り、onDebugLog に WARN が残ります(Android 17 未満は常に OS_VERSION_TOO_LOW)。
付録
Java から使う
すべての非同期 API は、同じ名前で 2 つの形を提供します。- 戻り値のない API は
Callback<Void>を使います。 - イベントコールバック(
ZoneListener・PositionListenerなど)はfun interfaceなので、Java のラムダでそのまま登録します —session.setOnZoneEnter(zone -> …)。 - 状態値は getter で読みます —
OneS1ght.isInitialized()、OneS1ght.getDeviceAvailability()、session.isRunning()。 - コールバックプロパティは setter で登録します —
session.setOnStopped(…)、OneS1ght.setOnDebugLog(…)。 - Java アプリは
compileOptionsを 1.8 以上にすればよく、Kotlin の設定は不要です。
デバッグログ
デバッグログを確認するには、SDK の初期化(initialize)の直前に登録してください。ログは Android Studio の Logcat(フィルター
tag:OneS1ght)または adb で確認できます。
adb で取得する場合
トラブルシューティング
エラーコード
開発中に発生するエラーの内容を案内します。