📝

【iOS 17】Journaling Suggestions 入門

2024/01/08に公開

iOS 17.2からジャーナルアプリを使用することができるようになりました。ジャーナルアプリはユーザーのアクティビティ情報をレコメンドし、ジャーナルへの記入を提案してくれます。

ジャーナルアプリが使用可能になったと同時に、Journaling Suggestionsフレームワークがサードパーティ向けに解放されました。Journaling Suggestionsを使用することで、ユーザーのアクティビティ情報を活用したアプリを開発することができます。
本記事ではJournaling Suggestionsの基本的な概要と最小実装方法について書きます。最後まで記事をお読みいただくと、Journaling機能をご自身のアプリに導入することができるようになります。

Journaling Suggestionsとは

iOS 17.2以降で使用可能な写真、場所、ワークアウト、繰り返し再生した音楽といった、ユーザーのアクティビティ情報を提案してくれるフレームワークです。Journaling Suggestionsには、提案されたアクティビティ情報を取得するためのピッカーAPIが用意されており、Journaling Suggestionsが提案するアクティビティ情報をアプリで使用することができます。
Journaling Suggestionsが提案するアクティビティ情報は、機械学習を利用して自動的にレコメンドされます。

JournalingSuggestionsPicker

JournalingSuggestionsPicker を使用することで、Journaling Suggestionsが提案するアクティビティ情報を取得するためのピッカーを表示することができます。

init(label:onCompletion:) を使用してJournalingSuggestionsPicker のインスタンスを生成します。label 引数にはピッカーを表示するボタンに表示するラベルを、onCompletion 引数にはアクティビティ情報をピッカーで選択した後に実施する処理をJournalingSuggestion 型の引数を取るクロージャで指定します。
JournalingSuggestion 型の引数には、選択したアクティビティ情報が格納されています。

Suggestion Type

Journaling Suggestionsが提案するSuggestionにはタイプがあります。それぞれのタイプによって、取得することができるアクティビティ情報が異なります。

https://developer.apple.com/documentation/journalingsuggestions/journalingsuggestion

各Suggestionタイプの概要は以下になります。

Suggestion type 概要
Contact 電話やメッセージでコミュニケーションをとった人物の連絡先情報
LivePhoto 写真ライブラリ内のLive Photos情報
Location 訪れた町や訪問日情報
LocationGroup 訪れた複数の町や訪問日情報
MotionActivity 運動を行った時間の期間やステップ数情報
Photo 写真ライブラリ内の写真情報
Podcast 繰り返し再生したポッドキャスト情報
Song 繰り返し再生した楽曲情報
Video 写真ライブラリ内のビデオ情報
Workout 完了したワークアウト情報
WorkoutGroup 完了した複数のワークアウト情報

各Suggestionタイプで取得可能な情報は以下になります。

Suggestion type Contents
Contact name: String, photo: URL?
LivePhoto image: URL, video: URL, date: Date?
Location city: String?, place: String?, location: CLLocation?, date: Date?
LocationGroup locations: [Location]
MotionActivity icon: URL?, date: DateInterval?, steps: Int
Photo photo: URL, date: Date?
Podcast show: String?, episode: String?, artwork: URL?, date: Date?
Song song: String?, artist: String?, album: String?, artwork: URL?, date: Date?
Video url: URL, date: Date?
Workout icon: URL?, route: [CLLocation]?, details: Details?, Details
WorkoutGroup icon: URL?, duration: TimeInterval?, activeEnergyBurned: HKQuantity?, averageHeartRate: HKQuantity?, workouts: [Workout]

実装

Journaling Suggestionsエンタイトルメントの追加

アプリでJournaling機能を使用するためには、Journaling機能を使用したいXcodeプロジェクトにJournaling Suggestionsエンタイトルメントを追加する必要があります。
[Signing & Capabilities]から[+Capability]を選択し、Journaling Suggestionsを追加します。

JournalingSuggestionsピッカーボタンの表示

以下はJournalingSuggestionピッカーボタンを表示し、選択したSuggestionのタイトルを表示するサンプルコードです。

繰り返し再生したポッドキャストや楽曲がある場合は、複数のSuggestionが表示されます。

Suggestion詳細情報を取得する

JournalingSuggestionsPicker インスタンスを生成時に指定したクロージャ内のJournalingSuggestion 型の引数を使用して、Suggestion詳細情報を取得することができます。
以下のコードは、繰り返し再生した楽曲のSuggestion詳細情報を取得するコードです。

JournalingSuggestioncontent を使用して、Suggestion詳細情報を取得しています。contentforType 引数には詳細情報を取得したいSuggestion type名を指定します。

suggestionSongData には[JournalingSuggestion.Song] 型のインスタンスが格納されます。[JournalingSuggestion.Song] 型インスタンスの各種プロパティに、楽曲のSuggestion詳細情報が格納されています。

今回は繰り返し再生した楽曲のSuggestion (SongタイプのSuggestion)詳細情報を取得しましたが、contentforType 引数を変更することで、他のSuggestionタイプの詳細情報も取得することができます。

全体コード

実行結果

参考資料

・Discover the Journaling Suggestions API
https://developer.apple.com/videos/play/tech-talks/111384/

・Journaling Suggestions
https://developer.apple.com/documentation/journalingsuggestions

Discussion