Skip to main content

システム要件

測位情報を受信できない端末では SDK が動作を停止し、稼働中のアプリには影響しません。

SDK のインストール

1
Xcode で [File] → [Add Package Dependencies…] を実行します。
2
左上の検索欄に以下の URL を入力します。
3
Dependency Rule を Up to Next Major Version にし、値を 0.2.2 に設定します。
4
[Add Package] を押して OneS1ght ライブラリをアプリターゲットに追加します。

iOS 権限設定

Info.plist に以下 5 つの権限説明文を 1 つも欠かさず設定します。 Xcode でアプリターゲットの [Info] タブの一覧に追加します。
1

String キー 4 つ

行にマウスを重ねると表示される [+] を押し、Key にキー名、Value に説明文を入力します。Type は String です。
2

Dictionary キー 1 つ

NSLocationTemporaryUsageDescriptionDictionary は 2 段構成です。
  1. [+] → Key にキー名を入力 → Type を Dictionary に変更します(Value は空のままにします)。
  2. 行の左の ▸ を開き、その行で [+] → Key に Positioning、Type を String、Value に説明文を入力します。
3

確認

一覧に 5 項目がすべて表示されれば完了です。セクションの見出しが Custom macOS Application Target Properties と表示されていても問題ありません。
Value に入れる説明文は以下の <string> の値をそのまま使えます。Xcode の画面ではなくファイルに直接書く方法は付録を参照してください。
Info.plist

SDK の初期化

SDK を初期化すると、SDK 内部のエンジンを実行できるようになります。 Objective-C ブリッジは同名のメソッドで、結果を completion ブロックで返します。
ブリッジのコールバック(onPosition・onZoneEnter・onFloorDetected・onConfigChanged・onStopped など)は initialize が成功した後に登録してください。それより前に登録しても何も起きません(onDebugLog は例外)。

プロフィール

ユーザー(アカウントまたは端末)1 人の動線はプロフィール単位で管理されます。
プロフィール ID は一意で、紛失すると復元できないため保管に注意してください。

プロフィールの作成

新しいプロフィールを作成するとプロフィール ID が返ります。属性はレポート・指標のセグメントとして使われ、Key-Value に制約はありません。
発行された ID はアプリ(または自社サーバー)に保管し、起動のたびに測位前に identify で紐付けます。
プロフィール属性に氏名・電話番号・会員 ID のような機微な情報を入れないでください。
年代("20s")のように個人を特定できない値だけを入れます。

プロフィール情報の取得

プロフィール ID から、保存されたパーソナライズ属性を取得します。

プロフィール情報の更新

パーソナライズ属性はまるごと置き換えられます。更新後、以前の値は削除され、元に戻せません。

プロフィールの削除

パーソナライズ属性を削除します。削除した属性は元に戻せません。

建物・フロアの選択

フロアの指定は任意です。指定しなくても、測位エンジンがロケーターの BLE 信号からフロアを見つけて座標を送ります。
ただし、ゾーンイベントを受け取るにはフロアの指定が必要です(ゾーンイベントを参照)。

BLE 受信で選択

SDK の測位エンジンがロケーターの BLE 信号からフロアを検出すると、onFloorDetected にフロア ID が届きます。
フロアを見失うと nil が届きます。

手動で選択

ユーザーにフロアを選ばせる場合や、測位前に地図を先に描画する場合は、建物とフロアを直接指定します。

リアルタイム測位情報の受信

floorSession() で測位セッションを取得し、begin() で開始、end() で終了します。
位置は onPosition で受け取り、座標(メートル)はエンジンが出す頻度のまま届きます。
サーバーへ送る座標だけが、コンソール設定の頻度(既定は毎秒 4 回)に間引かれます。

ゾーンイベント

コンソールの空間管理で描いたゾーンの進入・退出・滞在イベントを受け取ります。判定は端末内で行われるため、すぐに届きます。
ゾーンに紐付いた施策(クーポン・サイネージなど)はサーバーがマッチングし、onTriggers で届きます。
ゾーン一覧は setFloorMap で指定したフロアから取得します。フロアを指定しないとゾーンが空になり、onZoneEnter・onZoneExit は届かず E3009 が記録されます。

ゾーン情報の更新

コンソールでゾーン情報が変わると onConfigChanged が呼ばれます。SDK は呼び出し回数を間引きません。
ゾーンを再取得するたびに進入・退出の判定が最初からやり直しになるため、続けて届く通知はアプリ側で 1 秒ほどまとめて 1 回だけ処理してください。

図面の表示

ロケーターに紐付く図面と、ユーザーの現在位置を表示できます。
図面を設定しない場合、背景はグリッドで表示されます。

その他のオプション

データ送信の制御

座標は 300 件たまったとき、および begin() から 60 秒ごとに自動で送信されます(300 件の送信で 60 秒の周期がリセットされることはありません)。
バックグラウンドへの移行時と end() のときも残りの座標を送信します。ただし、アプリが強制終了されると座標は破棄されます。

セッションのリセット

測位を止めてセッションを破棄します。保存されたキーも消えるため、initialize を再度呼ぶまで API は notInitialized エラーになります。
アプリを再ビルドせずに別のキーへ切り替えるときに使います。

測位終了時の処理

測位エンジンが終了すると onStopped イベントが発生し、測位可能な状態へ戻せます。

対応端末の確認

deviceAvailability はネットワーク(インターネット)接続なしで即時に確認でき、
測位に対応しない端末でもアプリの動作には影響しません。

付録

Info.plist に直接書く

Xcode の [Info] タブに表示される一覧は、実際には Info.plist というファイルの内容です。最近の Xcode で作成したプロジェクトはこのファイルを 表示せず、ビルド時に Xcode が自動生成するため、直接書くにはまずファイルを作る必要があります。 Dictionary キーを入れる途中で Xcode が終了してしまう場合も、この方法で追加できます。
1

ファイルの有無を確認

左のプロジェクトナビゲーターに Info.plist が表示されていれば、手順 3 へ進みます。
2

ファイルを作成

[File] → [New] → [File from Template…] で Property List を選び、名前を Info.plist、保存先をアプリターゲットのフォルダーにします。 次に [Build Settings] タブで Info.plist File を検索し、値に ターゲット名/Info.plist を入れます。 Generate Info.plist File は Yes のままにします — Xcode が自動生成項目とこのファイルを統合します。
3

XML を貼り付け

Info.plist を右クリック → Open As → Source Code で開き、iOS 権限設定の XML を <dict> と </dict> の間に貼り付けます。

権限のリクエスト(Nearby Interaction)

ロケーターの測位情報は Apple の Nearby Interaction を使用します。requestPermission() はシステムの権限ダイアログを表示し、許可するかどうかはユーザーが決めます。
一度拒否されるとアプリから再度リクエストできないため、設定アプリで権限をオンにするよう案内してください。

位置情報の常時許可

iOS 27.2 以降では、フロアを検出するには位置情報のアクセス権限が**「常に」**である必要があります(BLE ビーコン領域の検出)。iOS 27.1 以前は「アプリの使用中のみ」で足ります。
SDK は「常に」をリクエストしません。権限がなくても SDK は起動しますが、フロアを見つけられません。ユーザーが拒否した場合は設定アプリへ案内してください。

デバッグログ

デバッグログを確認するには、SDK の初期化(initialize)の直前に登録してください。
下記のように print で出力したログは Xcode のデバッグコンソールで確認できます。

トラブルシューティング

エラーコード

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