🎸

Live Activity をプロダクトに導入した話

2024/05/13に公開

はじめに

こんにちは、つぼやん(@tsuboyan5)です。iOSエンジニアとして、Software DevelopmentチームでLUUPアプリを開発しています!

今回はiOSの Live Activity についての話題です。Live Activity は2022年の WWDC で発表された iOS 16.1 から利用できる機能です。

iOS 16 以降のユーザーの割合が 96% を超えた今、多くのユーザーが Live Activity を利用できる状態になっています。[1]

そんな Live Activity をプロダクトに導入しましたので、その概要や、実装する上で困った点などを紹介したいと思います!

Live Activity の概要


Live Activity は、ロック画面や、Dynamic Island 上でリアルタイムに情報を表示するための機能です。

本体アプリとは別で動作するため、本体アプリの状態によらず、ユーザーに情報を提供できます。

さらに、デフォルトではユーザーに許可を求めなくても表示されるため、多くのユーザーにこの機能を活用してもらうことができます。

Live Activity を表示可能な条件

対応OS:iOS 16.1 以降 (ただし、API仕様が大きく変わったため 16.2 以降をターゲットとして開発することをオススメします)

対応端末:ロック画面への表示には全端末が対応していますが、Dynamic Island への表示は、iPhone 14 Pro 以降の対応端末のみ対応しています。

LUUP での活用

LUUPでは、車両をアプリを通して借りることができます。
しかし、車両の返却時に、アプリを通した返却手続きを忘れるユーザーが時折発生していました。
返却手続きを忘れると、時間単位で課金されるため、高額な料金になる可能性があるほか、該当の車両を他のユーザーが利用できないといった問題につながります。

Live Activity を活用した返却忘れの防止

このような課題を受けて、車両にライド中にのみ表示される、次のような Live Activity を作成しました。

ロック画面

「利用中」とのみ表示される、シンプルなデザインとしています。初回は、画像のように Live Activity を許可するかを尋ねる項目がOSによって表示されます。

当初は「ライド中/一時停車中」といった車両の状態をリアルタイムに反映することを検討していましたが、アプリがKillされている状態ではPush通知の仕組みを使った更新が必要であったため、まずはシンプルにアプリ側から操作できる最小限の実用的な実装にとどめています。

Dynamic Island

車両のアイコンが Dynamic Island に表示されます(画像左)。テキスト情報ではなく、アイコンを表示することで、最小限の表現で利用中であることが伝わるようにしています。
ロングタップをして拡張表示にすると、より詳細なステータスが表示されます(画像右)。

リリースした結果

具体的な事業上の数値は非公開ですが、当初想定していた返却忘れのユーザーの割合が減少したことを確認できました!

Live Activity にて車両が未返却であることに気がつき、返却をしたユーザーが一定数いたことが考えられます。

また、多くのユーザーにリーチした機能ではありつつも、SNS やアンケートにてポジティブな反応はあれど、ネガティブな反応は見受けられませんでしたので、一安心しました。

実装する上でつまずいたポイント

具体の実装については、すでに公式ドキュメントやブログ記事が充実しているため割愛しますが、実装する上でつまづいたポイントをご紹介します。

実装/レイアウトの制約が多い

はじめはロック画面にのみ実装するつもりでしたが、実装上、ロック画面とDynamic Island両方のUIの記述が必須になっていました。また、UI は SwiftUI で記述できるものの、形・色など制約が多いことに留意が必要です。

例えば Dynamic Island に表示されるライブアクティビティの背景色はカスタムすることができません。また、カメラモジュールの位置を考慮した要素の配置やパディングの調整が必要になります。

詳しくは Human Interface Guidelines のライブアクティビティのページ に記載がありますので、ご参照ください。

Live Activity は様々な要因で非表示にされる

以下のような要因により非表示にされますので、Live Activity に依存するような体験にはならないように注意が必要です。

  • ロック画面での左スワイプ (通知と同様)
  • 設定アプリからアプリごとにLive Activityを不許可にする
  • OS側からの時限的な Live Activity の Kill
    • ロック画面に表示されるLive Activityは12時間、Dynamic Islandに表示されるものは8時間で Kill されます

リジェクトのリスク

LUUPアプリでは、Live Activityに関連して、計2回のリジェクトを受けました。
1回目のリジェクトでは、審査官から「動作イメージを提出してもらわないと審査できない」とのコメントがありました。これを受けてLive Activityの動作イメージを撮影し、提出しました。
これはおそらく、LUUPがアプリで完結するプロダクトではないからだと思いますが、どのアプリにおいても、Live Activity が表示される条件が審査官に伝わるようにしておく必要があると思います。

2回目のリジェクトでは、審査官から「Widget は実装してますか?」という質問がありました。
これに対しては「Live Activityのみ実装しています」といった旨の返答のみで審査を通過することができました。
Live Activity は Widget の仕組みを使って実装するため、WidgetKit が使われているのに、Widget が実装されてないことについて審査官が疑問を持ったようです。

まとめ

⭐️ Live Activity が本領を発揮できる時代が到来
Live Activity 対応のOS(iOS 16.1以上) や Dynamic Island 対応機種が増加し、Live Activity が本領を発揮できる時代が到来しました

⭐️ LUUP での課題の解決に、Live Activity が役に立てられた
当初の目的である、返却忘れのユーザーの割合が減少したことを確認できました

⭐️ つまずきポイントに注意
レイアウトの制約/特殊性、意図せず非表示にされうるパターン、リジェクトリスクなど注意点もあります

おわりに

こうしたモバイルアプリの機能を活用した、より良い体験に繋げるための施策は、引き続き進めていきたいですね!
また、一緒に LUUP を開発してくださるソフトウェアエンジニアを積極的に募集していますので、採用情報もぜひ、ご参照ください!
https://recruit.luup.sc

参考文献

脚注
  1. 2024/02/04時点, App Store でのiOS16と17の利用率の合算値 ↩︎

Luup Developers Blog

Discussion