Spec-Zone.ru › Qt 5.13

Класс 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.

void QInAppStore::productRegistered(QInAppProduct *product)

Этот сигнал генерируется, когда информация о product была собрана из удаленного магазина. Он испускается в ответ на вызов registerProduct() для того же продукта.

См. также productUnknown().

void QInAppStore::productUnknown(QInAppProduct::ProductType productType, const QString &identifier)

Этот сигнал генерируется, когда продукт с именем identifier был зарегистрирован с помощью registerProduct() и информация, соответствующая этому, не могла быть получена от удаленного магазина. productType соответствует типу продукта, который изначально был передан в registerProduct().

См. также productRegistered().

void QInAppStore::transactionReady(QInAppTransaction *transaction)

Этот сигнал генерируется всякий раз, когда есть transaction, который требуется завершить. Он испускается либо при запросе покупки продукта, либо при вызове restorePurchases() и предыдущей покупке продукта, либо при вызове registerProduct() для продукта и имеющейся незавершенной транзакции для продукта.

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.13/qinappstore.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API