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