> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Economy v2 구독

> PlayFab Economy v2 가상 구독을 만들어 지속형 게임 내 아이템에 대한 시간 기반 액세스를 부여하고 반복 플레이어 혜택을 관리합니다.

구독을 사용하면 지속형 상품에 대한 시간 기반 액세스를 부여할 수 있습니다. 구독 내 아이템은 [GetInventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/get-inventory-items) 호출 후 플레이어의 인벤토리에서 언패킹됩니다.

<Note>
  이 문서는 게임 내부에 있는 구독인 가상 구독에 중점을 둡니다.
</Note>

## 구독 만들기

구독을 만들려면 먼저 게임에서 접근/구매 가능하도록 하려는 [Catalog Items](/services/playfab/economy-monetization/economy-v2/quickstart#step-3---publish-an-item-to-the-catalog), [Currency](/services/playfab/economy-monetization/economy-v2/quickstart#part-2-inventory-and-virtual-currencies-overview) 또는 [User Generated Content (UGC)](/services/playfab/economy-monetization/economy-v2/ugc/quickstart)가 게시되어 있는지 확인해야 합니다. 구독을 만들기 전에 카탈로그를 설정하려면 [Economy V2 Quickstart](/services/playfab/economy-monetization/economy-v2/quickstart)를 참조하세요.

### GameManager

1. **Economy** > **Catalog (V2)** 로 이동합니다.
2. **Subscriptions** 탭에서 **New Subscription**을 선택합니다.

### API

[CreateDraftItem](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/create-draft-item) API를 사용하여 구독을 만들 수 있습니다.

구독을 만드는 `CreateDraftItem` API 요청 예:

```json theme={null}
{
  "Item": {
   "Type": "subscription",
    "Title": {
      "NEUTRAL": "Holiday Skins Pass"
    },
    "StartDate": "2023-03-07T00:01:00.0000000Z",
    "ItemReferences":[
      {
        "Id":"{{GlowingGlovesItemID}}",
        "Amount": 1
      }, 
      {
        "Id":"{{ShinyShoesItemID}}", 
        "Amount": 1
      }
    ],
        "PriceOptions": {
          "Prices": [
        {
            "UnitDurationInSeconds":604800,
              "Amounts": [
                {
                    "ItemId": "{{DiamondItemID}}",
                    "Amount": 5
                },
                {
                    "ItemId": "{{GoldItemID}}",
                    "Amount": 10
                }
                ]
        },      
        {
            "UnitDurationInSeconds":2628000,
              "Amounts": [
                {
                    "ItemId": "{{DiamondItemID}}",
                    "Amount": 7
                },
                {
                    "ItemId": "{{GoldItemID}}",
                    "Amount": 12
                }
                ]
        } ]
          }
        },
  "Publish": true
}
```

***

위의 Holiday Skins Pass 구독은 두 개의 다른 유효 기간에 대해 두 가격 지점에서 `Glowing Gloves`와 `Shiny Shoes` 두 개의 아이템을 부여합니다. 첫 번째 가격 세트 5 다이아몬드와 10 골드는 구독이 1주일 동안 유효하도록 보장하며, 두 번째 가격 세트 7 다이아몬드와 12 골드는 구독이 1개월 동안 유효하도록 보장합니다. 시간 기간은 초 단위로 설정해야 함에 유의하세요.

이는 구독이 만들어지고 게시되었다는 응답을 반환해야 합니다.

```json theme={null}
{
  "code": 200,
    "status": "OK",
    "data": {
        "Item": {
            "Id": "{{NewlyCreatedSubscriptionItemID}}",
            "Type": "subscription",
            "AlternateIds": [],
            "Title": {
                "NEUTRAL": "Holiday Skins Pass"
            },
    ...
}
```

***

## 인벤토리 내 구독

구독은 ID, StackId, 만료 날짜 및 표시 속성과 함께 플레이어의 인벤토리 컬렉션에 표시됩니다. 구독 내 모든 것은 Add, Subtract, Update 등을 사용하여 다른 아이템과 마찬가지로 수정할 수 있습니다.

Type 필터가 있는 [GetInventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/get-inventory-items)를 사용하여 플레이어가 현재 가지고 있는 모든 구독을 검색할 수 있습니다.

```json theme={null}
{ 
    "Entity": {
        "Type": "title_player_account", 
        "Id": "ID" 
    }, 
    "CollectionId": "default", 
    "Filter": "type eq 'subscription'"
}

**Sample Response**

{
    "code": 200,
    "status": "OK",
    "data": {
        "Items": [
            {
                "Id": "{{SubscriptionID}}",
                "StackId": "default",
                "DisplayProperties": {},
                "Type": "subscription",
                "ExpirationDate": "2023-08-27T23:59:59Z"
            }
        ],
        "ETag": "1/Mw=="
    }
}
```

만료되지 않은 구독은 읽기 시점에 언패킹됩니다. 언패킹된 아이템에는 예상 ID, Subscription ID와 구독의 StackId로 구성된 고유한 복합 StackId가 있습니다. 수량은 구독 아이템 참조에 구성된 수량으로 설정됩니다. 이러한 언패킹된 아이템은 변경할 수 없으며 Add, Subtract, Update 등을 사용하여 수정할 수 없습니다.

```json theme={null}

{ 
    "Entity": {
        "Type": "title_player_account", 
        "Id": "ID" 
    }, 
    "CollectionId": "default", 
    "Filter": "StackId eq 'SubscriptionItemID:default'"
}

**Sample Response**

{
    "code": 200,
    "status": "OK",
    "data": {
        "Items": [
            {
                "Id": "{{GlowingGlovesItemID}}",
                "StackId": "{{SubscriptionID:default}}",
                "DisplayProperties": {},
                "Amount": 1,
                "Type": "catalogItem"
            },
            {
                "Id": "{{ShinyShoesItemID}}",
                "StackId": "{{SubscriptionID:default}}",
                "DisplayProperties": {},
                "Amount": 1,
                "Type": "catalogItem"
            }
        ],
        "ETag": "1/NQ=="
    }
}
```

구독 언패킹은 필터링 및 페이징 전에 발생하므로 구독 아이템은 컬렉션의 다른 아이템과 마찬가지로 안정적으로 필터링 및 페이징할 수 있습니다.

[UpdateInventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/update-inventory-items), [AddInventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/add-inventory-items), [SubtractIventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/subtract-inventory-items)를 사용하여 플레이어의 구독 만료 날짜를 업데이트할 수 있습니다.

여기서 `UpdateInventoryItems` API 호출은 구독의 만료 날짜를 업데이트합니다.

```json theme={null}
{
   "Entity": { 
      "Type": "title_player_account", 
      "Id": "{{ID}}" 
    }, 
  "CollectionId": "default", 
   "Item": { 
        "Id": "{{SubscriptionID}}", 
        "StackId": "default",
        "DisplayProperties": {},
        "Type": "subscription",
        "ExpirationDate": "2023-03-27T23:59:59Z" 
    } 
} 
```

여기서 `AddInventoryItems` API 호출은 DurationInSeconds 매개 변수를 늘려 만료 날짜를 연장합니다.

```json theme={null}
{
    "Entity": { 
        "Type": "title_player_account", 
        "Id": "{{ID}}" 
    }, 
    "CollectionId": "default", 
    "Item": { 
        "Id": "{{SubscriptionID}}" 
    }, 
    "DurationInSeconds":2628000 
} 
```

여기서 `SubtractInventoryItems` API 호출은 DurationInSeconds 매개 변수를 줄여 만료 날짜를 단축합니다.

```json theme={null}
{
    "Entity": { 
        "Type": "title_player_account", 
        "Id": "{{ID}}" 
    }, 
    "CollectionId": "default", 
    "Item": { 
        "Id": "{{SubscriptionID}}" 
    }, 
    "DurationInSeconds":60 
} 
```


## Related topics

- [PlayFab Economy란?](/ko/services/playfab/economy-monetization/economy-what-is.md)
- [Economy V2 타깃 오퍼](/ko/services/playfab/economy-monetization/economy-v2/player-segmented-monetization/targeted-offers.md)
- [Economy 버전 2(V2) FAQ](/ko/services/playfab/economy-monetization/economy-v2/faq.md)
- [Economy V2 제한](/ko/services/playfab/economy-monetization/economy-v2/limits.md)
- [Economy v2 개요](/ko/services/playfab/economy-monetization/economy-v2/overview.md)
