본문 바로가기

Game Make

Block Puzzle 만들기 (9)

 

이제 인앱을 등록해 보자.

1. 유니티 에디터를 설정한다.

Project Setting > Services Gerneral Settings로 이동한다.

 

13세 미만 게임인지를 확인하는 부분이 있다.

No로 선택했다. 

In-App Purchasing SettingsOn 시킨다.

 

Purchasing Package  버전을 확인해보고 해야한다면 Install Latest Version을 눌러서 설치한다.

 

2. 이제 구글 개발자 콘솔로 이동한다.

수익창출 > 수익창출 설정 을 열어 BASE64 키를 복사한다.

 

3. 다시 Unity에디터를 연다.

Services > In-App Purchasing > Receipt Validation Obfuscator를 연다.

2번 항목에 복사한 키를 붙여넣는다.

그리고 Obfuscate Google Play License Key를 누른다.

Project Setting > Service > In-App Purchasing > Options 에 키를 붙여 넣고, Verify를 눌러준다.

(이 부분은 앞으로 제거될 기능이기 때문에 현재는 불필요하다는 이야기도 있다.)

 

4. 이제 인앱 상품을 등록해 보자.

개발자 콘솔로 이동한다.

수익 창출 > 제품 > 인앱상품 으로 이동한다.

새 APK를 업로드하라는 메세지가 나온다.

 

그래서 앱을 .aab로 빌드하여 , 내부테스트에 등록해 주었다.

 

다시 인앱 상품 메뉴로 이동하면 상품 만들기 메뉴가 활성화 되었다. 상품을 만들어 보자.

이런 식으로 필요한 정보를 입력하고 저장을 누른다.

활성화를 눌러서 상품을 활성화 시켜준다.

5. Unity에디터에서 설정을 계속해 보자.

Service > In-App Purchasing > IAP Catalog 를 연다.

정보를 입력해주고, Automatically Initialize UnityPurchasing, Automatically Initialize Unity Gaming Services를 체크해준다.

 

6. 이제 인앱 코드를 구현해 보자.

public class IAPManager : Singleton<IAPManager>, IDetailedStoreListener
{
    public readonly string productId = "remove_ads";
    public IStoreController _storeController; //구매 과정을 제어하는 함수 제공자
    public IExtensionProvider _storeExtensionProvider; //여러 플랫폼을 위한 확장 처리 제공자

    System.Action<bool> _callbackPurchase;

    public void OnInitialized(IStoreController controller, IExtensionProvider extension)
    {
        Debug.Log("초기화에 성공했습니다");
        _storeController = controller;
        _storeExtensionProvider = extension;
    }

    public void OnInitializeFailed(InitializationFailureReason error)
    {
        Debug.Log("초기화에 실패했습니다");
    }

    public void OnInitializeFailed(InitializationFailureReason error, string message)
    {
        Debug.Log("초기화에 실패했습니다 " + message);
    }

    public void OnPurchaseFailed(Product product, PurchaseFailureDescription failureDescription)
    {
        _callbackPurchase?.Invoke(false);
        Debug.Log("구매에 실패했습니다");
    }
    
    public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason)
    {
        _callbackPurchase?.Invoke(false);
        Debug.Log("구매에 실패했습니다");
    }

    public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs purchaseEvent)
    {
        Debug.Log("구매에 성공했습니다");
        if (purchaseEvent.purchasedProduct.definition.id == productId)
        {
           /// 구매 성공시 할일 처리..
        }
        _callbackPurchase?.Invoke(true);
        return PurchaseProcessingResult.Complete;
    }

    private void Start()
    {
        InitUnityIAP();
    }

    private void InitUnityIAP()
    {
        var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
        builder.AddProduct(productId, ProductType.NonConsumable, new IDs() { { productId, GooglePlay.Name } });
        UnityPurchasing.Initialize(this, builder);
    }

    public bool IsInitialized()
    {
        return _storeController != null && _storeExtensionProvider != null;
    }

    public void BuyProductID(string productId, System.Action<bool> callback)
    {
        _callbackPurchase = callback;
        if (IsInitialized())
        {
            Product product = _storeController.products.WithID(productId);
            if (product != null && product.availableToPurchase)
            {
                Debug.Log($"purchase product aync " + productId);
                _storeController.InitiatePurchase(product);
            }
            else
            {
                Debug.Log("not found");
            }
        }
        else
        {
            callback?.Invoke(false);
            Debug.Log("failed");
        }
    }
}

Hierachy에 오브젝트를 만들어주고, 이 스크립트를 붙여주면 된다.

 

구매는 이런 식으로 처리한다.

   IAPManager.Instance.BuyProductID("adsremove", PurchaseCallback);

7. UI를 구성해 보자.

역시 디자인을 먼저 해보자. 

 

구현 자체는 쉽게 끝났다.

어려운 것은 설정인지라 ㅠㅠ

 

8. 모바일 폰에서 테스트 해보고 싶다면, 테스트등록을 하는 것이 좋다.

구글 개발자 계정으로 이동한다.

 모든 앱을 눌러서  앱 설정 모드에서 빠져나온다.

설정 > 라이센스 테스트로 이동한다.

테스트 목록에 테스트 용 계정을 추가한다.

테스터로 등록되었다면, 이제 결제를 하지 않고 곌제 기능을 테스트 해볼 수 있다.

 

휴- 이제야 복잡한 과정이 모두 끝났다. 

이제 출시만 하면 끝인가!!!

'Game Make' 카테고리의 다른 글

Block Puzzle 만들기 (8)  (0) 2023.10.18
Block Puzzle 만들기 (7)  (0) 2023.10.15
Block Puzzle 만들기 (6)  (0) 2023.10.14
Block Puzzle 만들기 (5)  (0) 2023.10.11
Block Puzzle 만들기 (4)  (0) 2023.10.08