1) 유니티에서 Project Settings/Services/In-App Purchasing를 활성화
- 13세 이하 어린이를 대상으로 하는 경우에는 Yes, 아니면 No


2) Services/In-App Purchasing/Receipt Validation Obfuscator에 라이선스 키 입력
- 수익 창출 설정 탭에서 라이선스 키를 복사할 수 있다.
- 입력 후에 Obfuscate Google Play License Key를 클릭한다.
- Project Settings/Services/In-App Purchasing 탭에서 라이선스 키를 확인할 수 있다.


3) 유니티 대시보드로 이동하여, 위에서 입력한 라이선스 키를 해당 부분에 입력


4) 인앱 상품 탭에서 '상품 만들기' 버튼을 클릭하고, 모든 입력란을 작성
- 상품 생성 후, 활성화 상태로 변경할 수 있다.



5) Services/In-App Purchasing/IAP Catalog에 생성한 제품 ID 입력
- 상품이 여러개면 추가하면 된다.
- Automatically initialize UnityPurchasing은 체크한다.

6) IAP를 사용하기 위한 스크립트 작성
- Purchase 함수에 제품 ID를 전달하면 구매 패널이 활성화된다.
using UnityEngine;
using UnityEngine.Purchasing;
public class IAPManager : MonoBehaviour, IStoreListener
{
[Header("Product ID")]
public readonly string productId_test_id = "test_id";
public readonly string productId_test_id2 = "test_id2";
[Header("Cache")]
private IStoreController storeController; //구매 과정을 제어하는 함수 제공자
private IExtensionProvider storeExtensionProvider; //여러 플랫폼을 위한 확장 처리 제공자
private void Start()
{
InitUnityIAP(); //Start 문에서 초기화 필수
}
/* Unity IAP를 초기화하는 함수 */
private void InitUnityIAP()
{
ConfigurationBuilder builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
/* 구글 플레이 상품들 추가 */
builder.AddProduct(productId_test_id, ProductType.Consumable, new IDs() { { productId_test_id, GooglePlay.Name } });
builder.AddProduct(productId_test_id2, ProductType.Consumable, new IDs() { { productId_test_id2, GooglePlay.Name } });
UnityPurchasing.Initialize(this, builder);
}
/* 구매하는 함수 */
public void Purchase(string productId)
{
Product product = storeController.products.WithID(productId); //상품 정의
if (product != null && product.availableToPurchase) //상품이 존재하면서 구매 가능하면
{
storeController.InitiatePurchase(product); //구매가 가능하면 진행
}
else //상품이 존재하지 않거나 구매 불가능하면
{
Debug.Log("상품이 없거나 현재 구매가 불가능합니다");
}
}
#region Interface
/* 초기화 성공 시 실행되는 함수 */
public void OnInitialized(IStoreController controller, IExtensionProvider extension)
{
Debug.Log("초기화에 성공했습니다");
storeController = controller;
storeExtensionProvider = extension;
}
/* 초기화 실패 시 실행되는 함수 */
public void OnInitializeFailed(InitializationFailureReason error)
{
Debug.Log("초기화에 실패했습니다");
}
/* 구매에 실패했을 때 실행되는 함수 */
public void OnPurchaseFailed(Product product, PurchaseFailureReason reason)
{
Debug.Log("구매에 실패했습니다");
}
/* 구매를 처리하는 함수 */
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
{
Debug.Log("구매에 성공했습니다");
if (args.purchasedProduct.definition.id == productId_test_id)
{
/* test_id 구매 처리 */
}
else if (args.purchasedProduct.definition.id == productId_test_id2)
{
/* test_id2 구매 처리 */
}
return PurchaseProcessingResult.Complete;
}
#endregion
}
'[Unity]' 카테고리의 다른 글
[Unity] GameObject의 경로를 반환하는 함수 (0) | 2023.02.26 |
---|---|
[Unity] 구글 애드몹 보상형 광고 구현 (0) | 2023.01.17 |
[Unity] 구글 플레이 로그인 구현 (2) | 2023.01.13 |
[Unity] 자식 오브젝트와 함께 Color Tint를 적용하는 버튼 (0) | 2022.12.12 |
[Unity] 최적화 기법 (0) | 2021.09.14 |
댓글