소셜 로그인/수업내용
                
              Unity 수업내용 21.07.21. Unity IAP(인 앱 결제)
                HappyFrog
                 2021. 7. 21. 15:25
              
                          
            IAP는 In App Purchase, 인 앱 결제(구매)를 뜻한다.
해당 수업은 GPGS로그인이 필요하므로 먼저 구현해둔 프로젝트를 사용하겠다.


- 우선 Unity - General - Services를 눌러보자.
 - 그러면 유니티 에디터에 위 사진과 같은 탭이 뜰 것이다.
 
그리고 In-App Purchasing을 눌러주자. 그러면 팝업이 하나 뜰 것이다.


- 이런식으로 진행이 되는데, 자신의 계정을 선택해주고 질문에 맞게 선택지를 골라주면 된다.
 

- 마지막까지 왔다면 다음과 같은 창이 뜰텐데 In-App Purchasing Settings가 OFF상태일 것이다.
 - 클릭하여 On으로 바꿔주자.
 - 클리하면 여러가지 세팅이 바뀌고 임포팅되며 로딩시간이 있을것이다
 


- 임포트가 완료되었다면 해당 창으로 바뀔것이다. 여기서 맨 위에 있는 Dashboard를 타고 들어가자.
 - Unity Dashboad - 내 앱 - Settings - Analytics Settings로 들어가자.
 - 그러면 상단에 Google License Key가 있을 것이다. 해당 키를 1번 사진의 빨간색으로 도배된 칸에 넣어주자.
 

- 그리고 씬에서 오브젝트들을 생성해보자.
 - 여기서 게임오브젝트를 만들 때 IAP버튼을 달아야 한다.
- => 해당 IAP버튼을 누르면 인 앱 결제로 인식하여 데이터를 앱스토어(애플이던 구글이던)쪽으로 보내기 때문.
 
 


- 그리고 IAP컴포넌트의 IAP catalog를 누르면 위 사진과 같은 팝업이 뜬다.
 - 해당 팝업에서 결제 정보를 입력해야한다.
 - 여기서 ID는 구글 개발자 계정(Google Play Console)에서 결제정보의 ID와 일치해야한다.
- =>나는 패키지 이름 + 상품 이름으로 작성했다.
 
 - 사진과 같이 간단하게 작성해주고 씬에서 Product ID를 눌러 생성해둔 카탈로그를 골라서 할당해주자.
 - 광고제거와 코인의 차이는 Consumable(소모품)과 Non Consumable(소모 불가)인데, 쉽게 말해서 여러번 살 수 있는 상품 or 한 번만 구매가능한 상품 의 차이일 뿐이다.
 - Type에서 상품에 맞게 설정해주면 된다.
 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Purchasing;
using UnityEngine.Events;
public class IAPMain : MonoBehaviour
{
    public IAPButton btnCoin500;
    public IAPButton btnRemoveAds;
    void Start()
    {
        this.btnCoin500.onPurchaseComplete.AddListener(new UnityAction<Product>((product) =>
        {
            Debug.LogFormat("Success : Coin 500 : {0}", product.transactionID);
        }));
        this.btnCoin500.onPurchaseFailed.AddListener(new UnityAction<Product, PurchaseFailureReason>((product, reason) =>
        {
            Debug.LogFormat("Failed : Coin 500 : {0} // {1}", product.transactionID, reason);
        }));
        this.btnRemoveAds.onPurchaseComplete.AddListener(new UnityAction<Product>((product) =>
        {
            Debug.LogFormat("Success : Remove Ads : {0}", product.transactionID);
        }));
        this.btnRemoveAds.onPurchaseFailed.AddListener(new UnityAction<Product, PurchaseFailureReason>((product, reason) =>
        {
            Debug.LogFormat("Failed : Remove Ads : {0} // {1}", product.transactionID, reason);
        }));
    }
    void Update()
    {
    }
}
- 그리고 코드는 굉장히 간단하게 작성했다.
 - 샀으면 샀다고, 실패했으면 실패했다고 뜨게 했다.
 

- 그리고 Google Play Console에서 수익 창출 설정을 해준다.
- =>나는 이미 한 상태이기 때문에 해당 창이 뜬다.
 
 



- 이어서 제품 - 인앱 상품을 설정해준다.
 - 인앱상품 - 상품 만들기를 누르면 상품 만들기 창으로 넘어가는데, 여기서 제품 ID는 우리가 Unity Editor - IAP Button - IAP catalog 에서 만들어둔 ID를 입력해주고(일치해야한다.)
 - 이름과 설명을 모두 적어준 뒤 기본 가격을 설정해주면 된다.
 - 가격은 가격 설정을 눌러주면 가격 수정 창이 나오는데 여기서 설정해주면 된다.
 
자 이제 연동이 끝났으니 에디터에서 테스트해보자.


- 상품을 누르면 FakeStore에서 코인 500을 살 것이냐고 물어보고 사겠다고 하면
 - 상품구매에 성공했다고 뜬다.
 

이제 빌드해서 테스트해보자.
빌드할 때는 결제자의 정보가 필요하므로 이전에 구현했던 GPGS의 로그인씬을 붙여서 빌드했다.


- 로그인에 성공했다면 IAP씬으로 넘어갈 것이다.
 - IAP씬에서 구매버튼을 누르면 결제창이 뜨고 구매를 하면 오른쪽과 같이 개발자인 나에게 결제메일이 날아온다.
 - RemoveAds도 마찬가지.