# リモートカタログの作成

> 製品カタログを定義し、リモートカタログサービスにアップロードします。

製品カタログを設定して[リモートカタログサービスにアップロード](#upload-your-product-catalog-to-the-remote-catalog-service)すると、ユーザーは新しいバージョンをインストールしなくても、アプリケーションの最新製品にアクセスできます。

製品カタログをリモートカタログにアップロードすると、Unity Iap SDK は`RemoteCatalogProvider`クラスから製品カタログを取得してユーザーに製品をディスプレイできます。これには以下の利点があります。

* ユーザーがアプリケーションを更新することなく、製品と価格をリアルタイムで確実に分布できます。
* 複数の支払いプロバイダーにわたって製品情報を設定する必要はありません。

## 製品とカタログのリスト##products-and-catalog-listings

Unity Iap は、次の 2 つの関連概念でカタログを表します。

* **製品**とは、ユーザーに付与するものです。各製品には、`productId` とも呼ばれる SKU があります。
* **カタログ リスト**は、`catalogListingId`によって識別される製品の購入可能なバージョンです。1 つの製品に複数のカタログリストがあるため、同じ製品を複数の方法で販売できます。

製品を購入するには、ユーザーがカタログ リストの1つを購入します。購入の開始や特定のリスティングのターゲット設定には、`catalogListingId`ではなく`productId`を使用します。1 つの製品に複数のリストを定義しない場合、Unity Iap は`catalogListingId`が SKU に一致するカタログを 1 つ作成します。既存の単一リストカタログは、変更なしで引き続き機能します。

> **Note:**
>
> 製品カタログを展開する前に、[Deploymentパッケージ](https://docs.unity3d.com/Packages/com.unity.services.deployment@latest)をインストールする必要があります。

> **Warning:**
>
> D2C(ダイレクト トゥ コンシューマー)支払いプロバイダーの場合は、IAP Catalogウィンドウを使用して製品を作成しないでください。[IAP カタログ項目として製品を作成](#create-a-product-catalog-in-the-unity-editor) する必要があります。同様に、Codeless IAPパスも使用しないでください。カタログエディターの**自動初期化**オプションは、D2C決済プロバイダーでは使用できないためです。

## 製品カタログの定義##define-your-product-catalog

以下の方法を使用して、リモート製品カタログの製品に関する情報を定義できます。

* [Unity エディターで](#create-a-product-catalog-in-the-unity-editor) (推奨)
* [アプリストアまたはgoogle playからの既存のカタログのインポート](#import-an-existing-catalog)
* [API の使用](#use-the-api-to-create-a-product-catalog)
* [カスタムインテグレーションの使用](#use-a-custom-deployment-window-integration-to-create-your-product-catalog)

Unity Cloudダッシュボードの**In-Application Purchases** >**Catalog**で直接カタログを作成することもできます。

Unity エディターを使用して製品を追加する場合、Unity アプリ内課金 (IAP) は、購入処理に必要なバックエンドロジックの一部を自動的に処理します。これは特に、[バックエンド API で購入](./implement-backend.md)を履行することを選択した場合に役立ちます。

> **Note:**
>
> Unity エディター UI で製品カタログを作成するには、Unity エディターバージョン 6.0 以降を使用する必要があります。以前のバージョンを使用している場合は、代わりに [API を使用して](#use-the-api-to-create-a-product-catalog) 製品カタログを作成できます。

### Unity エディターでの製品カタログの作成##create-a-product-catalog-in-the-unity-editor

Unity エディターで製品を定義する場合、エディターは製品設定をファイルに保存するため、コード設定のワークフローを使用して管理できます。

Unity エディターで製品を作成するには、次の手順に従います。

1. カタログ項目を作成するには、ディレクトリを右クリックし、**［Create**］＞ **［Services**］＞ ［**IAP Catalog］ 項目**を選択します。
2. カタログ項目に名前を付けます。カタログ項目アセットが作成され、Inspector ウィンドウでアセットが開きます。
3. カタログ項目の詳細を入力します。詳細については、[Catalog 項目 Asset Inspector リファレンス](#catalog-item-asset-inspector-reference)を参照してください。
4. **Apply** (適用) を選択します。

これらの手順を繰り返して、すべての製品のカタログアイテムを作成します。


**Frame:**
![Unity エディターの Inspector ウィンドウで開いたカタログ項目アセットのスクリーンショット。画像は、「Catalog Listing Id」、「Sku」、「Product Type」、「Product Details」、「Pricing Details」、「Image URL」、「Store ID Overrides」の各フィールドを示しています。](/api/media?file=/iap/media/images/catalog-inspector.png)

製品を追加したら、「**View in Deploymentウィンドウ**」を選択して製品カタログをDeploymentウィンドウで開き、[リモートカタログにアップロード](#upload-your-product-catalog-to-the-remote-catalog-service)します。

Unity エディターではなく、 ファイル内で製品の詳細を直接編集することもできます。ファイルのプロパティは、[Catalog 項目 Asset Inspector リファレンス](#catalog-item-asset-inspector-reference)にリストされているプロパティにマップされます。

#### Catalog 項目 アセット Inspector のリファレンス##catalog-item-asset-inspector-reference

以下のプロパティを参照して、IAP カタログアイテムを定義します。

| **プロパティ**          | **説明**                                                                                                                    |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------- |
| **Script**         | デフォルトで満たされます。                                                                                                             |
| **カタログリスト ID**     | デフォルトで入力（ファイルパスを使用）。購入の開始時にこのリストをターゲットにするために使用する識別子。                                                                      |
| **SKU**            | デフォルトで入力（ファイル名を使用）。                                                                                                       |
| **製品タイプ**          | IAP 製品のタイプを選択します。                                                                                                         |
| **製品詳細**           | 以下を含む製品に関する情報を入力します。 Title (タイトル) 説明 言語 字幕 バッジ (テキストおよび画像 URL)                                                            |
| **価格の詳細**          | 以下を含む製品価格情報を入力します。 通貨コード 金額                                                                                               |
| **画像 URL**         | 画像 URL を入力して、製品のディスプレイ画像を指定します。                                                                                           |
| **ストア ID オーバーライド** | 任意。ネーミング要件が異なる アプリストア と google play にリスティングをマップします。以下のフィールドは、SKU がストアの要件を満たしていない場合にのみ使用します。 Apple オーバーライド Google オーバーライド  |

### 既存のカタログのインポート##import-an-existing-catalog

すでに アプリストア または google play でカタログを設定している場合は、プロダクトを再作成する代わりに Unity エディターにインポートできます。

1. Unity エディターで、**サービス** > **アプリ内課金** > **インポート カタログ** を選択します。
2. インポート元のストアの**アプリストア**または **Google Play ストア**のタブを選択します。
3. **ステップ 1:カタログデータ**をフェッチし、ストアの認証情報を入力し、**Fetch Catalog (カタログ**の取得):
   * 秘密鍵 /secret key
   * **シークレットスコープ**
4. **ステップ 2:インポートまたはエクスポート**。生成されたカタログ アイテムの**インポート先**パスを設定し、**適用**を選択します。

> **Note:**
>
> 変更された SKU は既存の`.ucat`ファイルのみを更新し、新しい SKU はインポート先に新しい`.ucat`ファイルを作成します。

カタログをインポートしたら、リモートカタログ[サービスにアップロード](#upload-your-product-catalog-to-the-remote-catalog-service)します。

### APIを使用して製品カタログを作成する##use-the-api-to-create-a-product-catalog

このメソッドは、Unity エディター UI を使用する代わりにエディタースクリプトを使用して製品カタログを管理する場合に使用します。

まず、必要なすべての依存関係を含む `.asmdef` ファイルを作成する必要があります。
以下の例を参照して、`.asmdef`ファイルを作成します。

```json
{
    "name": "MyIAPProject.Authoring",
    "rootNamespace":"MyIAPProject.Authoring",
    "references": [
        "Unity.Services.Core",
        "Unity.Services.Core.Editor",
        "Unity.Services.Core.Internal",
        "Unity.Services.DeploymentApi",
        "Unity.Services.Core.Environments.Editor",
        "UnityEditor.Purchasing.Authoring",
        "UnityEditor.Purchasing.Editor.Authoring.Core",
        "Unity.Purchasing.Editor.Shared",
        "Unity.Purchasing"
    ],
    "includePlatforms": [
        エディター
    ]
}
```

次に、`ILiveContentConfigClient` API を使用してリモートカタログを直接変更できます。

1. `PurchasingAuthoringServiceProvider`から関連するサービスを取得します。
   * `ILiveContentConfigClient`
   * `IEnvironmentsApi`
     `PurchasingAuthoringServiceProvider.GetService<ILiveContentConfigClient>()`
2. 必要な情報を使用して `ILiveContentConfigClient` インターフェースを初期化します。
3. カタログの読み取り/更新の呼び出しを行います (これらの呼び出しは、現在のサインインユーザー権限で行われます)。

> **Warning:**
>
> この操作は破壊的です。項目を送信しないと、カタログに含まれません。また、Deployment プロセスで通常検証される検証もスキップされます。

以下のコードサンプルを参照してください。

```csharp
[MenuItem("IAP/Deployment/Get and print the catalog")]
public static async void Select()
{
    var lcc = PurchasingAuthoringServiceProvider.GetService<ILiveContentConfigClient>();
    var env = PurchasingAuthoringServiceProvider.GetService<IEnvironmentsApi>();
    await lcc.Initialize(
        env.ActiveEnvironmentId.ToString(),
        CloudProjectSettings.projectId,
        CancellationToken.None);
    var items = await lcc.List(CancellationToken.None);
    Debug.Log(string.Join("\n", items.Select(i => $"{i.uSku} - {i.ProductDetails[0].Description}")));
}
```

### カスタムDeploymentウィンドウのインテグレーションを使用して製品カタログを作成##use-a-custom-deployment-window-integration-to-create-your-product-catalog

Deployment ウィンドウを使用してカスタムインテグレーションをホストできるため、CSV などの単純なカスタム Deployment を作成したり、リモートカタログに直接送信したりできます。

単純な Deployment ウィンドウの作成方法については、[Deployment パッケージのドキュメント](https://docs.unity3d.com/Packages/com.unity.services.deployment.api@latest?subfolder=/manual/deployment_api.html)を参照してください。

## リモートカタログサービスへの製品カタログのアップロード##upload-your-product-catalog-to-the-remote-catalog-service

Deploymentウィンドウを使用して、リモートカタログに製品をアップロードします。

1. Unity エディターで、**「Services**」＞「**Deployment**」を選択して Deployment ウィンドウを開きます。
2. リモートカタログに追加する製品を選択し、「**Deploy Selected**(選択済みを展開)」を選択します。


**Frame:**
![Unity エディターの Deployment ウィンドウのスクリーンショット。.ucat カタログアイテムのリストが表示されています。](/api/media?file=/iap/media/images/deployment-window.png)

> **Important:**
>
> 購入時に、IAPはリモート カタログ定義を使用して、D2C支払いプロバイダー チェックアウト データを作成します。IAPは、StripeまたはCodaで直接追加した製品を使用しません。

## リモートカタログからの製品の削除##delete-products-from-your-remote-catalog

Unity エディターでリモートカタログから項目を削除するには、複数の方法があります。

* Inspectorウィンドウでカタログ項目を開き、**Delete Remote**を選択します。
* Deploymentウィンドウを開き、カタログ項目を右クリックして、**Delete Remote**を選択します。

> **Note:**
>
> 名前が変更されたカタログ項目をリモートカタログから削除するには、最初に元の SKU を使用して一時項目を再作成します。その後、Deployment ウィンドウでその項目を削除すると、削除が正常に同期されます。

## 次のステップ##next-steps

このページは、IAPでD2C支払いプロバイダーを設定するワークフローの一部です。このワークフローを続行するには、以下のオプションのいずれかを選択します。

[Integrate D2C payment providers](./workflow.md#create-your-remote-catalog): Integrate D2C payment provider with IAP ワークフロー (D2C 支払いプロバイダーと IAP ワークフローの統合) ページに戻ります。
[Initialize services to handle the startup sequence](./initialize-services.md): ワークフローの次のステップに進み、D2C支払いプロバイダーを設定します。
