이 페이지에서

인앱 구매 데모 - 기본 클래스

다음 기본 클래스들은 인앱 구매 데모의 일부입니다:

클래스

클래스설명
InAppProduct스토어에 등록된 상품입니다.
InAppStore인앱 구매를 관리하기 위한 주요 진입점입니다.
InAppTransaction외부 앱 스토어에서 발생한 거래에 대한 정보를 포함합니다.
InAppPurchaseBackend외부 스토어와 통신합니다.

InAppProduct

InAppProduct는 InAppStore에 등록되고 존재 여부가 확인된 후, 외부 스토어의 상품을 캡슐화합니다. 이 객체는 외부 스토어의 상품 식별자와 일치하는 식별자를 가지며, 외부 스토어에서 가져온 가격과 상품 유형을 포함합니다.

상품 유형은 ‘ Consumable ’ 또는 ‘ Unlockable ’일 수 있습니다. 소모성 상품은 애플리케이션에서 각 거래를 명시적으로 완료하는 한 횟수 제한 없이 구매할 수 있습니다. 잠금 해제형 상품은 한 번만 구매할 수 있습니다.

InAppProduct에는 5개의 반환형 변수 price, title, description, identifier 및 productType 가 있습니다. productType을 제외한 모든 변수는 QString 를 반환합니다.

ProductType은 열거형이며, Consumable인 경우 0 을, Unlockable인 경우 1 을 반환합니다.

enum ProductType
{
   Consumable,
   Unlockable
};

Android용 AndroidInAppProduct 및 iOS용 IosInAppProduct 파생 클래스를 확인해 보세요.

InAppStore

인앱 구매를 관리하기 위한 주요 진입점입니다. 이는 AndroidInAppProduct 및 IosInAppProduct 의 기본 클래스입니다.

InAppStore는 크로스 플랫폼 방식으로 애플리케이션 내 구매를 관리하는 데 사용됩니다. 컴파일러에 따라 InAppStore는 Macros 를 사용하여 사용 가능한 플랫폼을 확인합니다.

void InAppStore::setupBackend()
{
   #ifdef Q_OS_ANDROID
   d->backend = new AndroidInAppPurchaseBackend;
   #endif

   #ifdef Q_OS_IOS
   d->backend = new IosInAppPurchaseBackend;
   #endif

   d->backend->setStore(this);

   ...

스토어 초기화

데모에서 스토어 페이지로 이동하면, InAppStore는 setupBackend() 함수 내에서 모든 시그널을 관련 슬롯에 연결합니다. 그런 다음 registerProduct() 함수를 사용하여 외부 스토어에 등록된 각 상품의 상품 ID와 상품 유형을 QHash 의 registeredProducts에 등록합니다.

상품 등록은 비동기적으로 이루어지며, 외부 스토어에서 상품이 발견되면 특정 시점에 productRegistered() 신호를 발생시킵니다.

void InAppStore::registerProduct(InAppProduct *product)
{
   d->registeredProducts[product->identifier()] = product;
   emit productRegistered(product);
}

구매 완료

상품이 스토어에 성공적으로 등록되면, 사용자는 앱의 스토어 페이지에서 상품을 탭하여 구매할 수 있습니다. QML은 AndroidInAppProduct 또는 IosInAppProduct 의 product.purchase() 함수를 호출하여 외부 스토어의 구매 흐름을 시작합니다.

구매가 완료되면(성공 여부와 관계없이) transactionReady 신호가 InAppProductQmlType 로 전송되어 QML에 트랜잭션 마무리를 시작하도록 알립니다.

구매 내역 복원

데모에서는 잠금 해제 가능한 구매 내역이 앱 저장소에 저장됩니다. 저장소를 지우면 사용자는 잠금 해제 가능한 구매 내역을 잃게 되며, 외부 스토어에서는 이미 소유한 것으로 인식되므로 다시 구매할 수 없습니다.

앱 스토어 페이지의 restore purchases 버튼을 사용하여 잠금 해제 가능한 구매 내역을 복원할 수 있습니다. ‘구매 내역 복원’ 버튼은 restorePurchases() 함수를 호출하며, 외부 스토어에서 이미 소유한 구매 내역을 확인합니다. 이 함수는 transactionRedy() 신호를 발생시켜 구매를 최종 확정하고 복원합니다.

InAppStore에는 파생 클래스가 없습니다.

InAppTransaction

InAppTransaction은 외부 앱 스토어의 거래에 대한 정보를 포함하며, 일반적으로 InAppProduct::purchase() 호출의 결과로 제공됩니다. 사용자가 구매 절차를 완료하면(예: 비밀번호 입력 등을 통해 구매를 확인함), 해당 상품을 포함하는 InAppStore 인스턴스는 거래에 대한 데이터와 함께 InAppStore::transactionReady() 신호를 발산합니다.

status() 함수는 트랜잭션이 성공했는지 여부에 대한 정보를 제공합니다. 성공한 경우, 애플리케이션은 적절한 조치를 취해야 합니다. 필요한 조치가 수행되면 finalize()를 호출해야 합니다. finalize() 함수는 트랜잭션의 상태와 관계없이 호출되어야 합니다.

안드로이드용 AndroidInAppTransaction 및 iOS용 IosInAppTransaction 파생 클래스를 확인해 보세요.

InAppPurchaseBackend

InAppPurchaseBackend 는 AndroidInAppPurchaseBackend 및 IosInAppPurchaseBackend 의 파생 클래스를 생성하는 데 사용됩니다.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.