Skip to main content

システム要件

測位情報を受信できない端末では 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 のような機微な情報を入れないでください。
年代("20s")のように個人を特定できない値だけを入れます。

プロフィール情報の取得

プロフィール 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 で取得する場合

トラブルシューティング

エラーコード

開発中に発生するエラーの内容を案内します。