ドキュメント

App Clipに対応するAppでデータを利用可能にする

App Groups機能を追加し、App Clipに保存されているデータをApp Clipに対応する完全版Appで利用できるようにします。

最新の英語ドキュメント

Sharing data between your App Clip and your full app


概要

App Clipのユーザーが完全版Appをインストールすると、完全版AppがApp Clipに置き換わり、すべての呼び出しを代わりに受け取ることになります。そこで、App Clipを使い慣れたユーザーが完全版Appを使い始めた場合に、優れたユーザー体験を提供することが重要です。

以下はその例です。

  • ユーザーがApp Clipを使用した際に入力した情報をAppで表示する。

  • ダウンロードしたデータをAppが利用できるようにする。

  • ユーザーがアカウントに再度ログインしないですむようにする。

App Clipと完全版Appのデータ共有

App Clipはデータを共有コンテナに保存することで、完全版Appがそのデータにアクセスすることができます。完全版AppがApp Clipと置き換わった際、このデータにアクセスできるため、ポジティブなユーザー体験を提供できます。

共有コンテナにデータを保存するには

  1. App Clipと完全版Appの両方のターゲットにApp Groups機能を追加します。

  2. 両方のターゲットで、App Groups機能に同じAppグループを追加します(例:group.exampleApp.appClipMigration)。

  3. App Clipのコード中で、共有コンテナのURLをcontainerURL(forSecurityApplicationGroupIdentifier:)(英語)を使って取得し、そのURLを使って、write(to:atomically:encoding:)(英語)などでデータを保存します。

  4. Appのコードの中で上記の関数を使って共有コンテナのURLを取得し、init(contentsOf:)(英語)などを使ってコンテンツにアクセスします。

共有コンテナに加えて、App Clipは完全版Appもアクセスできる共有のUserDefaults(英語)インスタンスに情報を保存することもできます。次のコードでは、構成済みのAppグループを使って共有のUserDefaultsインスタンスを作成し、文字列を保存しています。


guard let sharedUserDefaults = UserDefaults(suiteName: "group.exampleApp.appClipMigration") else {
    // Error handling
}
sharedUserDefaults.set("A sample string", forKey: "sharedText")

ユーザーが完全版Appをインストールすると、Appから共有のユーザーデフォルトにアクセスできます。たとえば、上記のコードで保存した文字列にアクセスするには、以下のコードを使用できます。


guard let sharedUserDefaults = UserDefaults(suiteName: "group.exampleApp.appClipDataMigration") else {
    // Error handling
}
guard let migratedData = sharedUserDefaults.string(forKey: "sharedText") else { return }

さまざまなAppやApp Clipのやり取りの中でユーザーのプライバシーを保護するため、App Clipがデータを共有できるのは、対応する完全版Appに限定されます。さらに、App Clipがキーチェーンに保存する情報については、対応する完全版Appもアクセスできません。

「Appleでサインイン」の提供

App Clipでは、任意のテクノロジーを使ってアカウントへのサインインや新規アカウントの作成機能をユーザーに提供できます。ただし、ユーザーがアカウントにログインすることが必要なApp Clipでは、「Appleでサインイン(英語)」を提供することを検討してください。シンプルで安全、しかもプライバシーを保護したアカウント作成とサインインに加えて、ユーザーが完全版Appに切り替えた際にもポジティブな体験を提供することができます。

「Appleでサインイン」の機能を提供し、共有データコンテナを作成する場合は、ユーザーが完全版Appを使い始めたときに再度ログインしなくてもすむよう、適切なユーザー体験を設計してください。次のコードでは、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")

このAppのコードで保存されている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)
    }
}

関連項目

App Clipから完全版Appへの移行