# 원격 카탈로그 생성

> 제품 카탈로그를 정의하고 Remote Catalog 서비스에 업로드합니다.

제품 카탈로그를 구성하고 새 버전을 설치하지 않고도 사용자가 최신 제품에 액세스할 수 있도록 Remote Catalog 서비스에 [업로드](#upload-your-product-catalog-to-the-remote-catalog-service)할 수 있습니다.

제품 카탈로그를 원격 카탈로그에 업로드하면 Unity IAP SDK가 `RemoteCatalogProvider` 클래스에서 제품 카탈로그를 가져와 사용자에게 제품을 표시할 수 있습니다. 이는 다음과 같은 이점을 제공합니다.

* 사용자가 애플리케이션을 업데이트할 필요 없이 제품과 가격을 실시간으로 배포할 수 있습니다.
* 여러 결제 제공업체에서 제품 정보를 구성할 필요는 없습니다.

## 제품 및 카탈로그 목록##products-and-catalog-listings

Unity IAP는 두 가지 관련 개념으로 카탈로그를 나타냅니다.

* **제품**은 사용자에게 부여하는 것입니다. 각 제품에는 `productId`라고도 하는 SKU가 있습니다.
* **카탈로그 목록**은 제품의 구매 가능한 버전으로, `catalogListingId`에 의해 식별됩니다. 제품에는 여러 개의 카탈로그 리스트가 있을 수 있으므로 동일한 제품을 두 가지 방법 이상으로 판매할 수 있습니다.

제품을 구매하려면 사용자가 해당 카탈로그 목록 중 하나를 구매합니다. 구매를 시작하거나 특정 리스팅을 타게팅할 때는 `productId`가 아닌 `catalogListingId`를 사용하십시오. 제품에 대해 두 개 이상의 리스트를 정의하지 않으면 Unity IAP는 `catalogListingId`가 SKU와 일치하는 단일 카탈로그 리스트를 만듭니다. 기존 단일 목록 카탈로그는 계속 변경 없이 작동합니다.

> **Note:**
>
> 제품 카탈로그를 배포하려면 먼저 [배포 패키지](https://docs.unity3d.com/Packages/com.unity.services.deployment@latest)를 설치해야 합니다.

> **Warning:**
>
> D2C(Direct-to-Consumer) 결제 제공업체의 경우 IAP Catalog 창을 사용하여 상품을 생성하지 마십시오. [IAP 카탈로그 항목으로 상품을 생성](#create-a-product-catalog-in-the-unity-editor)해야 합니다. 마찬가지로 카탈로그 에디터의 **Auto-initialize** 옵션은 D2C 결제 제공업체에서 작동하지 않으므로 코드리스 IAP 경로를 사용하지 마십시오.

## 제품 카탈로그 정의##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 대시보드의 **인앱 구매** > **카탈로그**에서 카탈로그를 직접 작성할 수도 있습니다.

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 item**을 선택합니다.
2. 카탈로그 항목 이름을 지정합니다. 그러면 카탈로그 아이템 에셋이 생성되고 인스펙터 창 에셋이 열립니다.
3. 카탈로그 항목의 세부 정보를 입력합니다. 자세한 내용은 [카탈로그 항목 자산 인스펙터 레퍼런스](#catalog-item-asset-inspector-reference)를 참조하십시오.
4. **Apply**를 선택합니다.

이 단계를 반복하여 모든 제품의 카탈로그 항목을 생성합니다.


**Frame:**
![Unity 에디터 인스펙터 창 열려 있는 카탈로그 아이템 에셋 스크린샷. 이 이미지는 카탈로그 나열 ID, Sku, 제품 타입, 제품 세부 정보, 가격 세부 정보, 이미지 URL, 스토어 ID 오버라이드에 대한 필드를 보여줍니다.](/api/media?file=/iap/media/images/catalog-inspector.png)

제품을 추가한 후 **View in Deployment 창**을 선택하여 Deployment 창에서 제품 카탈로그를 열고 원격 카탈로그에 [업로드합니다](#upload-your-product-catalog-to-the-remote-catalog-service).

Unity 에디터 아닌 파일에서 직접 제품 세부 정보를 편집할 수도 있습니다. 파일의 프로퍼티는 [카탈로그 항목 에셋 인스펙터 레퍼런스](#catalog-item-asset-inspector-reference)에 나열된 프로퍼티에 매핑됩니다.

#### 카탈로그 아이템 에셋 인스펙터 레퍼런스##catalog-item-asset-inspector-reference

다음 프로퍼티를 참고하여 IAP 카탈로그 항목을 정의합니다.

| **프로퍼티**         | **설명**                                                                                                                              |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| --**script**     | 기본적으로 채워짐                                                                                                                           |
| **카탈로그 리스팅 ID**  | 기본값으로 채워짐(파일 경로 사용) 구매를 시작할 때 이 리스트를 타게팅하는 데 사용하는 ID입니다.                                                                            |
| **SKU**          | 기본값으로 채워짐(파일 이름 사용)                                                                                                                 |
| **제품 유형**        | IAP 상품의 유형을 선택합니다.                                                                                                                  |
| **제품 상세 정보**     | 다음을 포함하여 제품에 대한 정보를 입력합니다.  제목 설명 Language 자막 배지(텍스트 및 이미지 URL)                                                                     |
| **가격 세부 정보**     | 다음을 포함하여 제품 가격 정보를 입력합니다.  통화 코드 금액                                                                                                 |
| **이미지 URL**      | 이미지 URL을 입력하여 제품에 표시할 이미지를 지정합니다.                                                                                                   |
| **스토어 ID 오버라이드** | 선택 사항입니다. 서로 다른 명명 요구 사항이 있는 앱 스토어 Google Play에 리스트를 매핑합니다. SKU가 스토어의 요구 사항을 충족하지 않는 경우에만 다음 필드를 사용하십시오.  Apple 오버라이드 Google 오버라이드  |

### 기존 카탈로그 임포트##import-an-existing-catalog

이미 앱 스토어 또는 Google Play에서 카탈로그를 설정한 경우 제품을 다시 생성하지 않고 Unity 에디터 임포트할 수 있습니다.

1. Unity 에디터에서 **서비스** > **인앱 구매** > **카탈로그 임포트**를 선택합니다.
2. 가져올 스토어의 **앱 스토어** 또는 **Google Play 스토어** 탭을 선택합니다.
3. **단계 1: 카탈로그 데이터 가져오기**, 스토어 자격 증명을 입력한 다음 **카탈로그 가져오기**를 선택합니다.
   * 비밀 키
   * **비밀 범위**
4. **2단계에서: Import 또는 Export**를 선택하고, 생성된 카탈로그 항목의 **Import New** 대상 경로를 설정한 다음 **Apply**를 선택합니다.

> **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": [
        "Editor"
    ]
}
```

그런 다음 `ILiveContentConfigClient` API를 사용하여 원격 카탈로그를 직접 수정할 수 있습니다.

1. `PurchasingAuthoringServiceProvider`를 통해 관련 서비스를 얻으십시오.
   * `ILiveContentConfigClient`
   * `IEnvironmentsApi`
     `PurchasingAuthoringServiceProvider.GetService<ILiveContentConfigClient>()`
2. 필요한 정보로 `ILiveContentConfigClient` 인터페이스를 초기화합니다.
3. 카탈로그를 읽거나 업데이트하기 위한 호출을 생성합니다. 호출은 현재 로그인된 사용자 권한으로 이루어집니다.

> **Warning:**
>
> 이 작업은 파괴적입니다. 아이템을 전송하지 않으면 카탈로그에 포함되지 않습니다. 또한 배포 프로세스에서 일반적으로 확인하는 확인을 건너뛰기도 합니다.

다음 코드 샘플을 참고하십시오.

```csharp
[MenuItem("IAP/배포/카탈로그 가져오기 및 출력")]
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 패키지 기술 자료](https://docs.unity3d.com/Packages/com.unity.services.deployment.api@latest?subfolder=/manual/deployment_api.html)를 참조하십시오.

## 제품 카탈로그를 Remote Catalog 서비스에 업로드합니다.##upload-your-product-catalog-to-the-remote-catalog-service

Deployment 창을 사용하여 제품을 Remote Catalog에 업로드합니다.

1. Unity 에디터에서 **서비스** > **배포**를 선택하여 배포 창을 엽니다.
2. 원격 카탈로그에 추가할 제품을 선택하고 **선택 배포**를 선택합니다.


**Frame:**
![Unity 에디터 Deployment 창 스크린샷. .ucat 카탈로그 항목 리스트가 표시됩니다.](/api/media?file=/iap/media/images/deployment-window.png)

> **Important:**
>
> 구매 시 IAP는 원격 카탈로그 정의를 사용하여 D2C 결제 공급자 체크아웃 데이터를 구성합니다. IAP는 스트라이프나 코다에 직접 추가한 제품을 사용하지 않습니다.

## 원격 카탈로그에서 상품 삭제##delete-products-from-your-remote-catalog

Unity 에디터 원격 카탈로그에서 항목을 삭제하는 방법에는 여러 가지가 있습니다.

* 인스펙터 창에서 카탈로그 항목을 열고 **Remote Delete**를 선택합니다.
* Deployment 창을 열고 카탈로그 항목을 마우스 오른쪽 버튼으로 클릭하고 **Delete Remote**를 선택합니다.

> **Note:**
>
> 원격 카탈로그에서 이름이 변경된 카탈로그 항목을 삭제하려면 먼저 원본 SKU를 사용하여 임시 항목을 다시 생성합니다. 그런 다음 Deployment 창을 통해 해당 항목을 삭제하여 제거를 성공적으로 동기화할 수 있습니다.

## 다음 단계##next-steps

이 페이지는 IAP를 사용하여 D2C 결제 제공업체를 설정하는 워크플로의 일부입니다. 이 워크플로를 계속 진행하려면 다음 옵션 중 하나를 선택합니다.

[Integrate D2C payment providers](./workflow.md#create-your-remote-catalog): Integrate D2C payment providers with IAP 워크플로 페이지로 돌아갑니다.
[Initialize services to handle the startup sequence](./initialize-services.md): 워크플로의 다음 단계로 이동하여 D2C 결제 제공업체를 설정합니다.
