ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
サードパーティ製アクセサリとのNearbyインタラクション
U1を搭載したデバイスでAppを実行したときに、サードパーティのUltra Wideband(UWB)アクセサリとインタラクションする方法を紹介します。ここでは、Nearby Interactionフレームワークの標準ベース技術を使用して、正確で方向性を意識した体験をアクセサリに実装する方法を説明します。開発キット、サンプルコード、仕様書など、アクセサリやAppの開発を始めるためのリソース、サポート対象のテクノロジープロバイダについて確認します。 Nearbyインタラクションについて詳しく知りたい方は、本セッションでリンクされているフレームワークのドキュメントをご確認ください。また、アクセサリメーカーの関係者、あるいはアクセサリメーカーになることを検討されている方は、Nearby Interactionアクセサリ仕様書やスタートアップリソースをご確認ください。
リソース
関連ビデオ
WWDC22
WWDC21
WWDC20
-
ダウンロード
♪ ♪ こんにちは 私は Yagil Burowski AppleのLocation Technologies チームに所属しています 今回 Nearby Interaction フレームワークの最新動向と 今年リリースされる 新機能について説明します Nearby Interactionフレームワーク は Appleの Ultra-Wideband(UWB) が可能な U1チップ機能を 簡単に利用する事ができ 近くにあるデバイス間で 正確な位置や距離を認識し インタラクションを 実現します AirTag による「正確な 場所を見つける」機能や iPhone HomePod mini間の 流れるような ハンドオフジェスチャーを 実現しているのと 同じ技術です 今回のセッションでは この技術を紹介します まずユーザー許可フローの アップデートについてです 後で 互換性のある サード パーティのハードウェアで Nearby Interactionを実行 する API を紹介します
最後にApp開発者や アクセサリメーカーが Appや サードパーティアクセサリに これらの新しい API を 採用する為の リソースを紹介します 本題に入る前に Nearby Interaction に 初めて触れる方 又は 復習が必要な方の為に Appでフレームワークの 使用法を説明します セッションインスタンス から作成しましょう これは近くにある デバイスとの空間的な インタラクションを 設定 実行 する為の メインオブジェクトです 次にAppの一部を NISessionDelegateプロトコルに 適合するように指定します フレームワークからの アップデートを受け取ります
次は NIConfigurationの サブクラスである 設定オブジェクトを作成です 例えば Appを実行している 2台の iPhone間で セッションを開始する場合は NearbyPeerConfigurationを 作成します 作成した設定でセッションの 実行を呼び出すと Nearby Interaction は セッションに積極的に 参加している 近くのデバイスへの距離や 方向を含む NearbyObject の アップデートのストリームを Appに 提供し始めます
フレームワーク の API を より深く知りたい方は 昨年のWWDCでの講演 「Nearby Interactionについて」 をご覧ください 近くのデバイスまでの距離や 方向などのデータに アクセスするには Appがユーザーの許可を 得る必要があります
そこで 今年改善された ユーザー許可フローについて 説明します iOS 14「Nearby Interaction」 のパーミッションフローです Appが 新しいAppの ライフタイムで 初めてセッションを 実行した時に プロンプトが表示されます アラートのオプション 「許可しない」 「一度だけ許可する」は 明確な選択肢を 提供していますが これは1回限りなので 状況によっては 追加のプロンプトが 表示される事もあります 今年はAppに Nearby Interaction の 使用許可を与える 新しい方法が 登場しました これが iOS 15の新しい 「Nearby Interaction」の 許可プロンプトです 見た目はよく似ていますが いくつかの点で異なります Appが初めて NISession を実行した時 システムは自動的に 許可プロンプトを表示します NISession を 実行するタイミングが 明確なユーザーの意図と 一致している事を 確認する事が非常に重要です そうすればAppの 特定の機能が なぜ Nearby Interactionの アクセスを 必要とするのか ユーザーが 簡単に理解できます プロンプトに表示される 新しいオプションを 詳しく見てみましょう 新しい「OK」オプションは Appが使用されている間 Appに許可を与えます ユーザーがAppの Nearby Interaction の 使用要求を 受け入れても 拒否しても 許可のプロンプトは 再表示されません
iOS 15 からは Nearby Interaction を 使用するAppが 「設定」に表示されます ユーザーが変更したい場合は 「設定」Appにアクセスし Appの Nearby Interaction を 変更できます 実行の際 シナリオを 想定し テストして下さい
「Nearby Interaction」の ユーザー許可モデルをまとめ
新しい許可プロンプトを 受け入れると Appが使用されている間 Nearby Interaction を使用する 永続的な許可が与えられます
アラートにはAppの Info.plistで提供された 使用方法の説明文字列が 表示されます この目的文字列では 明確かつ簡潔に Nearby Interaction への アクセスを必要とする機能は 何かを説明して下さい
プロンプトが 最初で最後に 表示された後 Appの名前とアイコンが 「設定」に表示されます
ユーザーがいつでも Appの許可状態を 変更できます Appが Nearby Interaction を使用する為の 十分な権限を 持っていない場合 NISessions は 権限関連の エラーコードとともに無効になります Nearby Interaction へのアクセスに 依存している場合は ユーザーにこの点を 明確に説明し 必要に応じて 「設定」Appに 誘導する様にして下さい 以上が iOS 15の 新しい許可プロンプトです
そして今回 互換性のある サードパーティハードウェア にて Nearby Interaction を 利用できる様にする為の 新しい API を紹介します 我々は このAPIを皆さんが 製作を検討している様々な アクセサリで 動作させたいと考えました そこで インダストリ グループと協力し 策定した 標準規格に基づいて Nearby Interaction の サードパーティハードウェア をサポートしています
お客様が 試作 実験 アクセサリの製作に 取り掛かれるよう チップセットメーカー と協力して iPhoneの U1チップと 相互運用可能な ハードウェアと ファームウェアを含む 開発キットを 提供しています 開発キットと並行し 開発キットに含まれる ハードウェアですぐ動作する サンプルAppのコードも 提供しています これらは お客様の プロジェクトの 出発点として 最適なものとなるでしょう
アクセサリメーカーの方は Apple の開発者向けサイト 「Developer Preview」 で公開される予定の 「Nearby Interaction, Accessory Protocol Specification」 のドキュメントをご覧下さい この新技術を いじってみたい方も Ultra-Wideband(UWB)を 独自のアクセサリに 統合したい方も Nearby Interaction API を サードパーティアクセサリ にて 使用する方法を示す 簡単な例を見てみましょう ユーザーがアクセサリまでの 正確な距離に応じて 異なる機能を有効にする事は そのデバイスとの インタラクションを 効率化する強力な方法です 例えば あるアクセサリを 作っていて そこに Ultra-Wideband(UWB) を統合して そのアクセサリを際立たせる 一連の機能を 有効にしたいとします また 正確な距離を Ultra-Wideband(UWB) は 知る事ができるので アクセサリの周りの いくつかの正確なゾーンや 領域を追跡する為に 活用する事を計画しています 例えば アクセサリの周囲に 半径1.5mの領域と それよりも広範囲な 半径3mの領域を 定義するとします ユーザーが アクセサリの周囲の 広範囲な領域に入った時に 機能Aを有効にしたいので 特定の距離を 気にしているとします そして ユーザーが 小さな領域に入った時は 機能Bを有効にします
では Nearby Interaction フレームワークを使って 実際にAppで実現するには どうすれば良いのでしょうか はじめに Nearby Interaction では Appとアクセサリ間で データを交換する 何らかの機能が必要です
データ交換に使用する 特定の技術は あなたのアクセサリが 何をする必要が あるのか 無いのかは あなた次第です 例えば アクセサリが既に Bluetooth対応だと仮定し この場合 既存の Bluetooth 機能を利用し データ交換を行う事が できるので便利です また ローカルネットワーク に接続されていたり インターネットに安全に 接続されていたりする場合も 問題ありません Appとアクセサリ間で データを やりとりする機能は 次の作業に役立ちます
Appを実行している 2台のiPhone間で セッションを開始したい時に NearbyPeerConfiguration の作成を思い出して下さい アクセサリとのセッションを 開始するには NearbyAccessoryConfiguration を作成します
これは iOS 15 の新しい NIConfiguration タイプです Accessory Configuration を インスタンス化するには Accessory Configuration Data と呼ばれる 特定のフォーマットで フレームワーク が 受け取ることが期待される アクセサリを記述した 構成データを 提供する必要があります しかし この構成データは どう取得するのでしょうか? また 特定のフォーマットとは 何でしょうか? 認定された 技術プロバイダから 入手できるような U1 互換の ウルトラ・ワイド バンド・ハードウェア は 要求に応じて この設定データを 生成する方法を知っています アクセサリ本体で 実行するコードは このデータを生成し データチャネル上の Appに送信する 必要があります ここでは アクセサリから受け取った データを使って NearbyAccessoryConfiguration を インスタンス化する コード例を見てみましょう setupAccessory は 私のAppで書いた ヘルパーメソッドだとします アクセサリから構成データを 取得する度に アクセサリの名前と共に この関数にルーティングする ロジックが App内にあります この時点でアクセサリから 受け取ったデータを使用して NearbyAccessoryConfiguration を 作成できます 設定の作成は do/catch ステートメントの中で 行っていることに 気づくでしょう これは アクセサリから 受け取ったデータが 何らかの形で 無効であった場合 NIConfiguration の init メソッドが 例外を 発生させる為です 設定オブジェクトの 作成が成功すれば アクセサリから受け取った データが正しい形式で 使用できるようになります コンフィギュレーションを 作成する最終的な理由は セッションを実行する為に 使用する事です その前に 後で使えるように 有用なデータを キャッシュ する機会があります 新しいタイプ NearbyAccessoryConfiguration は フレームワーク が 自動的に入力するアクセサリ DiscoveryToken プロパティがあります 私が定義した関数 setupAccessory では アクセサリの名前もあります この段階で アクセサリの名前と一緒に DiscoveryToken を 保存すると 後で このアクセサリに関する NearbyObject の アップデートを受信した時 トークンと名前を使って アップデートを このアクセサリに 関連付ける事ができ 関連性の高いリッチな UI を 表示できて便利です
さて アクセサリの有効な 設定データが得られ それを使い アクセサリ設定 オブジェクトを 作成しました これで このアクセサリと使う 準備ができました
インタラクションを 管理する為には NISession インスタンスが必要で セッションのデリゲートを 設定しなければなりません セッションを開始するには 作成したアクセサリ設定 オブジェクトを使って セッションの run 関数を 呼び出すだけです
Nearby Interaction が アクセサリの設定データを 必要としたように アクセサリも 自身の設定方法を知る為に Nearby Interaction の 設定データが必要です このデータは "Shareable Configuration Data" 共有可能な設定データ である必要があります アクセサリの構成で セッションを実行すると Nearby Interaction は デリゲートコールバックで 共有可能な構成データを Appに提供します データチャンネルを使って アクセサリの設定データを 受け取ったように ここでも データチャンネルを使って 共有可能な設定データを アクセサリに送り返します より具体的に説明する為に コード例を見てみましょう 共有可能な構成データは iOS 15 新しいデリゲート コールバックである didGenerate を通じ Appに提供されます このコールバックをAppに 実装する場合の例を示します フレームワーク は共有可能な 設定データを提供し どのアクセサリに 送信すべきかを示します 複数のアクセサリと やり取りする場合に 非常に便利です データチャンネルを使って できるだけ早く アクセサリにデータを送る様 計画して下さい 一般的な話として 様々なアクセサリへの データ接続を管理するには ユースケースに応じて 様々な形態があります 簡単に説明すると Appの設計では 操作するアクセサリごとに 独立したデータ接続を維持 する事にしたとします コードを綺麗に整理する為 NearbyObject に基づき 接続を返す ヘルパー関数を定義しました 接続への参照を取得したら それを使って 共有可能な設定データを すぐアクセサリに送信します Appを最適化して 共有可能な構成データを 遅れずにアクセサリに送信 する事が重要です ShareableConfigurationData が 早く送信されないと セッションが タイムアウト する事があります アクセサリとのセッションの タイムアウトは didRemove デリゲートの コールバックを通じて Appに通知されます このシナリオを どの様に 処理するか 見てみましょう
Nearby Interaction から 画面に表示されている didRemove コールバックが 送られてきたら reason パラメータを 確認します もし その理由が タイムアウトで そのアクセサリがまだ近くに ある という確信があれば アクセサリとの インタラクションを 再試行できます
このアクセサリで 再試行フローに 入るべきか どうかを 判断する為に この判断を助ける 特殊なロジックを含む ヘルパー関数を定義しました このような判断には 何回リトライしても 成功しなかったか アクセサリが停止した事を 通知したか等の 条件が必要になります
再試行する場合は 同じ設定で再度セッションを 実行すれば良いのです キャッシュされた設定は アクセサリのセッションが 終了していない限り 有効である事に 留意して下さい セッションが終了した場合 最初にセッションを作成して 実行した時と 同じ手順を踏む 必要があります アクセサリのセッションは アクセサリ上で動作する コードが管理する必要があり ユースケースに応じて 様々な方法で 管理できる事をご留意下さい
さて 共有可能な設定データを アクセサリに送信し 必要に応じ 再試行を処理する ロジックも用意しました 次は何でしょう? アクセサリの 設定データと同様 コードが共有可能な 設定データを提供すると アクセサリ内の U1 互換の ハードウェアは 共有可能な 設定データに対して 何をすべきかを 自動的に認識します
アクセサリ上で実行される コードがデータを受け取ると そのまま早くボード上の Ultra-Wideband(UWB) ハードウェアに 提供する必要があります アクセサリに搭載されている Ultra-Wideband(UWB) ハードウェアは コンフィギュレーション・ データの生成や 消費をどう知る事が できるのだろうかと 疑問に思うでしょう アクセサリの設定データと 共有可能な設定データは 今年の春先 発表した仕様書で 定義されています このドキュメントは チップセットメーカーや モジュールメーカーを 対象としており iPhone の U1 と 相互運用する為の 業界標準を用いた Ultra-Wideband(UWB) を作成する為 必要な詳細が 記載されています
チップセットメーカー向けの 相互運用性仕様に加え アクセサリメーカ 向けの仕様も 公開します このドキュメントは Ultra-Wideband(UWB) ハードウェア搭載アクセサリ を作りたいと考えている方 Nearby Interaction フレームワーク をAppで使って インタラクティブに 動作させたいと 考えている方の為のものです Apple の開発者向け Webサイトで 開発を始める為の 追加リソースと共に 公開されています ここで 前回の続きです 共有可能な設定データを データチャネルを介して アクセサリに送信した所です 次に アクセサリ上のコードが それを受信し Ultra-Wideband(UWB) ハードウェアに 提供した後に何が 起こるかを見てみましょう
共有可能な設定データを 受信した後 アクセサリ上の Ultra-Wideband(UWB) ハードウェアは App内の NISession と 対話する為の 適切な設定で直ちに 実行を開始します アクセサリとAppを 実行している iPhone の両方が 近くにある場合 セッションはAppに NearbyObject アップデートの ストリームを提供し始め アクセサリまでの距離や オプションで 方向も含まれます 複数のアクセサリを同時に 操作する事も可能で それぞれ セッションを 作成して実行できます アクセサリの ハードウェア機能によって アクセサリ上で 実行されているコードで 同等の近接情報を 取得する事もできます フレームワーク から NearbyObject のアップデートを取得したら それを使い 何をするべきでしょう? 思い出して欲しいのは ユーザーが 大きな領域に入った時には Appとアクセサリが 機能Aを有効にし ユーザーが アクセサリの周りの 小さな領域に入った時に 機能Bを有効にする様な 体験を作りたいのです iOS Appで NearbyObject の アップデートを使用して これを実現する方法を示す コード例を見てみましょう
Appとアクセサリ間の セッションが実行されると アクセサリに関する アップデートは didUpdate を通じ セッション のデリゲートに配信されます まず フレームワークが 更新情報を提供する 近くのオブジェクトへの 参照を取得します 次に フレームワークが提供する このオブジェクトまでの 距離をメートル単位で 表したローカル変数を 作成します そして このデータをApp内の ヘルパー関数 getSmoothedDistance に渡します この関数は 距離が 急激に変化する事を 防ぐ為に 定義しました 例えば ユーザーが 急に動いたり ゾーンの境界に 立っていたりした 場合などです 最後に ユーザーのアクセサリからの 距離が予め設定した閾値を 超えたかどうかを確認します 現在の距離に基づいて 機能Aと機能Bの どちらを有効にするかを 選択できます
デバイス間の距離や 方向に基づいた体験の デザインについて 知りたい方は 今年のWWDCで行われた 「空間インタラクションのためのデザイン」 の講演をご覧下さい
今回のセッションで話した 内容をまとめてみましょう
新しい許可モデルにより Appが使用されている間 Nearby Interaction に アクセスできます
また Nearby Interaction 対応 サードパーティアクセサリの 新しい世界を深く掘り下げ 独自のアクセサリで空間的な インタラクションを 構築する為に どの API を使用できるか 説明しました またサポートしている テクノロジープロバイダが 提供している サードパーティ開発キットや すぐにプロジェクトを 始められる iOS Appのコード について紹介しました 実際に使ってみて下さい ユースケース実験と プロトタイピングを始めよう
あなたのアクセサリに Ultra-Wideband(UWB) を 採用する準備ができたら 開発者向け Webサイトに ある仕様書をお読み下さい 以上 今年の Nearby Interaction アップデートを紹介しました ありがとうございました このセッションが Appやアクセサリを 作り始める為に必要な情報で 皆様のお役に 立てれば幸いです [♪音楽 ]
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。