Spec-Zone.ru › Qt 5.14

Класс 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.14/qinappstore.html

Spec-Zone.ru

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