REALITYのiOSアプリでLive Activitiesを試してみた REALITY Advent Calendar #23
こんにちは!
REALITYでiOSエンジニアをやっているヤザキです。
はじめに
ライブ配信やビデオ通話機能のあるREALITYのアプリは、iOS16の新機能であるLive Activitiesと相性が良いのではないかと以前から考えていました。
そこで先日の開発合宿の開発テーマとして、REALITYのiOSアプリでLive Activitiesを使うとどんなことができるか試してみることにしました。
早速ですが、開発合宿中に出来上がったLive Activitiesのデモがこちらです!
以下ではLive Activitiesとはどんな機能なのか、REALITYアプリで試してみた所感について書きたいと思います。
Live Activitiesとは
iOS 16から提供されている、ロック画面にリアルタイムな情報を表示できる機能です。
iOS 16.1からはActivityKitというフレームワークが開発者に開放されて、アプリに独自のLive Activityを組み込むことができるようになりました。
iPhone 14 Pro / Pro Maxの端末では、Dynamic Islandにアプリのリアルタイムな情報を常時表示させることもできます。
Live Activitiesでどんなことができるのか?
一番分かりやすいのが標準の時計アプリです。
タイマーのカウントダウンがロック画面に表示されます。
Dynamic Islandにも表示されて、長押しすると拡大されます。
このようにバックグラウンドで起きていることを、プッシュ通知よりもリアルタイムに、かつ常時表示させることができるのがLive Activitiesの特徴です。
REALITYでLive Activitiesを試してみた
具体的な実装方法はこの記事では省略しますが、公式のドキュメントで導入方法が紹介されていたので、これを参考に実装を進めました。
まずはライブ配信を視聴中に、配信に関する情報を表示できるようにしてみました。
Dynamic Islandには配信者のアイコンを表示して、長押しすると、詳しい情報が見えるようになります。
コラボ配信中は、コラボに参加しているユーザーのアイコンが表示されます。
次に、誰かがコメントをした際に内容をリアルタイムに更新させるようにしてみました。
Dynamic Islandにも、ニョキッと出てきます。
なんかいい感じに動きました!
UIレイアウトに制約がある
ロック画面に表示するViewは、高さに制限はありますがSwiftUIのViewを比較的自由にレイアウトして置くことができます。
しかしDynamic Islandは下の画像のようにパーツを配置できる領域が分かれており、これにうまくハマるようなレイアウトでデザインを設計しなければいけません。
高さや幅が絶妙に可変だったりして領域にピッタリはまらないこともあり、その挙動を試行錯誤しながら調整が必要でした。
条件によってはバックグラウンドで更新できない
こちらのGIFのように、アプリがバックグラウンドにあってもアプリ側から更新をかけることでプッシュ通知のように情報の更新を伝えることができます。
しかし、iOSシミュレータではバックグラウンドでの更新が働くのですが、実機では更新されないという現象に遭遇しました。(本記事のGIFは全てシミュレータです)
調査したところ、位置情報など特定のバックグラウンドタスクがアプリで実行されている必要があり、配信の音声再生だけでは、バックグラウンド更新ができる条件を満たさないようでした。
明確なドキュメントは見つけられませんでしたが、Ask AppleのSlackに同様の質問があり、Appleのエンジニアからそのような回答がされていました。
現状のREALITYアプリでは、アプリをフォアグラウンドに戻さないと最新の情報にアップデートできないため、別途対応方法を考えなければいけません。(今回の開発合宿中にはそこまではできませんでした)
まとめ
REALITYでLive Activitiesを試してみた話について書かせてもらいました!
機能自体が新しい概念なのもあり、まだ手探り状態ではありますが、いつか正式な機能としてREALITYで提供できたら嬉しいなと思っております。
明日は
REALITY Advent Calendar 2022もいよいよ終盤ですね。
24日目はホンダさんによる「REALITYのアバターでノベルゲームやってみたくない?」です!