AppInfo
클래스는 클라이언스-서버 간 통신 및 인증에 필요한 클라이언트 및 Xiaomi 자격 증명을 저장합니다.
키: | 타입: | 설명: |
---|---|---|
appID | 문자열 | Xiaomi 앱 ID |
appKey | 문자열 | Xiaomi 앱 키 |
clientID | 문자열 | Unity 클라이언트 ID |
clientKey | 문자열 | Unity 클라이언트 키 |
debug | bool | 디버그 모드 토글 |
Xiaomi는 Mi Game Center에 퍼블리시하는 모든 앱에 대해 ILoginListener
를 통한 로그인을 요구합니다.
키: | 타입: | 설명: |
---|---|---|
OnInitialized () | void | 초기화 성공 시 호출됩니다. |
OnInitializedFailed (string message) | void | 초기화 실패 시 호출됩니다. |
OnLogin () | void | 로그인 성공 시 호출됩니다. |
OnLoginFailed (string message) | void | 로그인 실패 시 호출됩니다. |
Unity IAP는 StoreService
클래스를 내부적으로 사용하여 Unity 채널 SDK를 초기화합니다.
키: | 타입: | 설명: |
---|---|---|
정적 초기화(AppInfo appInfo, ILoginListener loginListener) | void | Unity 채널 SDK를 초기화합니다. |
정적 로그인(AppInfo appInfo, ILoginListener loginListener) | void | Xiaomi 계정에 로그인합니다. |
Unity 채널에 성공적으로 로그인하면 UserInfo
클래스가 반환됩니다. 반환되는 데이터는 정보 제공용입니다.
키: | 타입: | 설명: |
---|---|---|
channel | 문자열 | 사용 중인 채널을 나타냅니다. (현재 “XIAOMI”만 표시됨) |
userID | 문자열 | 채널의 고유 사용자 ID입니다. |
userLoginToken | 문자열 | 사용자 로그인을 확인합니다. (Xiaomi IAP 통합 가이드의 서버 측 초기화 섹션 참조) |
Unity IAP는 IPurchaseListener
인터페이스를 내부적으로 사용하여 구매 활동을 처리합니다.
다음과 같이 IPurchaseListener
클래스를 구현하여 구매 흐름 상태를 처리합니다.
using UnityEngine.ChannelPurchase;
......
private class ExamplePurchaseListener : IPurchaseListener{
public void OnPurchase (PurchaseInfo purchaseInfo){
Debug.Log ("Purchase Succeed: " + purchaseInfo.gameOrderId);
}
public void OnPurchaseFailed (string message, PurchaseInfo purchaseInfo){
Debug.Log ("Purchase Failed: " + message);
}
public void OnPurchaseRepeated(string productCode){
Debug.Log ("Purchase Repeated");
}
public void OnReceiptValidate (ReceiptInfo receiptInfo){
Debug.Log ("Validate Succeed");
}
public void OnReceiptValidateFailed (string gameOrderId, string message){
Debug.Log ("Validate Failed");
}
public void OnPurchaseConfirm (string gameOrderId){
Debug.Log ("Confirm Succeed");
}
public void OnPurchaseConfirmFailed (string gameOrderId, string message){
Debug.Log ("Confirm Failed");
}
}
키: | 타입: | 설명: |
---|---|---|
OnPurchase () | void | 구매 성공 시 호출됩니다. |
OnPurchaseFailed (string message, PurchaseInfo purchaseInfo) | void | 구매 실패 시 호출됩니다. |
OnPurchaseRepeated (string productCode) | void | 비소모품 상품 재구매 시 호출됩니다. |
OnReceiptValidation (ReceiptInfo receiptInfo) | void |
PurchaseService.ValidateReceipt (...) 성공 시 호출됩니다. |
OnReceiptValidationFailed (string gameOrderID, string message) | void |
PurchaseService.ValidateReceipt (...) 실패 시 호출됩니다. |
OnPurchaseConfirm (string gameOrderId) | void | 제외 예정 |
OnPurchaseConfirm (string gameOrderId, string message) | void | 제외 예정 |
Unity IAP는 PurchaseService
클래스를 내부적으로 사용하여 구매 활동을 초기화합니다.
구매 리스너가 구현된 상태에서 PurchaseService.Purchase
메서드를 호출하여 구매 거래를 실행합니다.
using UnityEngine.ChannelPurchase;
......
var myPurchaseListener = new ExamplePurchaseListener ();
PurchaseService.Purchase ("Product ID", "Game Order ID", myPurchaseListener);
상품 ID가 Xiaomi 개발자 포털에 나열됩니다. 앱이 디버그 모드에서 실행되는 경우 상품 ID가 MiGameProductCatalog.prop 파일에도 익스포트됩니다. Game Order ID는 null일 수 있습니다. Unity 채널 SDK에서 UUID를 생성합니다.
키: | 타입: | 설명: |
---|---|---|
static Purchase (string productCode, string gameOrderId, IPurchaseListener productListener) | void | 상품 구매 |
static ValidateReceipt (string gameOrderId, IPurchaseListener purchaseListener) | void | 구매 확인 |
static ConfirmPurchase () | void | 지원 중단됨(대신 ValidateReceipt (...) 사용) |
구매 후 PurchaseService.ValidateReceipt
메서드를 호출하여 구매를 확인합니다.
PurchaseService.ValidateReceipt(gameOrderId, myPurchaseListener);
gameOrderId
가 유효하면 Unity 채널에서 구매를 확인하기 위해 사용하는 signData
및 signature
가 포함된 ReceiptInfo
가 myPurchaseListener
에 수신됩니다.
키: | 타입: | 설명: |
---|---|---|
productCode | 문자열 | 프로젝트의 고유 ID입니다. Xiaomi 개발자 포털에서 직접 설정할 수도 있습니다. |
gameOrderId | 문자열 | 주문의 구매 ID입니다. |
orderQueryToken | 문자열 | 구매를 확인하는 데 사용됩니다. |
확인은 일반적으로 게임 서버에서 수행되지만, signData
를 클라이언트 쪽에서 확인할 수도 있습니다.
키: | 타입: | 설명: |
---|---|---|
gameOrderId | 문자열 | 주문의 구매 ID입니다. |
signData | 문자열 | 구매 세부 정보가 포함된 JSON 문자열입니다. |
signature | 문자열 | signData의 서명입니다. |
계속 진행하기 전에 Unity IAP 영수증 검증 문서를 검토하십시오. UnityEngine.Purchasing 스크립팅 API도 참조하십시오.
IUnityChannelConfiguration
및 IUnityChannelExtensions
인터페이스는 앱 스토어 영수증 언패킹을 위한 확장 기능을 제공합니다.
구매 시에 Unity IAP CrossPlatformValidator
클래스(자세한 설명은 Receipt validation 문서 참조)와 IUnityChannelExtensions.ValidateReceipt
메서드(자세한 설명은 아래 참조)를 사용하여 로컬 영수증 검증을 수행합니다.
영수증 검증을 구현하기 전에 Xiaomi에 대해 영수증 난독 처리를 활성화합니다.
구매 중에 Unity 채널에서 필요한 영수증 데이터를 자동으로 가져오려면 Unity IAP를 초기화할 때 IUnityChannelConfiguration.fetchReceiptPayloadOnPurchase
를 true
로 설정합니다. 이렇게 하면 성공적인 구매 후에 IUnityChannelExtensions.ValidateReceipt
가 내부적으로 호출됩니다. 이상적인 경우 PurchaseEventArgs
’ purchasedProduct.receipt
필드가 IStoreListener.ProcessPurchase
성공 콜백을 트리거할 때 호출됩니다.
참고: fetchReceiptPayloadOnPurchase
플래그를 true로 설정하면 성공적인 구매 후에 암호화된 영수증 데이터를 가져오기 위한 네트워크 요청이 발생합니다. 이 두 번째 네트워크 요청이 어떤 이유로든 실패하면 ProcessPurchase
성공 콜백에서 영수증이 유효하지 않은 상품을 수신합니다.
purchasedProduct.receipt
데이터를 CrossPlatformValidator.Validate
API를 통해 전달하면 완전히 검증된 영수증인 IPurchaseReceipt
가 반환됩니다. 결과가 비어 있으면 영수증 검증에 실패했음을 의미합니다. 아래 예제를 참조하십시오.
CrossPlatformValidator validator = new CrossPlatformValidator (GooglePlayTangle.Data(), AppleTangle.Data(), UnityChannelTangle.Data(), Application.identifier);
var result = validator.Validate(purchasedProduct.receipt);
키: | 타입: | 설명: |
---|---|---|
fetchReceiptPayloadOnPurchase | bool | 구매 중에 Unity 채널 영수증 데이터 수집을 자동화합니다. |
IUnityChannelExtensions
인터페이스를 사용하여 구매를 확인하고 영수증을 검증합니다. 위 메서드에 대한 콜백은 성공을 나타내는 부울, ‘signData’ 문자열, ‘signature’ 문자열을 반환합니다. ChannelPurchase.ReceiptInfo 섹션을 참조하십시오.
참고: ValidateReceipt ()
는 중간자 공격에 취약합니다. 클라이언트 RSA 공용 키를 사용하여 보안을 강화하십시오. Xiaomi IAP 통합 가이드의 앱 스토어 설정 섹션을 참조하십시오.
키: | 타입: | 설명: |
---|---|---|
ConfirmPurchase (string transactionID, Action<bool, string, string>, callback) |
void | 이전 구매의 구매 상태를 수집합니다. 구매 이력에서 특히 게임 중단 또는 네트워크 시간 초과 등을 검토하는 데 사용됩니다. |
ValidateReceipt (string transactionID, Action<bool, string, string>, callback) |
void | 특정 transactionID의 영수증을 검증합니다. |
UnifiedReceipt
클래스에는 Unity IAP가 해석할 수 있는 스토어별 거래 데이터가 있습니다. 통합된 영수증 문자열을 언패킹하는 방법은 아래 예제를 참조하십시오.
var unifiedReceipt = JsonUtility.FromJson<UnifiedReceipt>(purchEvtArg.purchasedProduct.receipt)
키: | 타입: | 설명: |
---|---|---|
Payload | 문자열 | 스토어마다 다른 포맷으로 반환되는 영수증을 래핑하는 Unity IAP 래퍼입니다. |
Store | 문자열 | 구매가 발생한 스토어입니다. |
TransactionID | 문자열 | 고유 거래 ID입니다. |
UnityChannelPurchaseReceipt
를 사용하여 통합된 영수증을 추가로 Unity 채널 영수증으로 언패킹합니다. 아래 예제를 참조하십시오.
var ucReceipt = JsonUtility.FromJson<UnityChannelPurchaseReceipt>(unifiedReceipt.Payload)
아래의 추가적인 Unity 채널 영수증 데이터는 정보 제공용으로 사용하십시오.
키: | 타입: | 설명: |
---|---|---|
productID | 문자열 | 구매된 상품의 고유 ID입니다. |
transactionID | 문자열 | 고유 거래 ID입니다. |
orderQueryToken | 문자열 | 주문 쿼리 토큰입니다. |
런타임 시점에 Xiaomi 앱 스토어가 게임에서 활성화되는지 확인하려면 다음 코드 스니핏에서 제공되는 부울 값을 사용합니다.
var module = StandardPurchasingModule.Instance();
bool m_IsUnityChannelSelected =
Application.platform == RuntimePlatform.Android &&
module.androidStore == AndroidStore.XiaomiMiPay;