언어:

iOS 에서 앱 내 구매 사용

환경설정

  1. iTunes Connect 에서 앱 내 구매 구성법:

    Google Play 의 id 는 모두 소문자여야 하며, 블루프린트 구성 편의를 위해 iOS 와 Android 양쪽의 ID 가 일치되도록 하는 것이 좋습니다.

    image alt text

  2. 사용하시는 ID 와 아울러 아이템이 소모성인지 아닌지도 같이 기록해 둡니다.

  3. 블루프린트 프로젝트라면 별다른 작업은 필요 없습니다. 하지만 코드 프로젝트의 경우 온라인 서브시스템을 사용하도록 프로젝트 구성을 해 놓지 않은 경우, 프로젝트의 Build.cs 파일에 다음 블록을 추가합니다:

    if (Target.Platform == UnrealTargetPlatform.IOS)
    {
        PrivateDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "OnlineSubsystem" });
        DynamicallyLoadedModuleNames.Add("OnlineSubsystemIOS");
    }
  4. [ProjectName]/Config/IOS/IOSEngine.ini 파일을 수정합니다:

    [OnlineSubsystemIOS.Store]
    bSupportsInAppPurchasing=True

구매 정보 읽기

image alt text

Read In-App Purchase Information 블루프린트 노드( 또는 그에 해당하는 C++ 함수 호출)를 통해 앱 내 구매 정보를 읽을 수 있습니다. 대부분의 온라인 서브시스템 함수와 마찬가지로, Player Controller 뿐만 아니라 제품 식별자도 입력으로 받습니다. 참고로 아래 Make In-App Purchase 는 하나의 식별자를 받는 반면, Read 는 배열 정보 처리가 가능합니다. 이 함수는 In App Purchase 구조체의 배열을 반환하고, 배열의 각 요소를 분리하여 이름, 설명, 가격 등 UI 에 표시하거나 게임플레이 로직에 사용할 데이터를 구합니다.

구매 완료

image alt text

앱 내 구매를 위해서는, Make an In-App Purchase 블루프린트 노드(, 또는 그에 해당하는 C++ 함수)를 사용합니다. Player Controller 뿐만 아니라 Product Request 구조체도 입력으로 받습니다. Product Request 는 단순히 iTunes Connect 나 Google Play Developer 콘솔에서의 제품 식별자(, 여기서는 match3theme_night)이며, 그 제품이 소모성인지 아닌지를 나타냅니다.

Make an In-App Purchase 노드는 latent (잠복성)이라, 구매의 성공 또는 실패 여부에 따라 게임플레이 동작이 갈리는 경우 두 개의 실행 핀을 사용해야 합니다. 온라인 서비스에서 응답을 받은 이후에만 실행될 것입니다. 이 노드는 (성공, 실패, 복구 등의) 구매 완료 상태와 In App Purchase Information 구조체의 자세한 내용도 같이 반환합니다.

이 함수는 잠복성이 아닌 (블루프린트 노드에 시계가 표시되지 않는) 버전이 있습니다. 그 노드의 실행 핀은 온라인 서비스에서의 응답을 기다리지 않으므로, 보통 잠복성 버전을 사용하게 됩니다.

구매 복구

image alt text

구매 복구(restore)는, Restore In-App Purchases 블루프린트 노드(, 또는 그에 해당하는 C++ 함수)를 사용합니다. Player Controller 만 받으며, Player Controller 에 연관된 모든 구매 정보 배열을 반환합니다. 그 후 그 배열을 처리하여 게임플레이 로직에 필요한 특정 식별자(들)에 비교합니다.

테스트

디바이스에 직접 로드한 빌드로 테스트할 수도 있고, iTunes Connect 에 업로드한 빌드로 테스트할 수도 있습니다. 구매를 테스트하는 사용자는 반드시 iTunes Connect 에서 반드시 내부 또는 외부 테스터여야 하며, 그 초대를 수락한 상태여야 합니다. 커스텀 프로비전 역시 필요할 것입니다.

유용한 링크