유니티 인앱 결제는 android, iOS 모두 연동을 해 본 경험이 있다면, 아주 쉽게 구현이 가능합니다. 물론 몰라도 구현이 가능하지만, 중간 중간 생기는 문제가 발생할 경우, 이것을 해결하기 조금 힘들 수 있습니다.
이 문서는 플레이 스토어 설정과, iOS 설정은 다루지 않습니다. 선행작업의 링크로 가 선행작업으로 완료해 주시기 바랍니다.
[선행작업]
플레이 스토어 설정 : https://nicgoon.tistory.com/200 .
앱 스토어 설정 : https://nicgoon.tistory.com/205 .
[공식문서]
코드리스인앱 : https://docs.unity3d.com/kr/current/Manual/UnityIAPCodelessIAP.html .
유니티 IAP 설정 : https://docs.unity3d.com/kr/current/Manual/UnityIAPSettingUp.html .
유니티 IAP 초기화 : https://docs.unity3d.com/kr/current/Manual/UnityIAPInitialization.html .
1. 플레이스토어, 앱스토어 설정확인.
플레이 스토어, 앱스토어를 설정했다면, 이 것을 확인할 필요가 있을 것 입니다. 이 것을 확인할 때는 공식 문서의 코드리스인앱 ( 링크 )으로 테스트 하면 됩니다. 이 것이 잘되면, 코드리스 인앱을 사용해 결제를 구현해도 모두 구현할 수 있지만, 이 문서는 유니티 인앱을 소개하는 페이지 이므로, 아래 계속해서 인앱 구현을 설명하도록 하겠습니다.
2. 유니티 인앱 셋팅.
유니티 인앱 설정은 Unity IAP 설정 ( 링크 ) 을 따라 하면됩니다. 주의할 점 조차 없습니다. 다른 참고 문서들에 이 외에 해야 될 것들이 있다고 써 있다면, 과감히 하지 마세요. 딱 이것만 하면됩니다. (이게 단 하나의 주의할 점 입니다.).
3. 구글 플레이를 위핸 인앱 매니저 구성.
구글 플레이 초기화를 위해서, 유니티의 초기화 문서 ( 링크 ) 를 보면 됩니다.
구글 상품을 구매하기 위해서는, 앱을 한 번 생성해 알파 혹은 베타 버전으로 등록한 후, 상품을 등록해야 합니다. 등록한 상품들은 아래 페이지에서 확인할 수 있으며, 상품아이디들을 메모해 둡니다.
그리고, IStoreListener 인터페이스를 상속한 클래스를 만들어 생성자에, 상품의 정보와 상품의 이름을 넣은 빌더를 만들어 유니티 인앱을 초기화 하도록 합니다. 빌더는 상품의 아이디와 상품의 종류, 플레이 스토어에서 사용되는 이름들을 넣어 주면되겠습니다.
public MyIAPManager () {
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
// 골드 100개.
builder.AddProduct("gold_100", ProductType.Consumable, new IDs
{
{"골드 100개", GooglePlay.Name}
});
// 골드 500개.
builder.AddProduct("gold_500", ProductType.Consumable, new IDs
{
{"골드 500개", GooglePlay.Name}
});
// 골드 1000개.
builder.AddProduct("gold_1000", ProductType.Consumable, new IDs
{
{"골드 1000개", GooglePlay.Name}
});
UnityPurchasing.Initialize (this, builder);
}
4. 초기화 성공.
초기화 성공 시에는 컨트롤과 익스텐션을 받을 수 있습니다. 이 중 우리가 필요한 것은 컨트롤 입니다. 컨트롤을 이용해, 상품 구매를 하게 됩니다. 안드로이드, iOS 모두 인앱 결제를 할 때, 지정한 아이디의 상품이 실제 존재하는지 Retrieving 을 하게됩니다. 유니티는 초기화 시 이 작업을 하는데, 그 결과가 각 상품에 들어 있습니다. 그 상품 아이디가 구매가능한 상태인 지 확인하려면 초기화 시 하면 되며, 아래 코드는 초기화 및 그 값들을 확인하는 코드 입니다.
public void OnInitialized (IStoreController controller, IExtensionProvider extensions)
{
this.controller = controller;
this.extensions = extensions;
var gold_100 = controller.products.WithID( "gold_100" );
if( gold_100 != null && gold_100.availableToPurchase )
{
Debug.Log("골드 100 구매가 가능합니다.");
}
var gold_500 = controller.products.WithID( "gold_500" );
if( gold_500 != null && gold_500.availableToPurchase )
{
Debug.Log("골드 500 구매가 가능합니다.");
}
var gold_1000 = controller.products.WithID( "gold_1000" );
if( gold_1000 != null && gold_1000.availableToPurchase )
{
Debug.Log("골드 1000 구매가 가능합니다.");
}
Debug.Log("초기화 성공");
}
5. 초기화 실패
초기화 실패 메소드는 아래와 같이 간단히 구현해 주시면됩니다.
public void OnInitializeFailed (InitializationFailureReason error)
{
Debug.Log("초기화 실패");
}
6. 결제 시도.
결제시도는 상품정보를 가지고와 InitiatePurchase 메소드를 구현해 주면됩니다. 아래 코드는 딱히 함수가 필요한 것은 아니고, 컨트롤러를 이용해 구현한 코드를 함수로 묶어 둔 것 입니다.
public void buy_gold_100()
{
Product _100 = controller.products.WithID("gold_100");
controller.InitiatePurchase( _100 );
}
7. 결제 성공.
결제 성공시에는, 결제가 완료되었을 때, 영수증을 확인할 수 있습니다. 이 영수증 값을 서버로 보내, 서버에서는 이 영수증이 올바른 영수증인지 여부를 테스트할 수 있습니다.
public PurchaseProcessingResult ProcessPurchase (PurchaseEventArgs e)
{
Debug.LogFormat("결제 완료, 구매 영수증 : {0}", e.purchasedProduct.receipt);
return PurchaseProcessingResult.Complete;
}
8. 결제 실패.
결제 실패시에는, 아래 메소드가 호출됩니다.
public void OnInitializeFailed (InitializationFailureReason error)
{
Debug.Log("초기화 실패");
}
9. iOS.
iOS는 상품 정보만 ConfigurationBuilder 를 만들 때 iOS 관련 값들을 넣어 주면됩니다.
'유니티' 카테고리의 다른 글
유니티 구글 플레이 연동 (0) | 2019.04.29 |
---|---|
unity Tapjoy offerwall (1) | 2019.04.29 |
탭조이 유니티 계정생성하기 (0) | 2019.04.28 |
adpopcorn Unity 연동 - android (0) | 2019.04.28 |
adpopcorn Unity 연동 - 계정추가 (1/3) (0) | 2019.04.28 |