Auf dieser Seite

Demo zu In-App-Käufen – Basisklassen

Die folgenden Basisklassen sind Teil der Demo zu In-App-Käufen:

Klassen

KlasseBeschreibung
InAppProductEin im Store registriertes Produkt.
InAppStoreHauptzugangspunkt für die Verwaltung von In-App-Käufen.
InAppTransactionEnthält Informationen zu einer Transaktion im externen App-Store.
InAppPurchaseBackendKommuniziert mit dem externen Store.

InAppProduct

InAppProduct kapselt ein Produkt im externen Store, nachdem es im InAppStore registriert und dessen Existenz bestätigt wurde. Es verfügt über eine Kennung, die mit der Kennung des Produkts im externen Store übereinstimmt, einen Preis, der aus dem externen Store abgerufen wird, sowie einen Produkttyp.

Der Produkttyp kann „ Consumable “ oder „ Unlockable “ sein. Verbrauchsartikel können beliebig oft gekauft werden, solange jede Transaktion explizit von der Anwendung abgeschlossen wird. Freischaltbare Artikel können nur einmal gekauft werden.

„InAppProduct“ verfügt über 5 Rückgabevariablen: „ price “, „ title “, „ description “, „ identifier “ und „ productType “. Mit Ausnahme von „productType“ geben alle einen „ QString “ zurück.

„ProductType“ ist ein Enum-Typ und gibt „ 0 “ zurück, wenn es sich um einen „Consumable“ handelt, und „ 1 “, wenn es sich um einen „Unlockable“ handelt.

enum ProductType
{
   Consumable,
   Unlockable
};

Sehen Sie sich die abgeleiteten Klassen „ AndroidInAppProduct “ für Android und „ IosInAppProduct “ für iOS an.

InAppStore

Der zentrale Einstiegspunkt für die Verwaltung von In-App-Käufen. Es ist die Basisklasse für „ AndroidInAppProduct “ und „ IosInAppProduct “.

InAppStore wird verwendet, um In-App-Käufe in der Anwendung plattformübergreifend zu verwalten. Je nach Compiler prüft InAppStore mithilfe von Macros, welche Plattform verfügbar ist.

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);

   ...

Initialisierung des Stores

Beim Aufrufen der Store-Seite in der Demo verbindet InAppStore in der Funktion `setupBackend()` alle Signale mit den entsprechenden Slots. Anschließend werden mithilfe der Funktion `registerProduct()` die Produkt-ID und der Produkttyp jedes im externen Store registrierten Produkts in einem ` QHash `-Objekt namens `registeredProducts` gespeichert.

Die Registrierung eines Produkts erfolgt asynchron und löst zu einem bestimmten Zeitpunkt das Signal `productRegistered()` aus, sobald das Produkt im externen Shop gefunden wurde.

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

Abschluss eines Kaufs

Sobald die Artikel erfolgreich im Shop registriert wurden, kann der Nutzer sie kaufen, indem er auf eines der Produkte auf der Shop-Seite der App tippt. QML ruft die Funktion `product.purchase()` in `AndroidInAppProduct` oder ` IosInAppProduct ` auf, wodurch der Kaufablauf des externen Shops gestartet wird.

Sobald ein Kauf abgeschlossen wurde – unabhängig vom Erfolg – wird das Signal „transactionReady“ an „ InAppProductQmlType “ gesendet, um QML zu benachrichtigen, dass die Transaktion abgeschlossen werden kann.

Wiederherstellen von Käufen

In der Demo werden freischaltbare Käufe im App-Speicher gespeichert. Durch das Löschen des Speichers verliert der Nutzer den freischaltbaren Kauf und kann ihn nicht erneut erwerben, da er laut dem externen Store bereits im Besitz des Nutzers ist.

Sie können die Schaltfläche „ restore purchases “ auf der Shop-Seite der App verwenden, um Ihre freischaltbaren Käufe wiederherzustellen. Die Schaltfläche „Käufe wiederherstellen“ ruft die Funktion `restorePurchases()` auf und überprüft den externen Shop auf bereits im Besitz befindliche Käufe. Sie sendet das Signal `transactionRedy()`, um den Kauf abzuschließen und wiederherzustellen.

InAppStore hat keine abgeleiteten Klassen.

InAppTransaction

InAppTransaction enthält Informationen zu einer Transaktion im externen App-Store und wird in der Regel als Ergebnis des Aufrufs von InAppProduct::purchase() bereitgestellt. Wenn der Kaufvorgang vom Benutzer abgeschlossen wurde (durch Bestätigung des Kaufs, beispielsweise durch Eingabe seines Passworts), sendet die InAppStore-Instanz, die das Produkt enthält, ein InAppStore::transactionReady()-Signal mit Daten zur Transaktion aus.

Die Funktion `status()` gibt Auskunft darüber, ob die Transaktion erfolgreich war oder nicht. War sie erfolgreich, sollte die Anwendung entsprechende Maßnahmen ergreifen. Sobald die erforderlichen Maßnahmen durchgeführt wurden, sollte `finalize()` aufgerufen werden. Die Funktion `finalize()` sollte unabhängig vom Status der Transaktion aufgerufen werden.

Sehen Sie sich die abgeleiteten Klassen unter AndroidInAppTransaction für Android und IosInAppTransaction für iOS an.

InAppPurchaseBackend

InAppPurchaseBackend wird verwendet, um abgeleitete Klassen für AndroidInAppPurchaseBackend und IosInAppPurchaseBackend zu erstellen.

© 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.