リファレンス
このページは、Making Data Available to the App Clip’s Corresponding App を翻訳したものです。
Overview
App Groups 機能を追加し、App Clipに保存されているデータを、対応するアプリで利用できるようにする。
App Clip のユーザーがフルアプリをインストールすると、アプリクリップがフルアプリに置き換わり、すべての呼び出しを受け取ります。アプリクリップに慣れ、フルアプリを使い始めたユーザーに優、れたユーザーエクスペリエンスを提供することは重要です。
例えば:
- App Clip を使用したときに入力した情報を、アプリで表示します。
- ダウンロードしたデータをアプリで利用できるようにします。
- ユーザーは、自分のアカウントに再度ログインする必要がない。
アプリクリップとアプリ間でデータを共有する
App Clip は、共有コンテナにデータを保存することで、対応するアプリがデータにアクセスできるようにすることができます。フルアプリは、App Clip を置き換えるときにこのデータにアクセスすることにより、優れたユーザーエクスペリエンスを提供できます。
共有コンテナにデータを保存するには:
- App Clip とフルアプリの両方のターゲットにApp Groups 機能を追加します。
- 両方のターゲットに対して、同じ app group capability (たとえば、
group.exampleApp.appClipMigration
) に追加します。 - App Clipのコードで、
containerURL(forSecurityApplicationGroupIdentifier:)
を使用して共有コンテナーのURLを取得し、そのURLを使用してデータを保存します(たとえばwrite(to:atomically:encoding:)
)。 - アプリのコードで、同じ関数を使用して共有コンテナーのURLを取得し、そのコンテンツにアクセスします。たとえば、
init(contentsOf:)
を使用します。
共有コンテナに加えて、App Clipは、フルアプリにアクセスできる共有されたUserDefaults
インスタンスに情報を保存することもできます。次のコードは、構成された app group を使用して共有 UserDefaults インスタンスを作成し、文字列を格納します。
guard let sharedUserDefaults = UserDefaults(suiteName: "group.exampleApp.appClipMigration") else { // Error handling } sharedUserDefaults.set("A sample string", forKey: "sharedText")
ユーザーがフルアプリをインストールすると、共有の user defaults にアクセスできます。たとえば、前のコードに格納されている文字列にアクセスするには、次のようにします。
guard let sharedUserDefaults = UserDefaults(suiteName: "group.exampleApp.appClipDataMigration") else { // Error handling} guard let migratedData = sharedUserDefaults.string(forKey: "sharedText") else { return }
アプリと App Clip 間でユーザーのプライバシーを保護するために、App Clip は対応するアプリとのみデータを共有できます。さらに、App Clip がキーチェーンに保存している情報に、対応するフルアプリからアクセスできるようにすることはできません。
注意
従来の UserDefaults.standard を使用した場合、App Clip とフルアプリ間でのデータ共有はできず、nil が返される。
重要
パスワードなどの機密性の高いユーザー情報を、共有アプリのコンテナーや user defaults に保存しないでください。
Appleでサインイン を推奨
App Clips は、ユーザーが自分のアカウントにサインインしたり、アカウントを作成したりできるようにするために、任意のテクノロジーを使用できます。ただし、App Clipでユーザーがアカウントにログインする必要がある場合は、Appleでサインイン を検討してください。シンプルで安全なプライバシー保護のアカウント作成とサインインエクスペリエンスを提供するだけでなく、ユーザーがフルアプリを使い始めたときにポジティブなエクスペリエンスを提供します。
Appleでサインイン を提供し、共有データコンテナーを作成する場合は、ユーザーがフルアプリの使用を開始するときに再度ログインする必要がないユーザーエクスペリエンスを作成します。次のコードは、ASAuthorizationAppleIDCredential
を共有UserDefaults
インスタンスに格納します。
let groupUserDefaults = UserDefaults(suiteName: "group.com.example.appClipDataMigration") guard let credential = authorization.credential as ASAuthorizationAppleIDCredential else { return } groupUserDefaults?.set(credential.user, forKey: "SavedUserID")
アプリのコードで、保存されているApple ID認証資格情報を取得し、それを使用してユーザーにサインインします。
let provider = ASAuthorizationAppleIDProvider() let groupUserDefaults = UserDefaults(suiteName: "group.com.example.appClipDataMigration") let user = groupUserDefaults?.get("SavedUserID") provider.getCredentialState(forUserID: user) { state, error in if state == .authorized { readFavoriteSmoothies(user) } }