Как определить продолжительность подписки (ежемесячно или ежегодно) при покупке в библиотеке платежей Google Play?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как определить продолжительность подписки (ежемесячно или ежегодно) при покупке в библиотеке платежей Google Play?

Сообщение Anonymous »

Я использую библиотеку Google Play Billing в своем приложении Kotlin, чтобы позволить пользователям приобретать подписки. У меня есть один продукт с двумя предложениями подписки: одно на месяц, а другое на год.
После того, как пользователь приобретет подписку, я могу получить сведения о его покупке с помощью BillingClient. .queryPurchasesAsync(), но он не отображает продолжительность.
Я хочу определить, выбрал ли пользователь предложение ежемесячной или годовой подписки после совершения покупки.
Что Я пробовал:
Я запросил доступные сведения о продукте с помощью BillingClient.queryProductDetailsAsync(), чтобы получить предложения по подписке (SubscriptionOfferDetails).
Я попытался сравнить OfferToken из объекта Purchase с OfferToken в SubscriptionOfferDetails, но они не совпадают.
Как правильно определить продолжительность подписки (ежемесячно или ежегодно) за совершенную покупку при использовании библиотеки Google Play Billing? Есть ли правильный способ сопоставить детали покупки с деталями конкретного предложения?
Будем очень признательны за любые рекомендации или примеры!
fun startBillingConnection() {
billingClient.startConnection(object : BillingClientStateListener {
override fun onBillingSetupFinished(billingResult: BillingResult) {
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
Log.d(TAG, "Billing response OK")
queryPurchases()
queryProductDetails()
_billingState.update { it.copy(isClientConnected = true) }
} else {
Log.e(TAG, billingResult.debugMessage)
handleBillingError(billingResult, ErrorContext.CONNECTION)
_billingState.update { it.copy(isClientConnected = false) }
}
}

override fun onBillingServiceDisconnected() {
Log.i(TAG, "Billing connection disconnected")
_billingState.update { it.copy(isClientConnected = false) }
}
})
}

private fun querySubscriptionProducts() {
val params = QueryProductDetailsParams.newBuilder()
val productList = SUBS_PRODUCTS.map { productId ->
QueryProductDetailsParams.Product.newBuilder()
.setProductId(productId)
.setProductType(BillingClient.ProductType.SUBS)
.build()
}

params.setProductList(productList).let { productDetailsParams ->
billingClient.queryProductDetailsAsync(productDetailsParams.build(), this)
}
}

override fun onProductDetailsResponse(
billingResult: BillingResult,
productDetailsList: MutableList
) {
when (billingResult.responseCode) {
BillingClient.BillingResponseCode.OK -> {
if (productDetailsList.isEmpty()) {
Log.e(TAG, "onProductDetailsResponse: Found null or empty ProductDetails.")
} else {
val newProducts = productDetailsList.associateBy { it.productId }
_billingState.update {
it.copy(products = it.products + newProducts)
}
}
}

else -> {
handleBillingError(billingResult, ErrorContext.PRODUCT_DETAILS)
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... urchase-in
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»