Тип QML продукта
Продукт для внутриприложениевой покупки. Подробнее...
| Заявление импорта: | import QtPurchasing 1.15 |
| С: | QtPurchasing 1.0 |
Свойства
- описание : строка
- идентификатор : строка
- цена : строка
- состояние : перечисление
- магазин : объект
- заголовок : строка
- тип : строка
Сигналы
- onPurchaseFailed(объект transaction)
- onPurchaseRestored(объект transaction)
- onPurchaseSucceeded(объект transaction)
Методы
- purchase()
- resetStatus()
Подробное описание
Продукт содержит информацию о продукте на внешнем рынке. После установки идентификатора и типа продукта, продукт будет запрошен с внешнего рынка. Затем будут установлены такие свойства, как цена, и будет возможна покупка продукта. Свойство состояние содержит информацию о процессе регистрации.
Примечание: Изменить идентификатор и тип невозможно, после их установки и регистрации продукта.
Документация свойств
описание : строка
Это свойство содержит описание продукта после успешного запроса с внешнего рынка. Заголовок локализован, если внешний рынок определил описание в текущем языке пользователя.
идентификатор : строка
Это свойство содержит идентификатор продукта на внешнем рынке. Он должен соответствовать идентификатору, используемому для предварительной регистрации продукта.
При установке и идентификатора и типа, продукт запрашивается с внешнего рынка, и другие его свойства обновляются асинхронно. В этот момент идентификатор и тип больше нельзя изменить.
В следующем примере запрашивается продукт «myUnlockableProduct» с внешнего рынка.
Store {
Product {
identifier: "myUnlockableProduct"
type: Product.Unlockable
// ...
}
} цена : строка
Это свойство содержит цену продукта после успешного запроса с внешнего рынка. Цена — это строка, содержащая валюту и значение, и обычно локализована для текущего пользователя.
Например, в следующем примере отображается цена продукта «myUnlockableProduct»:
Store {
Product {
id: myUnlockableProduct
identifier: "myUnlockableProduct"
type: Product.Unlockable
// ...
}
}
Text {
text: myUnlockableProduct.status === Product.Registered
? "Price is " + myUnlockableProduct.price
: "Price unknown at the moment"
} При запуске в норвежской локализации этот код может отобразить, например, «Цена 6,00 крон» для продукта стоимостью в один доллар.
состояние : перечисление
Это свойство содержит текущее состояние продукта в процессе регистрации.
- Product.Uninitialized - Это начальное состояние, до установки свойства identifier.
- Product.PendingRegistration - Указывает, что продукт в данный момент запрашивается с внешнего рынка. Продукт получает это состояние при установке его идентификатора.
- Product.Registered - Указывает, что продукт был успешно найден на внешнем рынке. Теперь можно запросить его цену и приобрести продукт.
- Product.Unknown - Продукт не был найден на внешнем рынке. Это может быть вызвано, например, ошибкой в написании идентификатора продукта.
Store {
Product {
identifier: "myConsumableProduct"
type: Product.Consumable
onStatusChanged: {
switch (status) {
case Product.PendingRegistration: console.debug("Registering " + identifier); break
case Product.Registered: console.debug(identifier + " registered with price " + price); break
case Product.Unknown: console.debug(identifier + " was not found in the market place"); break
}
}
// ...
}
} магазин : объект
Это свойство содержит магазин, содержащий продукт. Когда продукт создается как дочерний элемент магазина, это устанавливается автоматически для родителя, как в следующем примере:
Store {
Product {
// No need to set the store explicitly here, as it will automatically be
// bound to the parent
identifier: "myConsumableProduct"
type: Product.Consumable
}
Product {
// No need to set the store explicitly here, as it will automatically be
// bound to the parent
identifier: "myUnlockableProduct"
type: Product.Unlockable
}
} Однако в некоторых сложных случаях, например, при создании продуктов на основе модели, можно создать продукт в любом месте документа QML и явно установить магазин, как в следующем примере:
ListModel {
id: productModel
ListElement {
productIdentifier: "myConsumableProduct"
productType: Product.Consumable
}
ListElement {
productIdentifier: "myUnlockableProduct"
productType: Product.Unlockable
}
}
Store {
id: myStore
}
Instantiator {
model: productModel
delegate: Product {
identifier: productIdentifier
type: productType
store: myStore
}
} заголовок : строка
Это свойство содержит заголовок продукта после успешного запроса с внешнего рынка. Заголовок локализован, если внешний рынок определил заголовок в текущем языке пользователя.
тип : строка
Это свойство содержит тип продукта на внешнем рынке.
- Product.Consumable - Продукт является расходуемым и может быть приобретён более одного раза одним пользователем, при условии, что транзакция предыдущей покупки завершена.
- Product.Unlockable - Продукт может быть приобретён только один раз одним пользователем. Если приложение удаляется и переустанавливается на устройстве (или установлено на новом устройстве тем же пользователем), покупки продуктов Unlockable могут быть восстановлены с помощью метода restorePurchases() магазина.
При установке и идентификатора и типа, продукт запрашивается с внешнего рынка, и другие его свойства обновляются асинхронно. В этот момент идентификатор и тип больше нельзя изменить.
В следующем примере запрашивается продукт «myUnlockableProduct» с внешнего рынка.
Store {
Product {
identifier: "myUnlockableProduct"
type: Product.Unlockable
// ...
}
} Документация сигналов
onPurchaseFailed(объект transaction)
Этот обработчик вызывается, когда запрос на покупку данного продукта не удался. Это обычно происходит, если приложение вызывает purchase() для продукта, и пользователь впоследствии отменяет покупку. Это также может произойти в других ситуациях, например, при отсутствии подходящего сетевого подключения.
Все продукты должны иметь обработчик onPurchaseFailed.
После соответствующей реакции необходимо вызвать функцию finalize() для объекта transaction. Если этого не сделать, обработчик может быть вызван снова при следующей регистрации продукта.
В следующем примере реакция на неудачную попытку покупки заключается в вызове пользовательской функции для отображения сообщения пользователю.
Store {
Product {
id: myConsumableProduct
identifier: "myConsumableProduct"
type: Product.Consumable
onPurchaseFailed: {
myDisplayHelper.message("Product was not purchased. You have not been charged.")
transaction.finalize()
}
// ...
}
} Примечание: Соответствующий обработчик — onOnPurchaseFailed.
onPurchaseRestored(объект transaction)
Этот обработчик вызывается при восстановлении ранее купленного продукта Unlockable. Это может произойти при вызове функции restorePurchases() в текущем магазине. Затем для каждого продукта Unlockable, ранее приобретённого пользователем, вызывается обработчик onPurchaseRestored.
Приложения, использующие функцию restorePurchases(), должны включать этот обработчик во все продукты Unlockable. В обработчике приложение должно убедиться, что информация о покупке сохранена, и вызвать finalize() для объекта transaction, если информация была успешно сохранена (или уже проверена на сохранение).
В следующем примере вызывается пользовательская функция, которая либо сохраняет информацию о покупке, либо проверяет, что она уже сохранена. Когда данные проверены, транзакция завершается. Если данные не удалось проверить, вызывается другая пользовательская функция для отображения сообщения об ошибке пользователю. Если транзакция не завершена, обработчик вызывается снова для той же транзакции при следующей регистрации продукта (при запуске приложения).
Store {
Product {
id: myUnlockableProduct
identifier: "myUnlockableProduct"
type: Product.Unlockable
onPurchaseRestored: {
if (myStorage.savePurchaseInformation(identifier)) {
transaction.finalize()
} else {
myDisplayHelper.message("Failed to store purchase information. Is there available storage?")
}
}
// ...
}
} Примечание: Соответствующий обработчик — onOnPurchaseRestored.
onPurchaseSucceeded(объект transaction)
Этот обработчик вызывается при успешной покупке продукта. Он срабатывает, когда приложение вызвало purchase() для продукта, и пользователь впоследствии подтвердил покупку, например, введя пароль.
Все продукты должны иметь обработчик onPurchaseSucceeded. Этот обработчик, в свою очередь, должен сохранить информацию о купленном продукте и, после сохранения и проверки информации, вызвать finalize() для объекта transaction.
Обработчик должен поддерживать многократный вызов для одной и той же покупки. Например, выполнение приложения может быть случайно прервано после сохранения информации о покупке, но до завершения транзакции. В этом случае обработчик должен проверить, что информация уже сохранена в постоянном хранилище, и затем завершить транзакцию.
В следующем примере пытается сохранить состояние покупки расходуемого продукта с использованием пользовательской функции. Завершение транзакции происходит только в случае успешного сохранения данных. В противном случае вызывается другая пользовательская функция для отображения сообщения об ошибке пользователю.
Store {
Product {
id: myConsumableProduct
identifier: "myConsumableProduct"
type: Product.Consumable
onPurchaseSucceeded: {
if (myStorage.savePurchaseInformation(identifier)) {
transaction.finalize()
} else {
myDisplayHelper.message("Failed to store purchase information. Is there available storage?")
}
}
// ...
}
} Если транзакция не завершена, обработчик onPurchaseSucceeded будет вызван повторно в следующий раз, когда продукт будет зарегистрирован (при запуске приложения). Это означает, что если сохранение информации не удалось, у пользователя будет возможность исправить проблему (например, удалив что-то другое, чтобы освободить место для данных), и транзакция будет завершена после перезапуска приложения и решения проблемы.
Примечание: Приобретенный, потребляемый продукт нельзя приобрести повторно, пока предыдущая транзакция не будет завершена.
Примечание: Соответствующий обработчик — onOnPurchaseSucceeded.
Документация методов
purchase()
Запускает процесс покупки для данного продукта. Процесс покупки асинхронный. Когда он завершится, либо обработчик onPurchaseSucceeded, либо обработчик onPurchaseFailed в объекте будет вызван с результирующей транзакцией.
resetStatus()
Сбрасывает статус этого продукта и повторно пытается запросить его из внешнего рынка.
Этот метод можно использовать, когда запрос продукта по какой-либо причине не удался (например, из-за таймаутов сети).
Этот метод был представлен в QtPurchasing 1.0.2.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qml-qtpurchasing-product.html