ドキュメント

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

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

最新の英語ドキュメント

Sharing data between your App Clip and your full app


概要

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

以下はその例です。

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

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

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

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

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

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

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

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

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

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

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


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

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


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がキーチェーンに保存する情報については、対応する完全版アプリもアクセスできません。

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

App Clipでは、任意のテクノロジーを使ってアカウントへのサインインや新規アカウントの作成機能をユーザーに提供できます。ただし、ユーザーがアカウントにログインすることが必要な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)
    }
}

関連項目

App Clipから完全版アプリへの移行