关于确认购买的Google Play计费库文档声明:
在授予用户权限后,您必须尽快确认通过谷歌游戏计费库收到的所有具有成功状态的购买。
所以你的应用程序应该首先给用户他买了什么,然后确认购买。这也是他们的示例代码所暗示的:
fun handlePurchase() {
if (purchase.purchaseState === PurchaseState.PURCHASED) {
// Grant entitlement to the user.
...
// Acknowledge the purchase if it hasn't already been acknowledged.
if (!purchase.isAcknowledged) {
val acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder()
.setPurchaseToken(purchase.purchaseToken)
.build()
client.acknowledgePurchase(acknowledgePurchaseParams, acknowledgePurchaseResponseListener)
}
}
}
我目前正在开发一个Android应用程序,我让用户访问他们购买的内容后,确认返回一个确定的状态(所以反过来):
private fun acknowledgePurchase(purchase: Purchase) {
val params = AcknowledgePurchaseParams.newBuilder()
.setPurchaseToken(purchase.purchaseToken)
.build()
billingClient.acknowledgePurchase(params) { billingResult ->
when (billingResult.responseCode) {
BillingResponseCode.OK -> loadPurchase(purchase.sku)
else -> { ... }
}
}
}
因为留档说明:
...您必须在三天内确认所有购买。未能正确确认购买将导致这些购买被退款。
如果发生这种情况,用户得到退款,用户对产品的权利也应该被取消。但是在我的例子中,购买意味着加载数据,在数据库中存储东西,等等,我没有,也不想有代码来恢复这一点。因此,只有在成功确认后,我才向用户提供产品。
因此我的问题是:是否可以等待授予应用内购买的权利,直到购买被确认之后?还是我错过了什么?我假设文档中指定此顺序是有原因的,但他们没有详细说明。
经过进一步研究后,我注意到这个微不足道的驱动示例应用程序采用了与我完全相同的方法。以下是他们的代码片段:
private fun acknowledgeNonConsumablePurchasesAsync(nonConsumables: List<Purchase>) {
nonConsumables.forEach { purchase ->
val params = AcknowledgePurchaseParams.newBuilder().setPurchaseToken(purchase
.purchaseToken).build()
playStoreBillingClient.acknowledgePurchase(params) { billingResult ->
when (billingResult.responseCode) {
BillingClient.BillingResponseCode.OK -> {
disburseNonConsumableEntitlement(purchase)
}
else -> Log.d(LOG_TAG, "acknowledgeNonConsumablePurchasesAsync response is ${billingResult.debugMessage}")
}
}
}
}
如果响应是确定的,则在确认回调函数中显示授予了整体性。与我问题中的代码完全相同。
所以我猜问题的答案是:是的,在成功确认后授予权利是可以的。
我对google play的账单有问题。我有一个android应用程序,包括应用内购买。我维护SharedReference以购买应用程序状态。如果谷歌将购买状态设置为success,那么我会将布尔值设置为app purched<问题场景:我是XYZ应用程序的新用户,我已经为高级版本付费。成功付款后,应用程序将切换到高级版本。同时我去谷歌play账户取消订单。开发者退款的价格为零,作为一个新用户,
第一步,用户登录官网,点击顶部"授权"菜单,可以了解Niushop套餐各个版本的功能列表,查看用户须知信息。 第二步,选择合适的套餐,点击“立即购买”,选择支付方式进行付款。 第三步,付款完成进行下一步,完成授权信息认证,要注意上传支付凭证。 第四步,完成之后,联系售前客服开通授权认证,并加入官方授权群。 第五步,登录官方论坛,使用授权账号登录论坛,在中部【单商户程序发布】中下载授权对应的源码。
在我的测试应用程序中,用户点击一个购买按钮,然后购买一个物品。当购买完成时,一个textview会显示为“购买完成”。都很好。:)。然而,当我杀死应用程序,并再次打开它,购买按钮再次出现....:/。为什么会发生这种情况?谷歌对此不是很清楚。下面是代码。 固定 最后使用if条件使视图可见或不可见 解决方案并不难,但我必须大量阅读文档,使用调试器点,就是这样:)。
我在App中实现了谷歌。它的工作良好后,发布了应用程序。但我正面临一个问题。当用户安装应用程序,然后购买项目,然后卸载应用程序,重新安装,并前往购买的项目,然后应用agian锁定购买的项目,并提出购买请求。OnRestoreTransaction有问题吗?我使用的代码从谷歌在应用程序购买网站。代码如下: 我在应用程序内java文件的onCrearte中将其称为:这首先检查当前用户是否购买了他所要求
准备工作 付费应用协议 如果你还没有,你需要在 iTunes Connect 签署付费应用协议, 并设置您的银行和税务信息。 iTunes Connect 开发人员帮助: 协议、税务和银行概述 创建您的应用内购买 然后,您需要在iTunes Connect中配置您的应用内购买,并包含名称,定价和说明等详细信息,以突出显示您的应用内购买的功能。 iTunes Connect开发人员帮助:创建应用程序
我在测试我的应用内计费时遇到了麻烦。 (使用Google Play应用内计费版本3 API) 问题: 已退款的应用程序内购买仍然存在于购买列表中,该列表由BillingClient.query购买()提供。 当我在一月份尝试退款时,退款的物品从购物清单上消失了。 我所做的: 作为测试人员购买了一些物品。 (我很确定对话框说是测试购买。) 之后在谷歌游戏控制台退款。 等到他们的付款状态变成退款。 清