ハイライト
Apple Watch は Core Bluetooth を介して外部アクセサリと通信し、Bluetooth デバイスがバックグラウンドで機能の変更を検出して継続的に監視し、コンプリケーションを通じてデータを定期的に表示し、最終的にユーザーにタイムリーなローカル通知を送信できるようにします。
主要内容
Apple WatchはiPhoneとは異なります。手首に装着し、電力を節約する必要があり、背景の制限が厳しくなります。
しかし、ユーザーは、異常な血糖値、過剰な心拍数、ドアのロックが開いていることなど、手首のデバイスが Bluetooth アクセサリからリアルタイムのリマインダーを受信できることを望んでいます。これらのリマインダーは、ユーザーがアプリを開くまで待つことはできず、積極的にプッシュする必要があります。
このセッションでは、合併症の定期的なデータ更新、バックグラウンドでの周辺機器の検出、機能変更の監視という 3 つの主要なテクノロジーについて説明しました。 3 つを組み合わせると、watchOS 上の Bluetooth アクセサリをリアルタイムにリマインダーするための完全なリンクが形成されます。
詳細
機能通知を介して Bluetooth データをリッスンする
(03:41) Bluetooth アクセサリは、GATT プロトコルを通じてデータを整理します。サービスは機能のグループ化であり、特性は実際のデータ ポイントです。アクセサリに新しいデータがある場合、機能通知を通じて Apple Watch に積極的にプッシュできます。
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
peripheral.setNotifyValue(true, for: characteristic)
}
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
if let newData = characteristic.value {
// Post a local notification.
}
}
キーポイント:
didDiscoverCharacteristicsForサービスの下で特性を発見した後にトリガーされます。 -setNotifyValue(true, for:)この機能の通知をオンにすると、新しいデータが利用可能になったときにアクセサリがプッシュ通知を送信できるようになります。 -didUpdateValueFor特徴量が更新されたときに呼び出されます。 -characteristic.value私が得たのはDataタイプはアクセサリ プロトコルに従って解析する必要があります。- 有効なデータを取得した後、ローカル通知をトリガーして、ユーザーにリマインダーを表示させることができます。
中心となるアイデアは非常に単純です。機能通知をサブスクライブし、データを受信した後にローカル通知を送信します。ユーザーはアプリを開く必要がなく、リマインダーが自動的に手首に表示されます。
バックグラウンド周辺機器の検出
(09:15) watchOS での Bluetooth スキャンは、iOS の場合のように無計画に行うことはできません。フォアグラウンド スキャンはバッテリーに影響し、バックグラウンド スキャンはさらに制限されます。セッションは戦略を提供します。接続が成功した後、再度スキャンして、システムが適切なタイミングで他のアクセサリを検出できるようにします。
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
central.scanForPeripherals(withServices: [myCustomUUID])
}
キーポイント:
didConnect周辺機器への接続が成功した後にトリガーされます。- 接続が成功した直後に、指定されたサービス UUID でフィルタリングして新しいスキャンを開始します。
- 着信
myCustomUUID不必要な電力消費を削減するために、特定のサービスを備えた周辺機器のみをスキャンします。 - この「接続してから次をスキャンする」戦略は、watchOS のバックグラウンド制限に適しています。
Apple Watch では常にスキャンをオンにすることはできません。より良いアプローチは、接続したいサービスを把握し、適切なタイミング (接続が成功した後など) で制限付きスキャンを開始することです。システムはスキャン ウィンドウを管理して、検出のニーズとバッテリー寿命のバランスをとります。
合併症の定期的なデータ表示
Session は具体的なコードを提供しませんでしたが、定期的なデータ入力としての合併症の役割について話しました。
Bluetooth アクセサリのデータは、5 分ごとの血糖検査や 1 時間ごとの周囲温度の更新など、まれに変更されることがあります。合併症はこのシナリオに適しています。システムはタイムラインに従ってデータを要求し、最新の読み取り値が文字盤に表示されます。アクセサリが Core Bluetooth を通じてデータを更新すると、アプリは合併症のタイムラインを更新し、ユーザーは手首を上げた瞬間に最新の値を確認できます。
キーポイント:
- 合併症のデータはタイムライン エントリによって駆動されます。
- Bluetooth データが更新されるたびに呼び出されます
CLKComplicationServerのreloadTimelineウォッチフェイスを更新します。 - タイムラインが密になりすぎてはなりません。システムには更新頻度に制限があるため、エントリ間隔を合理的に設定することをお勧めします。
- 機能通知と組み合わせる: 新しいデータの受信 -> ローカル キャッシュの更新 -> 合併症タイムラインの更新 -> ローカル通知の送信。
これら 3 つのステップは閉ループを形成します: アクセサリがデータをプッシュ -> コンプリケーションが最新の値を表示 -> 主要なイベントが通知をトリガーします。ユーザーは能動的に操作する必要がなく、データは自動的に手首に流れます。
重要ポイント
1. ポーリングの代わりに機能通知を使用する
- 対処法: Apple Watch に定期的にデータを問い合わせさせる代わりに、Bluetooth アクセサリが GATT 通知経由でデータをアクティブにプッシュできるようにします。
- 実行する価値がある理由: ポーリングにより Bluetooth モジュールが頻繁に起動され、大量の電力が消費されます。通知メカニズムにより、データの準備ができたときにアクセサリを送信できるため、電力が節約され、よりリアルタイムになります。
- 開始方法: アクセサリ側で GATT 通知を実装し、アプリ側で呼び出します
setNotifyValue(true, for:)サブスクリプション。データを受信したら、まずリマインドする価値があるかどうかを判断(閾値判定)し、通知するかどうかを決定します。
2. バックグラウンド スキャンを「オンデマンド検出」として設計する
- 対処法: 周辺機器のスキャンを続けないでください。限定スキャンは、アクセサリが接続された後、またはユーザーによって明示的に要求された場合に開始されます。
- 実行する価値がある理由: watchOS はバックグラウンド スキャンに関して iOS よりも厳格であり、継続的なスキャンはバッテリーをすぐに消費し、システムによって終了される可能性があります。
- 開始方法:
didConnectコールバックで呼び出されるscanForPeripherals(withServices:)、既知のサービス UUID を渡します。接続が成功した後、スキャンを停止できます。
3. 合併症をデータ転送ステーションにしましょう
- 操作方法: Bluetooth アクセサリの定期的なデータを合併症を通じて文字盤に表示します。
- 価値がある理由: ユーザーは手首を上げると、アプリを開く必要がなく、最新の測定値を確認できます。コンプリケーションのリフレッシュ リズムは、当然ながら低周波のセンサー データに適しています。
- 開始方法: Core Bluetooth のデータ コールバックでローカル キャッシュを更新してから、
reloadTimeline合併症をリフレッシュします。タイムライン項目間の間隔を合理的に設定し、システム制限を超えないようにしてください。
4. アクセサリ設計ガイドを読む
- やるべきこと: Bluetooth アクセサリを設計する前に、Apple のアクセサリ設計ガイドラインをお読みください。
- 実行する価値がある理由: この文書では、Bluetooth の動作、消費電力要件、およびアクセサリの相互作用モードを指定します。事前に調整しておくことで、レビューの拒否やユーザー エクスペリエンスの低下を回避できます。
- 開始方法: [アクセサリ設計ガイドライン](https://developer.apple.com/accessories/ Accessories-Design-guideline.pdf) から開始し、watchOS 関連の章に焦点を当てます。
関連セッション
- Core Bluetooth の新機能 - Core Bluetooth フレームワークの最新の変更について説明します。
- HealthKit の新機能 - Bluetooth 健康アクセサリからのデータは最終的に HealthKit に送られ、その最新の API について学びます。
- Apple Watch 用ワークアウト アプリを構築する — watchOS エクササイズ アプリを構築し、バックグラウンド ランニング モードとデータ収集リンクを理解します。
コメント
GitHub Issues · utterances