summaryrefslogtreecommitdiffstats
path: root/examples/demos/hangman/doc/src/baseclass.qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'examples/demos/hangman/doc/src/baseclass.qdoc')
-rw-r--r--examples/demos/hangman/doc/src/baseclass.qdoc160
1 files changed, 160 insertions, 0 deletions
diff --git a/examples/demos/hangman/doc/src/baseclass.qdoc b/examples/demos/hangman/doc/src/baseclass.qdoc
new file mode 100644
index 000000000..ef71f6b69
--- /dev/null
+++ b/examples/demos/hangman/doc/src/baseclass.qdoc
@@ -0,0 +1,160 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Free Documentation License Usage
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of
+** this file. Please review the following information to ensure
+** the GNU Free Documentation License version 1.3 requirements
+** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+ \page qtpurchasing-baseclasses.html
+ \title Base Classes
+ \brief Base classes are used in purchasing demo to enable cross-platform for Android and iOS.
+ \ingroup qtpurchasing-examples
+
+ \section1 Classes
+ \table
+ \header
+ \li Class
+ \li Description
+ \row
+ \li \l InAppProduct
+ \li A product registered in the store.
+ \row
+ \li \l InAppStore
+ \li Main entry point for managing in-app purchases.
+ \row
+ \li \l InAppTransaction
+ \li Contains information about a transaction in the external app store.
+ \row
+ \li \l InAppPurchaseBackend
+ \li Communicates with the external store.
+ \endtable
+
+ \section1 InAppProduct
+
+ InAppProduct encapsulates a product in the external store after it has been registered in
+ InAppStore and confirmed to exist. It has an identifier which matches the identifier of the
+ product in the external store, it has a price which is retrieved from the external store,
+ and it has a product type.
+
+ The product type can be \c Consumable or \c Unlockable. Consumable products can be
+ purchased any number of times as long as each transaction is finalized explicitly by the
+ application. Unlockable types can only be purchased once.
+
+ InAppProduct has 5 returnable variables \c price, \c title, \c description \c identifier and
+ \c productType. All return a QString except productType.
+
+ ProductType is an enum type and returns \c 0 if it is Consumable and \c 1 if Unlockable.
+ \code
+ enum ProductType
+ {
+ Consumable,
+ Unlockable
+ };
+ \endcode
+
+ Check out the derived classes \l AndroidInAppProduct for Android and \l IosInAppProduct for iOS.
+
+ \section1 InAppStore
+
+ The main entry point for managing in-app purchases. It is the base class for AndroidInAppProduct and
+ IosInAppProduct.
+
+ InAppStore is used for managing in-app purchases in the application in a cross-platform way.
+ Depending on the compiler, InAppStore checks what platform is available using \c Macros.
+
+ \code
+ 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);
+
+ ...
+ \endcode
+
+ \section2 Initializing the store
+
+ Upon going to the store page in the demo, InAppStore connects all signals to related slots in
+ setupBackend() function. Then uses the registerProduct() function to register product ID and
+ productType of each product registered in the external store to a QHash registeredProducts.
+
+ Registering a product is asynchronous, and will at some point yield productRegistered()
+ signals when its found from external store.
+
+ \code
+ void InAppStore::registerProduct(InAppProduct *product)
+ {
+ d->registeredProducts[product->identifier()] = product;
+ emit productRegistered(product);
+ }
+ \endcode
+
+ \section2 Completing a purchase
+
+ Once the items have been successfully registered in the store, The user can purchase them by
+ pressing on of the products on the apps store page. QML will call product.purchase()
+ function in AndroidInAppProduct or IosInAppProduct which will open the external store's
+ purchasing flow.
+
+ When a purchase has been completed regardless of success, the transactionRedy signal will be
+ sent to \c InAppProductQmlType, to notify QML to start finalize the transaction.
+
+ section2 Restoring purchases
+
+ In the demo unlockable purchases will be saved on the apps storage. By clearing the storage
+ the user will lose the unlockable purchase and it cannot be purchased again, as according to
+ the external store it is already owned.
+
+ You can use the \c{restore purchases} button in the apps store page to restore your unlockable purchases.
+ The restore purchases button calls the restorePurchases() function and will check the external store for already owned
+ purchases. It emits the transactionRedy() signal to finalize and restore the purchase.
+
+ InAppStore has no derived classes.
+
+ \section1 InAppTransaction
+
+ InAppTransaction contains information about a transaction in the external app store and is
+ usually provided as a result of calling InAppProduct::purchase(). When the purchase flow has
+ been completed by the user (confirming the purchase, for instance by entering their password),
+ the InAppStore instance containing the product will emit a InAppStore::transactionReady()
+ signal with data about the transaction.
+
+ The status() function provides information on if the transaction was successful or not. If it was
+ successful, then the application should take appropriate action. When the necessary action has
+ been performed, finalize() should be called. The finalize() function should be called regardless
+ of the status of the transaction.
+
+ Check out the derived classes \l {AndroidInAppTransaction}{AndroidInAppTransaction} for android and \l {IosInAppTransaction}{IosInAppTransaction} for iOS.
+
+ \section1 InAppPurchaseBackend
+
+ InAppPurchaseBackend is used to create derived classs for
+ AndroidInAppPurchaseBackend and IosInAppPurchaseBackend
+*/