Basis-Klassen

Klassen

KlasseBeschreibung
InAppProduktEin im Store registriertes Produkt.
InAppStoreHaupteinstiegspunkt für die Verwaltung von InApp-Käufen.
InAppTransactionEnthält Informationen über eine Transaktion im externen App-Store.
InAppPurchaseBackendKommuniziert mit dem externen Store.

InAppProduct

InAppProduct kapselt ein Produkt im externen Store, nachdem es in InAppStore registriert und seine Existenz bestätigt wurde. Es hat einen Bezeichner, der mit dem Bezeichner des Produkts im externen Store übereinstimmt, es hat einen Preis, der aus dem externen Store abgerufen wird, und es hat einen Produkttyp.

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

InAppProduct hat 5 rückgabefähige Variablen price, title, description identifier und productType. Alle geben ein QString zurück, außer productType.

ProductType ist ein Enum-Typ und gibt 0 zurück, wenn es sich um einen verbrauchbaren Typ handelt, und 1, wenn er nicht verschließbar ist.

enum ProductType
{
   Consumable,
   Unlockable
};

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

InAppStore

Der Haupteinstiegspunkt für die Verwaltung von InApp-Käufen. Sie ist die Basisklasse für AndroidInAppProduct und IosInAppProduct.

InAppStore wird für die plattformübergreifende Verwaltung von In-App-Käufen in der Anwendung verwendet. Je nach Compiler prüft InAppStore mit 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 Shop-Seite in der Demo verbindet InAppStore alle Signale mit den entsprechenden Slots in der Funktion setupBackend(). Dann wird die Funktion registerProduct() verwendet, um die Produkt-ID und den Produkttyp jedes im externen Store registrierten Produkts in QHash registeredProducts zu registrieren.

Die Registrierung eines Produkts ist asynchron und wird zu einem bestimmten Zeitpunkt productRegistered()-Signale ausgeben, wenn es im externen Shop gefunden wird.

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

Abschließen eines Kaufs

Sobald die Artikel erfolgreich im Store registriert wurden, kann der Benutzer sie kaufen indem er auf eines der Produkte auf der Store-Seite der Anwendung drückt. QML ruft die Funktion product.purchase() in AndroidInAppProduct oder IosInAppProduct auf, die den Einkaufsfluss des externen Stores öffnet.

Wenn ein Kauf unabhängig vom Erfolg abgeschlossen wurde, wird das Signal transactionRedy an InAppProductQmlType gesendet, um QML zu benachrichtigen, die Transaktion abzuschließen.

Wiederherstellung von Einkäufen

In der Demo werden die freischaltbaren Einkäufe im Speicher der App gespeichert. Durch das Löschen des Speichers verliert der Benutzer den freischaltbaren Kauf und kann ihn nicht erneut kaufen, da er laut dem externen Store bereits in seinem Besitz ist.

Sie können die Schaltfläche restore purchases auf der Seite des App-Stores verwenden, um Ihre freischaltbaren Einkäufe wiederherzustellen. Die Schaltfläche Käufe wiederherstellen ruft die Funktion restorePurchases() auf und prüft den externen Store auf bereits getätigte Käufe. Sie sendet das Signal transactionRedy() aus, um den Kauf abzuschließen und wiederherzustellen.

InAppStore hat keine abgeleiteten Klassen.

InAppTransaction

InAppTransaction enthält Informationen über eine Transaktion im externen App Store und wird in der Regel als Ergebnis eines Aufrufs von InAppProduct::purchase() bereitgestellt. Wenn der Benutzer den Kaufvorgang abgeschlossen hat (z. B. durch die Eingabe des Passworts), sendet die InAppStore-Instanz, die das Produkt enthält, ein InAppStore::transactionReady()-Signal mit Daten über die Transaktion.

Die Funktion status() gibt Auskunft darüber, ob die Transaktion erfolgreich war oder nicht. Wenn sie erfolgreich war, sollte die Anwendung die entsprechenden Maßnahmen ergreifen. Wenn 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 AndroidInAppTransaction für Android und IosInAppTransaction für iOS an.

InAppPurchaseBackend

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

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