Unity IAP는 중국 밖에 있는 개발자가 중국 시장에서 앱을 효율적으로 퍼블리시할 수 있는 채널을 제공합니다. 이 가이드에서는 Unity 채널 SDK를 소개하고 개발자가 IAP 콘텐츠를 Xiaomi Mi Game Center 플랫폼에 퍼블리시하는 전체 절차에 대해 설명합니다.
Mi Game Center에 게임을 퍼블리시하는 절차는 다음 3단계로 구성됩니다.
Mi Game Center는 Xiaomi의 공식 Android 스토어입니다. 여기에서 사용자는 보안 결제 포털을 사용하여 Xiaomi 플랫폼용 상품을 찾아보고 구매할 수 있습니다. 자세한 내용은 Unity 에디터의 Xiaomi 파트너 웹사이트를 참조하십시오.
Unity 채널은 사용자 로그인, 결제 관리, 그리고 중국 정부의 앱 배포 규제 승인을 용이하게 하여 중국 밖에 있는 개발자가 중국 앱 스토어 시장에 접근하는 데 도움이 되는 Unity IAP의 구성 요소입니다.
Xiaomi Mi Pay 통합은 Unity 채널로 인해 Google Play 및 iTunes와 다음과 같은 면에서 다릅니다.
아래에서는 Unity IAP SDK를 사용하여 Unity 에디터를 통해 게임을 설정하는 방법에 대해 설명합니다.
Xiaomi는 Android 빌드만 지원합니다. 프로젝트를 Android용으로 설정하는 절차는 다음 네 단계로 구성됩니다.
에디터의 Services 창(Window > General > Services)에서 Unity IAP를 활성화합니다. Unity IAP 설정 문서를 참조하십시오. 메시지가 나타나면 IAP 에셋 패키지를 임포트해야 합니다(아래 그림 참조). 1.13.0 버전 기준으로 Unity IAP 에셋 패키지에는 Unity 채널 및 Xiaomi SDK가 포함되어 있습니다.
앱을 인앱 구매 없이 Mi Game Center에 퍼블리시하려면 빌드 설정 창(File > Build Settings)의 Platform 메뉴에서 Android 를 선택한 후, 나타나는 Xiaomi Game Center 메뉴 옵션에서 Add 를 선택하여 Xiaomi Unity 채널 스탠드얼론 SDK를 설치합니다.
Unity 채널에는 앱 스토어 자격 증명과 테스트 모드 기능을 관리하는 에디터 인터페이스를 제공하는 에셋이 포함되어 있습니다. 이 AppStoreSettings 에셋은 Unity IAP 에셋 패키지를 임포트할 때 Assets/Plugins/UnityChannel/XiaomiSupport/Resources 에 설치됩니다. 에디터에서 Assets > Create > App Store Settings 를 선택하여 에셋을 수동으로 생성할 수도 있습니다. 에셋을 선택하고 인스펙터를 확인하여 인터페이스에 액세스할 수 있습니다.
참고: AppStoreSettings 에셋은 Unity 5.6 이상에서만 사용할 수 있습니다.
통신하기 위해서는 Unity 및 Xiaomi 서버에 모두 게임의 고유 식별자가 필요합니다. 여기에서 프로젝트 ID를 검색 필드에 붙여 넣어 Unity 클라이언트 자격 증명을 검색해서 가져올 수 있습니다. Unity 5.3 또는 5.4 사용자는 AppStoreSettings 에셋에 액세스할 수 없으므로 이 방법으로 자격 증명을 검색해서 가져오고 설정해야 합니다. 위 그림에 나와 있는 설정에 대해서는 아래에서 설명합니다.
이런 자격 증명과 텍스트 모드 토글은 통합 절차의 여러 시점에서 필요합니다. 앱 스토어 설정 데이터는 클라이언트에 저장되지 않고 서버 쪽에서 업데이트됩니다.
Unity IAP에서 Xiaomi 에셋 패키지를 임포트할 수 있게 설정한 경우 별다른 작업이 요구되지 않습니다. 그 외에의 경우에는 Unity IAP 설정 문서를 참조하여 서비스를 활성화합니다.
Unity 에셋 스토어를 통해 최신 Unity IAP 플러그인을 설치할 수도 있습니다.
Unity IAP에 내장된 Xiaomi 클라이언트 SDK는 클라이언트에서 사용 가능한 상품 메타데이터에 따라 다릅니다. 따라서 에디터의 IAP 카탈로그 GUI(Window > Unity IAP > IAP Catalog)를 통해 상품을 정의해야 합니다.
카탈로그 채우기 IAP 카탈로그 GUI는 상품을 게임 클라이언트의 런타임 시점에 대한 메타데이터와 함께 정의합니다. 코드리스 IAP 문서에는 IAP 카탈로그를 통한 상품 설정에 대한 내용이 설명되어 있습니다. 특히 Xiaomi의 경우 다음 상품 속성에 주의를 기울일 필요가 있습니다.
상품 속성과 각 속성의 파라미터에 대한 자세한 내용은 상품 정의 문서를 참조하십시오.
데이터의 IAP Catalog 창에서 App Store Export > Xiaomi Mi Pay Catalog 를 선택하여 카탈로그를 익스포트합니다.
MiGameProductCatalog.prop 파일을 원하는 위치로 익스포트합니다. 프로젝트의 IAP Configuration 탭으로 이동한 후 Import 를 선택하여 Xiaomi 개발자 포털에서 상품 카탈로그를 임포트합니다. 아래의 IAP 상품 카탈로그 임포트 섹션을 참조하십시오.
IAP 카탈로그를 익스포트하면 MiGameProductCatalog.prop 파일의 복사본이 프로젝트의 Assets/Plugins/Android/assets/ 디렉토리(아래 그림 참조)에 기록되기도 합니다. Unity IAP는 이 파일을 IAP 카탈로그 에디터에서 사용하고 런타임 시점에 사용합니다. 이 파일은 Xiaomi 개발자 포털을 통해 명시적으로 임포트되는 카탈로그 파일이 없는 경우 앱의 기본 상품 카탈로그로도 사용됩니다.
Unity IAP는 일반적으로 Unity IAP Initialize()
API에 이어 대상 스토어를 위해 IAP 카탈로그 데이터를 분석하여 적용할 설정 빌더가 필요합니다. IAP 초기화 문서를 참조하십시오.
Xiaomi 게임은 IAP를 초기화하기 전에 추가 단계가 필요합니다. Mi Game Center에서는 앱이 실행될 때 로그인 API를 통해 자격 증명을 공유해야 하기 때문입니다.
수정된 초기화 절차는 다음과 같습니다.
initialize()
API를 호출합니다.위 절차를 게임 런타임 라이프사이클의 초기에 실행하십시오. 시작할 때 실행하는 것이 좋습니다. 같은 스크립트에서 구현할 수 있습니다.
다음은 Unity 채널 SDK를 사용해서 초기화를 수정하여 로그인 API를 호출하는 예제입니다.
using AppStoreSupport;
using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Purchasing;
using UnityEngine.Store;
// Run the script once, at game launch.
public class UnityChannelSample : MonoBehaviour
{
// Xiaomi login requires a login listener.
// Create one by implementing the ILoginListener abstract class included in the Unity Channel SDK.
class SampleLoginListener : ILoginListener
{
public Action initializeIAP;
// Step 1 succeeded; call step 2
public void OnInitialized()
{
Debug.Log("Initialization succeeded.");
UnityEngine.Store.StoreService.Login(this); // If initialization succeeds, initiate Xiaomi login
}
// Step 1 failed; display error message and recourses
public void OnInitializeFailed(string message)
{
Debug.Log("Initialization failed.");
}
// Step 2 completed; call step 3
public void OnLogin(UserInfo userInfo)
{
Debug.Log(string.Format("Login successful: userId {0}, userLoginToken {1}, channel {2}", userInfo.userId, userInfo.userLoginToken, userInfo.channel));
// When login succeeds, proceed to initializing IAP
initializeIAP();
}
// Step 2 failed; display error message and recourses
public void OnLoginFailed(string message)
{
Debug.Log("Login failed.");
}
}
}
참고: 로그인 절차의 모든 가능한 단계를 설명하는 위 샘플 코드에 있는 함수를 모두 사용해야 합니다. 하지만 각 함수 안에서 호출되는 행동을 선택할 수 있습니다. 이 예제에서는 행동 호출 대신 디버그 텍스트가 나타납니다. 이 예제에서 OnLogin() 메서드는 Unity IAP 초기화 함수를 시작합니다.
다음으로, 로그인 리스너와 AppStoreSettings 에셋에 저장된 앱 자격 증명을 사용하여 Xiaomi API를 초기화합니다.
void Awake()
{
// Create a login listener based on the SamleLoginListener class
SampleLoginListener loginListener = new SampleLoginListener();
// Tie the initializeIAP Action (from the SampleLoginListener class) to a function (defined in the next step)
loginListener.initializeIAP = ConfigureIAP;
// Access the AppStoreSettings Asset to generate AppInfo with your stored credentials. The AppStoreSettings class is part of the AppStoreSupport library.
AppStoreSettings appStoreSettings = Resources.Load<AppStoreSettings>("AppStoreSettings");
// Initialize Xiaomi using the credentials and login listener
UnityEngine.Store.StoreService.Initialize(appStoreSettings.getAppInfo(), loginListener);
}
프로젝트의 AppStoreSettings 에셋을 로드하면 getAppInfo()
함수에서 Mi Game Center 스토어 초기화 절차에 사용할 자격 증명 데이터를 반환합니다.
마지막으로, 설정 빌더를 사용하여 Xiaomi용 IAP 카탈로그의 상품 데이터를 분석한 다음 Unity IAP를 초기화합니다.
// The configuration builder requires a store listener.
// Create one by implementing the IStoreListener abstract class.
class StoreListener : IStoreListener
{
private IStoreController controller;
private IExtensionProvider extensions;
// Called when Unity IAP is ready to make purchases.
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
this.controller = controller;
this.extensions = extensions;
}
// Note that this will not be called if Internet is unavailable;
// Unity IAP will attempt initialization until it becomes available.
public void OnInitializeFailed(InitializationFailureReason error)
{
}
// Called when a purchase completes, or Unity IAP encounters an unrecoverable initialization error;
// may be called at any time after OnInitialized().
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e)
{
return PurchaseProcessingResult.Complete;
}
// Called when a purchase fails.
public void OnPurchaseFailed(Product i, PurchaseFailureReason p)
{
}
}
// Run a configuration builder to define your Products
public void ConfigureIAP()
{
// Load Products from the IAP Catalog
var module = StandardPurchasingModule.Instance();
var builder = ConfigurationBuilder.Instance(module);
var catalog = ProductCatalog.LoadDefaultCatalog();
// Loop through Products in Catalog, extracting metadata to the builder
foreach (var product in catalog.allProducts)
{
if (product.allStoreIDs.Count > 0)
{
var ids = new IDs();
foreach (var storeID in product.allStoreIDs)
{
ids.Add(storeID.id, storeID.store);
}
builder.AddProduct(product.id, product.type, ids);
}
else
{
builder.AddProduct(product.id, product.type);
}
}
// Create a store listener based on the StoreListener class
StoreListener storeListener = new StoreListener();
// Initialize Unity IAP
UnityPurchasing.Initialize(storeListener, builder);
}
설정 빌더에서는 상품 ID와 상품 타입을 레퍼런스하여 가격, 타입, 제목, 설명 메타데이터 채우기를 자동화합니다. 여기에는 IAP 카탈로그의 IAPProductCatalog.json 파일과 Unity IAP 초기화 중에 인스턴스화된 builder
오브젝트가 사용됩니다.
게임 내에서 구매를 구현하는 방법에 대한 내용은 다음 문서를 참조하십시오.
AppStoreSettings 에셋 인터페이스에서 테스트 모드를 토글하여 게임의 구매 흐름을 Xiaomi가 아닌 Android 기기에서 테스트합니다. Unity 채널은 테스트 모드 토글을 위한 API도 제공합니다.
AppInfo.debug = true;
Unity 채널 래퍼는 AppInfo
클래스를 포함하고, 데이터를 Xiaomi SDK에 전달합니다. 앱을 Xiaomi에 제출하려면 테스트 모드를 활성화해야 합니다. 테스트 모드에서는 테스트 목적을 위해 신용 카드 요구 사항도 면제됩니다. 테스트 모드를 활성화한 후 프로젝트를 빌드하고, 그 결과로 생기는 APK 파일을 Android 기기에서 실행합니다.
실제 구매를 테스트하려면 테스트 모드를 false로 설정하고 Xiaomi 기기에서 테스트합니다. 실제로 구매하려면 Xiaomi Mi Pay 계정과 중국 위안 같은 적절한 화폐가 필요합니다.
아래에서는 Unity IAP SDK를 사용하여 Unity 에디터를 통해 게임을 제출하는 절차에 대해 설명합니다.
Unity 에디터에서 Window > Unity IAP > Android > Target Xiaomi Mi Game Pay 를 선택하여 Unity IAP의 타겟을 Mi Game Pay로 설정합니다. 이렇게 하면 게임 APK의 다음 빌드에 대해 Xiaomi를 타겟으로 하여 제작할 수 있습니다. 런타임 시점에 Xiaomi Mi Pay 네이티브 청구 API를 사용해야 함을 Unity IAP에 알리는 설정 파일도 생성됩니다.
Xiaomi를 푸시하기 전에 게임을 빌드하는 것을 로컬에서 테스트하거나, Unity 클라우드 빌드(클라우드 빌드 문서 참조)에서 프로젝트의 빌드 타겟을 Android로 설정하여 테스트합니다.
에디터에서 Unity 서비스 창을 통해 클라우드 빌드를 활성화합니다. 클라우드 빌드 구현 문서를 참조하십시오.
다음 두 가지 방법 중 하나로 빌드를 프로젝트 빌드 이력에 업로드합니다.
에디터에서:
다음 두 가지 방법 중 하나를 사용하여 호스트된 빌드를 Xiaomi의 개발자 포털로 푸시합니다.
에디터에서:
클라우드 빌드 서비스 창의 빌드 이력 타임라인에서 원하는 빌드를 찾은 다음 Push to Xiaomi 선택합니다. 푸시하겠다고 확인하면 작업이 완료됩니다.
참고: 프로젝트가 속한 조직의 소유자만 Xiaomi에 배포할 수 있습니다.
UDN 자격 증명을 사용하여 Xiaomi Unity 개발자 포털에서 자신이 업로드한 프로젝트에 액세스할 수 있습니다. 처음 로그인할 때는 Xiaomi의 이용 약관에 동의해야만 다음 단계로 진행되어 Projects 목록을 볼 수 있습니다. 제출할 프로젝트를 찾습니다. 아래 강조 표시된 프로젝트의 초기 상태는 Version1.0: Draft 입니다. 클립보드 아이콘을 선택하여 프로세스 전체에 걸친 프로젝트의 상태 변경 내역이 기록된 제출 로그를 확인합니다. 상태 링크를 선택하여 프로젝트의 메타데이터 세부 정보를 확장합니다.
이어지는 내용에서는 아래 그림에 대해 자세히 설명합니다.
이 섹션에는 Mi Game Center에 표시되는 텍스트가 포함됩니다.
이 섹션에는 Mi Game Center에 표시되는 휴대폰 및 태블릿 기기 마케팅 에셋이 포함됩니다. 다음 가이드라인을 참고하십시오.
준비가 되면 Submit 을 선택해서 게임을 Xiaomi에 제출하여 심의를 받습니다. 프로젝트 상태 표시가 In review 로 바뀝니다. 프로젝트 심의 중에는 프로젝트 세부 정보를 편집할 수 없습니다. 프로젝트를 확장하여 Cancel 을 선택하면 심의를 취소하고 프로젝트 세부 정보를 수정할 수 있습니다.
앱을 퍼블리시하려면 ISBN 출판물 라이선스가 필요합니다. Xiaomi는 SAPPRFT(국가신문출판광전총국)를 통한 ISBN 승인 절차를 포괄적으로 지원합니다.
Xiaomi는 SAPPRFT가 모든 게임을 승인할 것이라고 보장하지 않습니다. SAPPRFT 제출 가이드라인을 참조하십시오. 스토어 및 국가 준수 규칙을 지키려면 게임을 일정 부분 변경해야 할 수 있습니다.
중국 정부의 승인을 받기 위해 앱을 제출하는 경우 다음 팁을 고려하십시오.
제출을 완료하기 전에 아래 절차에 따라 Xiaomi에 최신 IAP 상품 카탈로그가 있는지 확인하십시오.
Xiaomi가 프로젝트를 승인하면 프로젝트 상태가 Approved 로 변경되고 다음 자격 증명이 제공됩니다.
자격 증명 값을 AppStoreSettings 에셋 또는 초기화 스크립트에 입력한 다음 테스트 모드를 false
로 설정합니다. 새 게임 빌드를 생성한 후 이 빌드를 전과 같이 Xiaomi로 푸시합니다.
Xiaomi가 이메일을 통해 개발자 계약서를 제공합니다. 계약서에 서명하면 Xiaomi가 정부 승인 절차를 지원합니다. 게임에 ISBN 라이선스가 발급되고 Mi Game Center에 퍼블리시할 수 있는 허가를 받으면 Xiaomi가 알려줍니다.
Xiaomi의 콘텐츠 심의 절차에는 콘텐츠 변경이 권고되는 경우를 제외하고 일반적으로 약 1–2영업일이 소요됩니다. 하지만 정부 승인 절차와 라이선스 배포에 4–8개월이 소요될 수 있습니다. 심의 절차에 대한 자세한 내용은 Unity-Xiaomi 파트너 페이지의 FAQ 섹션을 참조하십시오.