アプリ内課金デモ - 基底クラス
アプリ内課金デモには、以下の基底クラスが含まれています:
クラス
| クラス | 説明 |
|---|---|
| InAppProduct | ストアに登録された商品。 |
| InAppStore | アプリ内購入を管理するためのメインのエントリポイント。 |
| InAppTransaction | 外部アプリストアにおけるトランザクションに関する情報を保持します。 |
| InAppPurchaseBackend | 外部ストアと通信します。 |
InAppProduct
InAppProductは、InAppStoreに登録され、存在が確認された後、外部ストア内の商品をカプセル化します。これには、外部ストア内の商品の識別子と一致する識別子、外部ストアから取得された価格、および商品タイプが含まれます。
商品タイプには、Consumable またはUnlockable があります。消費型商品は、各トランザクションがアプリケーションによって明示的に確定される限り、何度でも購入可能です。アンロック型商品は1回のみ購入可能です。
InAppProductには、price 、title 、description 、identifier 、productType の5つの返却可能な変数があります。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() 関数を使用して、外部ストアに登録されている各商品の productID および productType を、QHash の registeredProducts に登録します。
商品の登録は非同期で行われ、外部ストアから商品が見つかった時点で、productRegistered() シグナルが発行されます。
void InAppStore::registerProduct(InAppProduct *product)
{
d->registeredProducts[product->identifier()] = product;
emit productRegistered(product);
}購入の完了
商品がストアに正常に登録されると、ユーザーはアプリ内のストアページで商品の一つをタップすることで購入できます。QMLは、AndroidInAppProductまたはIosInAppProduct 内のproduct.purchase()関数を呼び出し、これにより外部ストアの購入フローが開始されます。
購入が完了すると(成功・失敗にかかわらず)、InAppProductQmlType に transactionReady シグナルが送信され、QML にトランザクションの確定を開始するよう通知されます。
購入履歴の復元
このデモでは、アンロック可能な購入データはアプリのストレージに保存されます。ストレージをクリアすると、ユーザーはアンロック可能な購入データを失い、外部ストアではすでに所有済みとみなされるため、再度購入することはできません。
アプリのストアページにある「restore purchases 」ボタンを使用すると、アンロック可能な購入を復元できます。「 」ボタンは `restorePurchases()` 関数を呼び出し、外部ストアで既に所有されている購入を確認します。その後、`transactionRedy()` シグナルを発行して、購入を確定および復元します。
InAppStore には派生クラスはありません。
InAppTransaction
InAppTransactionは、外部アプリストアにおけるトランザクションに関する情報を保持しており、通常はInAppProduct::purchase()の呼び出し結果として提供されます。 ユーザーによって購入フローが完了すると(パスワードの入力などによる購入の確認など)、その製品を含む InAppStore インスタンスは、トランザクションに関するデータを含む InAppStore::transactionReady() シグナルを発行します。
status() 関数は、トランザクションが成功したかどうかに関する情報を提供します。成功した場合は、アプリケーションは適切なアクションを実行する必要があります。必要なアクションが実行されたら、finalize() を呼び出す必要があります。finalize() 関数は、トランザクションのステータスに関係なく呼び出す必要があります。
Android用の派生クラス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.