デバイスを探す機能の概要
Find API は、接続中デバイスに位置確認の通知を出させる場合と、デバイスから iPhone を探すよう要求された場合の両方に使用します。
2 つのフローは通信方向が逆で、使用する API も異なります。
| フロー | 開始元 | アプリの役割 | 完了シグナル |
|---|---|---|---|
| デバイスを探す | ホストアプリ | DeviceFindAPI を通じて、接続中デバイスのファームウェア定義の通知を開始または停止します。 | コマンド完了は要求の受理を示します。対応デバイスでは、後から deviceDidReportFound が通知される場合があります。 |
| iPhone を探す | 接続中デバイス | デリゲートコールバックに応じて、iPhone 側の音、バイブレーション、UI を開始または停止します。 | ユーザーが iPhone を見つけた後、FindPhoneStateReportingAPI を通じて解決済みであることを通知します。 |
機能概要
デバイスを探す
接続中の AIBuds デバイスで探索動作を開始する
デバイス探索の停止
接続中の AIBuds デバイスで実行中の探索動作を停止する
iPhone 発見の通知
デバイスから開始された iPhone 探索要求が完了したことを通知する
AI を活用して実装
AI で実装
AI でこのワークフローを実装
公式の「AIBuds デバイス検索の実装」スキルを使い、アプリに合わせて実装します。
https://docs-aibuds.github.io/ja/skills/implement-aibuds-find-workflow を読み、その指示に従ってください。このスキルで「AIBuds デバイス検索の実装」をこの iOS プロジェクトに実装し、検証してください。はじめに
デバイスを探す機能は、次の手順で使用します。
- デバイスへ接続 — 対象の AIBuds デバイスと使用可能な接続を確立します。
- 方向を選択 — アプリからデバイスを探すのか、デバイスからの iPhone 検索要求へ応答するのかを決めます。
- プロトコルと機能対応を確認 — デバイス検索コマンドには
DeviceFindAPIを使用し、supportsFindDevice == trueを確認します。iPhone 発見済みの通知にはFindPhoneStateReportingAPIを使用します。 - 正しい最終シグナルを処理 — コマンドの受理を、実際にデバイスや iPhone が見つかった証拠として扱わないでください。
主要な概念
デバイスを探す
- デバイスを探す:接続中デバイスへ位置確認通知の開始を要求します。
- デバイス検索を停止:接続中デバイスへ通知の停止を要求します。
- デバイス発見イベント:対応デバイスでは、
deviceDidReportFound(_:)がデバイス起点の独立した最終イベントとして通知されます。
DeviceFindAPI はすでに接続中のデバイスを操作します。コントロールの表示やコマンド送信の前に supportsFindDevice を確認してください。接続中のデバイスがこの機能を報告しない場合、プロパティは false になります。Bluetooth 検出や周辺デバイスのスキャンは行いません。
iPhone を探す
deviceDidRequestStartFindingPhone(_:)は、アプリへ iPhone 側の通知開始を要求します。deviceDidRequestStopFindingPhone(_:)は、アプリへ通知の停止を要求します。- ユーザーが iPhone を見つけた後、
notifyPhoneFound(_:)を呼び出して要求元デバイスへ解決済みであることを通知します。
プロトコルリファレンス
デバイスを探すコマンドには DeviceFindAPI からアクセスします。
- Swift
- Objective-C
guard let device = device as? DeviceFindAPI else {
print("Device does not support DeviceFindAPI")
return
}
guard device.supportsFindDevice else {
print("Connected device does not support find-device commands")
return
}id<AIBudsDeviceFindAPI> device = (id<AIBudsDeviceFindAPI>)self.device;
if (![device conformsToProtocol:@protocol(AIBudsDeviceFindAPI)]) {
NSLog(@"Device does not support AIBudsDeviceFindAPI");
return;
}
if (!device.supportsFindDevice) {
NSLog(@"Connected device does not support find-device commands");
return;
}反対方向となる iPhone 検索フローでは、デバイス起点の要求を受けた後に FindPhoneStateReportingAPI を使用します。
- Swift
- Objective-C
guard let reporter = device as? FindPhoneStateReportingAPI else {
print("Device cannot receive an iPhone-found report")
return
}id<AIBudsFindPhoneStateReportingAPI> reporter =
(id<AIBudsFindPhoneStateReportingAPI>)self.device;
if (![reporter conformsToProtocol:@protocol(AIBudsFindPhoneStateReportingAPI)]) {
NSLog(@"Device cannot receive an iPhone-found report");
return;
}ベストプラクティス
- 方向を区別:iPhone 側の通知実装に
DeviceFindAPIを使用しないでください。 - プロトコルと機能対応を確認:選択したフローに必要なプロトコルを確認し、デバイス検索コントロールを表示する前に
supportsFindDeviceを確認します。 - 受理と発見を区別:完了成功はコマンド処理を示すだけで、対象が実際に見つかったことまでは示しません。
- 停止手段を用意:実行中のデバイスまたは iPhone の通知をユーザーが停止できるようにします。
- メインキューで UI を更新:コールバックから行う UIKit の変更はメインキューへディスパッチします。
注意事項
- デバイス検索コマンドの実行中は、対象デバイスが接続済みで到達可能な状態を維持する必要があります。
- デバイス側の音、バイブレーション、その他の通知動作はファームウェアで定義されます。
- iPhone 検索要求で使用する iPhone 側の音、バイブレーション、UI はアプリが管理します。
supportsFindDevice == falseは、機能が非対応である場合と、デバイスが機能情報を報告していない場合の両方を表します。- どちらのプロトコルも、確定的な実行状態や継続時間のプロパティを公開していません。