Класс QInAppStore
Основная точка входа для управления внутриигровыми покупками. Подробнее...
| Заголовок: | #include <QInAppStore> |
| Наследует: | QObject |
Открытые функции
| QInAppStore(QObject *parent = nullptr) | |
| virtual | ~QInAppStore() |
| void | registerProduct(QInAppProduct::ProductType productType, const QString &identifier) |
| QInAppProduct * | registeredProduct(const QString &identifier) const |
| void | restorePurchases() |
| void | setPlatformProperty(const QString &propertyName, const QString &value) |
Сигналы
| void | productRegistered(QInAppProduct *product) |
| void | productUnknown(QInAppProduct::ProductType productType, const QString &identifier) |
| void | transactionReady(QInAppTransaction *transaction) |
Подробное описание
QInAppStore используется для управления внутриигровыми покупками в вашем приложении кроссплатформенным способом.
Использование QInAppStore
В целом, для завершения внутриигровой покупки с помощью API необходимо выполнить два шага:
Инициализация магазина
При запуске приложения подключите все сигналы в QInAppStore к соответствующим слотам в собственном объекте QObject. Затем используйте функцию registerProduct() для регистрации идентификатора каждого продукта, который вы ожидаете найти в внешнем магазине, а также его типа.
Регистрация продукта асинхронна и в какой-то момент сгенерирует один из следующих двух сигналов: 1. productRegistered() — если продукт был найден во внешнем магазине с соответствующим типом. 2. productUnknown() — если продукт не был найден во внешнем магазине с указанным типом.
Кроме того, сигнал transactionReady() может быть выдан для любой существующей транзакции, которая еще не была завершена. В этот момент вы должны проверить, была ли транзакция ранее зарегистрирована. Если нет, зарегистрируйте ее сразу. Наконец, вызовите QInAppTransaction::finalize() для транзакции.
Завершение покупки
После успешной регистрации элементов в магазине вы можете их приобрести. Получите ранее зарегистрированный QInAppProduct с помощью registeredProduct() и вызовите QInAppProduct::purchase(). Этот вызов также является асинхронным.
В какой-то момент позже сигнал transactionReady() будет выдан для покупки. Проверьте QInAppTransaction::status(), чтобы увидеть, была ли покупка успешно завершена. Если да, то вы должны сохранить информацию о покупке безопасным способом, чтобы приложение могло восстановить ее позже.
Когда вы закончите, вызовите QInAppTransaction::finalize(), независимо от его статуса. Транзакции, которые не завершены, будут повторно выданы при следующем вызове registerProduct() для того же продукта.
Примечание: Обратите внимание, что QInAppStore не сохраняет для вас состояние покупки элементов в магазине. Приложение должно сохранить эту информацию безопасным способом после получения сигнала transactionReady(), прежде чем вызывать QInAppTransaction::finalize().
Типы покупок
QInAppStore поддерживает два типа покупок: QInAppProduct::Consumable и QInAppProduct::Unlockable. Первый будет потреблен при завершении транзакции и вызове QInAppTransaction::finalize(), что означает, что его можно приобрести снова любое количество раз. Разблокируемые элементы можно приобрести только один раз.
Потребляемые продукты временные и могут быть приобретены многократно. Примеры — дневной билет на автобус или волшебный меч в компьютерной игре. Обратите внимание, что при многократном приобретении одного и того же продукта вы должны вызывать QInAppTransaction::finalize() для каждой транзакции, прежде чем сможете приобрести этот же продукт снова.
Разблокируемые продукты — это продукты, которые пользователь приобретает один раз, и покупка этих элементов будет постоянной. Обычно они используются для разблокировки контента или функций в приложении.
Восстановление покупок
Если ваше приложение имеет разблокируемые продукты и не сохраняет состояния покупок этих продуктов таким образом, чтобы их можно было восстановить при повторной установке приложения, вы должны предоставить пользователю способ ручного восстановления покупок.
Вызовите функцию restorePurchases(), чтобы начать этот процесс. При условии, что удаленный магазин поддерживает эту функцию, вы в какой-то момент получите transactionReady() для каждого разблокируемого элемента, который был ранее приобретен текущим пользователем.
Сохраните состояние покупки каждого продукта и вызовите QInAppTransaction::finalize() так же, как и для обычной покупки.
Поскольку restorePurchases() на некоторых платформах может попросить пользователя ввести свой пароль, его обычно следует вызывать в ответ на ввод пользователем. Например, приложения могут иметь кнопку в пользовательском интерфейсе, которая будет запускать restorePurchases(), и пользователи могут нажать на нее вручную, если они переустановили приложение (или установили его на новое устройство) и им нужно разблокировать функции, за которые они ранее заплатили.
Примечание: Это зависит от поддержки этой функциональности в удаленном магазине. Если удаленный магазин не сохраняет состояние покупки разблокируемых продуктов для вас, вызов не приведет к сигналам transactionReady(), как если бы не было приобретено никаких продуктов. Как Android, так и OS X/iOS бэкэнды поддерживают восстановление разблокируемых продуктов.
Документация по функциям членов
QInAppStore::QInAppStore(QObject *parent = nullptr)
Конструирует QInAppStore с заданным parent.
[signal] void QInAppStore::productRegistered(QInAppProduct *product)
Этот сигнал выдается, когда информация о product была собрана из удаленного магазина. Он выдается в ответ на вызов registerProduct() для того же продукта.
См. также productUnknown().
[signal] void QInAppStore::productUnknown(QInAppProduct::ProductType productType, const QString &identifier)
Этот сигнал выдается, когда продукт с именем identifier был зарегистрирован с помощью registerProduct() и соответствующая информация не могла быть предоставлена удаленным магазином. productType соответствует типу продукта, который изначально был передан в registerProduct().
См. также productRegistered().
[signal] void QInAppStore::transactionReady(QInAppTransaction *transaction)
Этот сигнал выдается всякий раз, когда есть transaction, который нужно завершить. Он выдается либо при запросе покупки продукта, либо при вызове restorePurchases() и предварительной покупке продукта, либо при вызове registerProduct() для продукта и наличии незавершенной транзакции для продукта.
[virtual] QInAppStore::~QInAppStore()
Удаляет QInAppStore.
void QInAppStore::registerProduct(QInAppProduct::ProductType productType, const QString &identifier)
Регистрирует продукт, идентифицированный identifier и с заданным productType. identifier должен совпадать с идентификатором продукта в удаленном магазине. Если удаленный магазин различает потребляемые и разблокируемые продукты, productType также должен совпадать с этим.
Вызов этой функции асинхронно генерирует либо сигнал productRegistered(), либо productUnknown(). Также может генерировать сигнал transactionReady(), если для продукта есть ожидающая транзакция, которая ещё не завершена.
Примечание: Эту функцию можно вызывать через метаобъектную систему и из QML. См. Q_INVOKABLE.
QInAppProduct *QInAppStore::registeredProduct(const QString &identifier) const
Возвращает ранее зарегистрированный продукт, однозначно определяемый по identifier.
Примечание: Эту функцию можно вызывать через метаобъектную систему и из QML. См. Q_INVOKABLE.
void QInAppStore::restorePurchases()
Запрашивает существующие покупки разблокируемых элементов и генерирует сигнал transactionReady() для каждого разблокируемого продукта, который удалённый магазин подтверждает как ранее купленный текущим пользователем.
Эта функция обычно используется для восстановления разблокируемых продуктов, когда приложение переустановлено и потеряло сохранённое состояние покупок.
Примечание: Вызов этой функции может запросить у пользователя пароль на некоторых платформах.
Примечание: Эту функцию можно вызывать через метаобъектную систему и из QML. См. Q_INVOKABLE.
void QInAppStore::setPlatformProperty(const QString &propertyName, const QString &value)
Устанавливает платформенно-специфическое свойство, заданное propertyName, в значение value. Это можно использовать для передачи информации платформенной реализации. Свойства будут проигнорированы на других платформах.
В настоящее время поддерживается только платформное свойство "AndroidPublicKey", используемое Android-бекендом для проверки покупок. Если оно не установлено, покупки будут приняты без проверки. (Вы также можете выполнить проверку вручную, получив подпись из объекта QInAppTransaction для покупки.) Для получения более подробной информации см. документацию по безопасности биллинга Android.
Примечание: Эту функцию можно вызывать через метаобъектную систему и из QML. См. Q_INVOKABLE.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qinappstore.html