見出し画像

Nearby Interactionを久々に触ったメモ

UWBについてはNearby Interaction登場前から注目していて、WWDC20でNearby Interactionフレームワークが登場してすぐに記事を書いたりもしたが、まだ実戦投入したことはなかった。

最近ひさびさに触る機会があったので、実機で動かしてみての気付きや、改めて調べたことについて雑多にメモを書いておく。

これまでに書いたNearby Interactionの記事

Nearby Interactionの情報は公式ドキュメントと過去のWWDCセッション3つぐらいしかない。

ので、それら(WWDCセッションから得た知見)をまとめた記事である過去記事が普通に今でも役に立ったので、いったんここに載せておく。

  • 最小実装が書いてある

  • UWBの指向性の話や、それによって「方向」(direction)が取れなくなることも書いてある

  • WWDC21の唯一のNearby Interaction関連セッションであるExplore〜から得た知見のメモ

  • 2021年/iOS 15における機能追加はこれだけ(のはず)

  • WWDC21〜WWDC22あたりの情報をまとめた記事

  • WWDC22の"What's new in Nearby Interaction"のバックグラウンドセッションについての解説を掘り下げた記事


複数台との同時セッションの実装方法

セッション中、近接オブジェクトに更新があると `NISessionDelegate` の `session(_:didUpdate:)` メソッドが呼ばれる。

func session(_ session: NISession, didUpdate nearbyObjects: [NINearbyObject])

この引数には NINearbyObject が配列で渡されるようになっており、明らかに複数台との同時セッションが想定されてそうではある。

しかし一方で、`NISession` の` run` メソッドは複数の `NIConfiguration` を引数に取れないし、`NIConfiguration` は複数の `NIDiscoveryToken` を持てない。複数回 `run` を呼べるかどうかはドキュメントには明記されていないが、 `pause` や `invalidate` メソッドはどのデバイスとのインタラクションを止めるかといった指定ができない。

これらを鑑みると、やはり `NISession` ひとつにつきひとつのデバイスとのインタラクションを想定しているように見える。

ここから先は

2,054字 / 5画像
文章やサンプルコードは多少荒削りかもしれませんが、ブログや書籍にはまだ書いていないことを日々大量に載せています。たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。

技術的なメモやサンプルコード、思いついたアイデア、考えたこと、お金の話等々、頭をよぎった諸々を気軽に垂れ流しています。

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/