[뒤끝팁] 차트 기능으로 바로 수정 가능한 ‘인앱 상점’ 만들기

“유저?‍♂️: 우리는 민감할 수밖에 없어요.
게임 재화일 뿐이라고 해도 내 현실을 투자한 거니까요.

인 앱 결제 수익은 게임의 매출을 책임지는 가장 중요한 요소인데요.

정말 상상하기는 싫지만…

인앱 상점에 표기된 가격과 실제 청구되는 가격이 다르거나
제품의 설명에 오차가 있다면. 어떻게 해야 할까요?

만약 인앱 상점이 클라이언트에서 수동으로 인앱 아이템을 일일이 추가하는 코드로 만들어졌다면

① 코드를 수정하고
② 수정한 버전을 업로드하고 (하루~이틀 소요)
③ 유저는 게임을 다시 업데이트해야 해요.

생각보다 큰 작업이 될지도 모릅니다.


그럼 인앱 상점은 어떻게 구현해야 하는데요?

? 정답은 인앱 아이템 차트를 서버에서 가져와 클라이언트에서 뿌려주는 것입니다.

그리고 뒤끝의 차트 기능을 이용하면, 언제든 수정 가능한 인앱 상점 리스트를 구현할 수 있습니다.

뒤끝으로 바로 수정이 가능한 인앱 상점 리스트 만들기! 지금부터 시작합니다?


1. 인앱 아이템 차트 작성하기 (CSV)

아래와 같이 차트(예시)를 구성하여 CSV를 작성합니다.

차트의 기본 포맷은 뒤끝 개발자 문서(콘솔 가이드)에서 제공하고 있으니 참고해 주세요! ? [바로 가기]

googleProductIDShopNameShopingfoitemNameitemCountShopPrice
Chrystal100크리스탈 100개크리스탈 100개Chrystal1001000
Chrystal600크리스탈 600개크리스탈 500개 가격에 추가로 100개를 더 준다고?!Chrystal6005000
Chrystal1300크리스탈 1,300개크리스탈 1,000개 가격에 추가로 300개를 더 준다고?!Chrystal130010000
Chrystal3500크리스탈 3,500개크리스탈 3,000개 가격에 추가로 500개를 더 준다고?!Chrystal350030000
Gold100골드 100만100만 골드 즉시 증정!Gold1005000
Gold1200골드 1,200만1,000만 골드 즉시 증정! 보너스로 200만을 더 준다고?!Gold120050000
DailyMoney월 정액 상품매일 크리스탈 60개, 10만 골드를 제공!Daily16900
(예시) 인앱 xlsx
? 용어 해설
◾ googleProductID : 구글 콘솔에 등록된 인앱 결제 상품의 ID 입니다.
◾ ShopName : 실제 게임의 상점에서 보여질 이름입니다.
◾ Shopingfo : 실제 게임의 상점에서 보여질 이름입니다.
◾ itemName : 아이템의 종류입니다.
◾ itemCount : 업데이트할 아이템의 수입니다.
◾ ShopPrice : 표시되는 가격입니다.

2. 뒤끝 콘솔에 차트 업로드하기

뒤끝 콘솔은 버튼 클릭 만으로 차트를 업로드할 수 있어요!

[콘솔] – [대시보드] – [차트 관리] 메뉴로 가서 1번에서 작성한 인앱 아이템 차트를 업로드해 줍니다.

(이미지 참고)

뒤끝 콘솔에서 차트를 관리하는 방법을 보여주는 이미지
뒤끝 콘솔의 [차트 관리] 실제 화면

3. 뒤끝 차트 기능 불러오기

차트를 콘솔에 업로드하였다면, 이제 업로드한 차트를 클라이언트에 불러와야 합니다.

① 뒤끝 차트 기능 불러오기 함수 호출

먼저 게임 시작 시 뒤끝 차트의 기능을 불러와 상점 아이템 리스트를 만듭니다.

주의!
상점을 열 때마다 차트를 불러올 경우, 과도한 요청으로 인해 지연이 발생할 수 있어요.
쾌적한 플레이를 위해, 게임 시작 전 로딩 구간에 차트를 불러오는 것을 추천합니다! 
public void InitializeCashShopInfo()
{
   //동기로 해도 되지만 차트는 데이터가 많아 오래 걸릴 수 있으니 SendQueue를 추천합니다!
   SendQueue.Enqueue(Backend.Chart.GetChartContents,"3434", callback =>
   {
       //차트 불러오기의 리턴값을 인자로 보내줍니다.
       SetShopInfo(callback);
   });
}

② 불러온 차트 내용을 상점 아이템 리스트로 구성

아래와 같이 저장한 아이템 리스트를 이용하여 유저가 상점에 들어갔을 때 아이템들을 표시해 줍니다.

◾ SetShopInfo() : 뒤끝 차트의 내용을 클라이언트에 대입
◾ SetUnityIAP() : 유니티 IAP 사용 시, 구매 가능한 물품을 Unity IAP 용 리스트에 대입

using UnityEngine.Purchasing;

public void SetShopInfo(BackendReturnObject bro)
{

     List<ShopItem> itemList = new List<ShopItem>();
     //FlattenRows()를 사용하면 Rows() 혹은 GetReturnValueToJSON()["rows"]와 비슷하지만 
     //["S"]["N"]등 데이터 타입을 나타내는 컬럼을 지워줄 수 있어요!
     for (int i = 0; i < bro.FlattenRows().Count; i++)
     {
          ShopItem s = new ShopItem(
                    bro.FlattenRows()[i]["googleProductID"].ToString(),
                    bro.FlattenRows()[i]["ShopName"].ToString(),
                    bro.FlattenRows()[i]["ShopInfo"].ToString(),
                    bro.FlattenRows()[i]["itemName"].ToString(),
                    Int32.Parse(bro.FlattenRows()[i]["itemCount"].ToString()),
                    bro.FlattenRows()[i]["ShopPrice"].ToString()
          );

        itemList.Add(s);

        SetUnityIAP(itemList);
    }
}

//유니티 IAP에 상품을 등록해주는 함수입니다.
public void SetUnityIAP(List<ShopItem> itemList)
{
    var module = StandardPurchasingModule.Instance();
    ConfigurationBuilder builder = ConfigurationBuilder.Instance(module);
    
    foreach(var li in itemList)
    {
      builder.AddProduct(li.googleProductID, ProductType.Consumable);
    }

     UnityPurchasing.Initialize(this, builder);
}

//뒤끝 차트에서 받은 데이터와 유니티 IAP에 등록할 인앱아이템 정보용 클래스입니다.
public class ShopItem
{
  string googleProductID;
  string ShopName;
  string ShopInfo;
  string itemName;
  int itemCount;
  string ShopPrice;

  public ShopItem(string gId, string sName, string sInfo, string iName, int iCount, string sPrice)
  {
     googleProductID = gId;
     ShopName = sName;
     ShopInfo = sInfo;
     itemName = iName;
     itemCount = iCount;
     ShopPrice = sPrice;
  }
}

지금까지 차트의 정보를 이용하여 인 게임에서의 상품을 표시하는 방법을 알아보았습니다!

위 방법을 활용하면 아이템의 표시에 문제가 발생하더라도
뒤끝 콘솔에 수정된 차트 파일을 업로드하는 것만으로 에러를 픽스할 수 있는데요?

차트 수정 후 업로드를 진행할 때에는, 유저가 최신 버전 차트를 다시 받아올 수 있도록
잠시 프로젝트를 점검 상태로 돌려두는 센스! 잊지 마세요

이번에 예시로 들었던 인앱 상점뿐 아니라
게임 재화로 이용 가능한 일반 상점들도 얼마든 구현 가능하답니다!

뒤끝 차트 기능을 사용하여 관리하기 쉬운 상점을 만들어보세요?

1

2 Comments

  1. Your place is valueble for me. Thanks!?

댓글