다음을 통해 공유


매장 및 판매(레거시 경제)

Important

Economy v1 API는 유지 관리 모드에 있으며 새로운 기능은 제공되지 않으며 버그 수정만 제공됩니다. v1 API는 당분간 유지될 것입니다. PlayFab Economy의 다음 버전에 대해 자세히 알아보려면 Economy v2 개요를 참조하세요!

PlayFab에서 Store카탈로그통화를 토대로 구축됩니다. 기본 카탈로그에서는 게임의 모든 항목을 정의하고 사용자가 생성한 통화로 가격을 할당해야 합니다.

Store에서는 카탈로그에 있는 아이템의 하위 세트를 정의하고 특정 가격으로 구매할 수 있도록 지정해야 합니다. 이 가격은 카탈로그 가격과 다를 수 있습니다.

Store를 통해 특정 아이템 세트를 골라 설정된 기간 동안 특정 가격으로 제공할 수 있습니다.

이 자습서에서는 가상 통화와 진짜 돈을 기반으로 Store를 정의하는 모범 사례를 보여 줍니다.

요구 사항

  • PlayFab 게임 관리자와 친숙해져야 합니다.
  • 하나 이상의 가상 통화를 정의해야 합니다. 이 자습서의 이후 예시에서는 다음을 사용합니다.
    • SP(은색 조각)
    • GP(금색 조각).
  • 하나 이상의 아이템이 포함된 기본 카탈로그를 정의해야 합니다.
    • 첫 번째 예는 드롭 표 자습서에 설명된 여러 아이템/번들과 유사한 것을 사용합니다.
    • 이 자습서의 두 번째 예는 소, 중, 대 체력 물약을 사용합니다.

모범 사례

카탈로그 가격은 장기 고정되어야 하고, 아이템의 실제 가격을 정의해야 합니다.

Store는 일시적이어서 LiveOps 전략에 따라 추가 및 제거되어야 합니다.

참고 항목

Store를 순환시켜 아이템을 활성 Store에 넣고 뺌으로써 최대 수익을 기대하세요.

Store 및 카탈로그 가격에 대한 일반 정보

  • 가격: 카탈로그에 정의된 가격은 아이템의 정규 가격으로 정의되어야 합니다. Store를 통해 일반적인 소매 전술을 활용하여 아이템의 임시 판매 가격을 정의할 수 있습니다. 또는 스토어에서 일반적으로 전혀 판매할 수 없는 항목에 대해 임시 가격을 제공할 수 있습니다.
  • 비용 0: 특정 통화로 된 항목의 비용이 설정되지 않았거나(null) 0인 경우 카탈로그 및 스토어 모두에 대해 해당 통화를 사용하여 구매할 수 없습니다. 제로 비용을 사용하면 다른 통화에 대한 항목을 공백으로 두거나 0으로 다시 설정하여 무료 통화 또는 프리미엄 통화로만 항목을 사용할 수 있도록 할 수 있습니다.
  • 진짜 돈: RM 통화는 모든 카탈로그 및 Store에서 사용할 수 있습니다. RM은 진짜 돈 거래만을 표시하는 제한된 통화 키입니다. 상당한 가치가 있는 항목 또는 프리미엄 통화가 포함된 번들/컨테이너에 대해서만 RM을 청구해야 합니다.
  • 가격이 둘 중 하나임: 한 아이템에 두 가격이 정의된 경우, 해당 아이템은 둘 중 어느 가격으로든 구입할 수 있습니다. 단일 품목에 대해 두 가지 통화를 요구하는 것은 불가능합니다.

진짜 돈 Store 정의

게임 관리자에서 다음을 수행합니다.

  • 타이틀로 이동합니다.
  • 왼쪽 메뉴에서 경제성을 선택합니다.
  • 카탈로그 탭에서 기본 카탈로그를 선택하고 Store를 선택합니다.
  • 새 Store 버튼을 선택합니다.

드롭 표 예에서는 11 아이템 드롭 번들을 만들었습니다. 이 예에서는 실제 현금 스토어에서 사용할 수 있는 유사한 번들 세 개를 만들 것입니다.

참고 항목

어떤 아이템이든 진짜 돈을 받고 판매할 수 있지만 특정 유가 아이템 또는 번들만 직접 판매할 수 있도록 만드는 것이 좋습니다.

아래에 제공된 스크린샷은 온전한 새 Store를 보여줍니다, 세 아이템 번들진짜 돈의 대상입니다.

게임 관리자 - 경제성 - Store 편집

진짜 돈 구매를 완료하기 위한 내용은 고등 자습서 비영수증 결제 처리에서 다룹니다.

진짜 돈 Store에 대한 모범 사례

진짜 돈을 사용하는 방법은 게임의 특정 디자인에 따라 크게 달라집니다. 게임내 아이템 직접 구입은 유효하지만 흔하지 않습니다.

더욱 일반적으로는 게임이 진짜 돈을 사용한 프리미엄 가상 통화 구입을 허용해야 합니다. 프리미엄 통화 대 진짜 돈의 다양한 비로 여러 Store를 순환할 수 있습니다.

기본 요령은 플레이어가 항상 귀하에게 돈을 줄 수 있도록 하는 것입니다.

가상 통화 Store 정의

가상 통화로 인게임 아이템을 구입하기 위한 요령과 코드를 살펴봅시다.

초기 단계는 위의 예와 거의 동일합니다.

  1. 무료통화 가격으로 작음, 중간대형 체력 물약이라는 세 가지 새 항목을 만들고 프리미엄통화 가격을 만듭니다.
  2. 판매 중인 항목으로 새 스토어를 만드세요.

게임 관리자 - 경제성 - 새 Store

한 번에 여러 아이템 구매

가상 통화로 한 아이템을 구매하려면 Store 빠른 시작에 설명된 대로 PurchaseItem 메서드를 사용합니다. 이 자습서에서는 한 번의 구매로 여러 항목을 구매하는 방법을 다룹니다.

이 과정의 첫 번째 단계는 Store를 얻어 사용자에게 표시하는 것입니다.

void GetVcStore()
{
    var primaryCatalogName = "TestCatalog-001"; // In your game, this should just be a constant matching your primary catalog
    var storeId = "Potion Store"; // In your game, this should be a constant for a permanent store, or retrieved from titleData for a time-sensitive store
    var request = new GetStoreItemsRequest
    {
        CatalogVersion = primaryCatalogName,
        StoreId = storeId
    };
    PlayFabClientAPI.GetStoreItems(request, LogSuccess, LogFailure);
}

이 예의 LogSuccess 콜백은 스토어의 모든 항목, 스토어 가격 및 스토어 자체에 포함된 모든 메타데이터에 대한 전체 설명이 포함된 GetStoreItemsResult를 수신합니다.

Store 표시 모범 사례

Store가 있는 게임은 GetCatalogItems 메소드를 사용하여 기본 카탈로그를 호출하고 캐시해야 합니다. 판매 품목 옆에 10% 할인 또는 유사한 보너스 장식과 함께 카탈로그 가격과 스토어 가격을 모두 표시할 수 있습니다.

특히 세일이 한시적 오퍼인 경우, 플레이어는 세일 아이템을 구입할 가능성이 높습니다.

이 시점에서 사용자에게 구매하려는 항목과 수량을 선택할 수 있는 기회를 제공하는 것은 GUI 코드의 책임입니다.

  • 게임과 PlayFab 사이의 나머지 단계는 몇 가지 별도의 API 호출이지만, 여러 호출의 순서를 플레이어에게 보이지 않게 만들 수 있습니다.
  • 현재까지의 구매에 대한 모든 정보를 수집하고 모든 플레이어 입력이 수집된 후 호출의 전체 순서를 만드세요.
void DefinePurchase()
{
    var primaryCatalogName = "TestCatalog-001"; // In your game, this should just be a constant matching your primary catalog.
    var storeId = "Potion Store"; // At this point in the process, it's just maintaining the same storeId used above.
    var request = new StartPurchaseRequest
    {
        CatalogVersion = primaryCatalogName,
        StoreId = storeId,
        Items = new List<ItemPurchaseRequest> {
             // The presence of these lines are based on the results from GetStoreItems, and user selection - Yours will be more generic.
            new ItemPurchaseRequest { ItemId = "Small Health Potion", Quantity = 20,},
            new ItemPurchaseRequest { ItemId = "Medium Health Potion", Quantity = 100,},
            new ItemPurchaseRequest { ItemId = "Large Health Potion", Quantity = 2,},
        }
    };
    PlayFabClientAPI.StartPurchase(request, result => { Debug.Log("Purchase started: " + result.OrderId); }, LogFailure);
}

아이템 선택 과정에서 사용자는 이러한 아이템을 위해 지출할 통화를 선택할 수 있어야 합니다. 이 예에서 모든 항목의 비용은 SPGP입니다. 즉, 사용자가 사용할 통화를 선택할 수 있습니다.

참고 항목

위의 코드 예에서 StartPurchase API의 결과에는 PaymentOptions 목록이 포함되어 있습니다. 각 결제 옵션에는 구매에 사용할 수 있는 Currency, PriceProviderName이(가) 포함되어 있습니다.

제한 사항

하나의 구매에서는 가상 통화만 허용됩니다. 선택된 모든 아이템을 하나의 통화로 구입할 수 있어야 합니다.

호출에서 통화를 지정해야 합니다, 이는 여러 가능한 통화가 있을 때 중요합니다. 선택한 통화로 해당 비용이 없는 항목이 요청에 있는 경우 시퀀스가 실패합니다.

ProviderName을(를) 호출에서 지정해야 합니다. 실제 현금 구매의 경우 공급자 이름은 Facebook, PayPal 또는 Steam과 같이 구매 자금을 조달하는 데 사용됩니다. VC 구매의 경우 타이틀 ID에 기반하는 문자열입니다. 이전 참고에 설명된 대로 StartPurchaseResultPaymentOptions 필드에서 ProviderName을(를) 가져올 수 있습니다.

VC 구매의 경우 타이틀에 대한 ProviderName은(는) 10진수로 표시된 16진수 TitleId과(와) 연결된 "Title"이라는 단어로 구성된 문자열입니다. 예를 들어 "Title123456"입니다.

Store 아이템 표시 모범 사례

Store의 모든 아이템이 일관된 옵션을 갖도록 함으로써 플레이어의 혼동을 막으세요.

진짜 돈 아이템은 프리미엄 VC 아이템과는 별도 Store에, 그리고 무료 VC 아이템과도 별도 Store에 있어야 합니다. 하나의 Store가 여러 통화를 허용하면 해당 Store의 모든 아이템이 일관되게 같은 복수 통화 세트를 사용해야 합니다. 원활한 고객 경험을 제공하기 위해 필요한 만큼 Store를 만드세요.

void DefinePaymentCurrency(string orderId, string currencyKey, string providerName)
{
    var request =new PayForPurchaseRequest {
        OrderId = orderId, // orderId comes from StartPurchase above.
        Currency = currencyKey, // User defines which currency they wish to use to pay for this purchase (all items must have a defined/non-zero cost in this currency).
        ProviderName = providerName // providerName comes from the PaymentOptions in the result from StartPurchase above.
    };
    PlayFabClientAPI.PayForPurchase(request, LogSuccess, LogFailure);
}

마지막으로, 구매가 완벽하게 정의되면 아래와 같이 프로세스를 완료할 수 있습니다.

// Unity/C#
void FinishPurchase(string orderId)
{
    var request = new ConfirmPurchaseRequest { OrderId = orderId };
    PlayFabClientAPI.ConfirmPurchase(request, LogSuccess, LogFailure);
}

API 오류 결과 처리 모범 사례

단일 API 호출은 여러 가지 이유로 실패할 수 있습니다. 폰 같은 무선 기기는 종종 접속이 간헐적이어서 임의 대기 시간 때문에 인터넷 호출이 실패할 수 있습니다.

각각의 호출은 여러 실패 조건에 대해 확인해야 합니다. 응답에서 요청이 유효하지 않다고 표시되면 중단해야 합니다(예: 단일 통화로 여러 항목을 구매할 수 없음). 스토어 디자인에 문제가 있을 수 있습니다.

반응이 접속 실패를 표시하는 경우, 귀하는 지수 백오프 지연으로 다시 시도할 수 있습니다.

결론

Store는 플레이어로 하여금 아이템을 구매하도록 장려하는 훌륭한 메커니즘입니다.

Store는 어떤 종류의 가상 통화와도 협력합니다. 또한 Store는 대체 API 메소드 집합을 통해 진짜 돈과도 협력할 수 있습니다.

실제 현금 구매에 대한 자세한 내용은 비영수증 결제 처리를 참조하세요.

고급 스토어 사용에 대해서는 플레이어 세그먼트용 사용자 지정 스토어 자습서를 참조하세요.