Poo*_*oks 4 android in-app-billing
我在我的应用中实施了应用内结算功能,现在正在测试其退款处理方式。
我用测试帐户购买了应用程序托管的应用程序内结算商品并退款。我的应用程序按预期方式广播了退款,并且恢复交易时看到该商品已退款,因此到那时为止一切都很好。
我的问题是我无法重新购买该商品以测试其他情况。当我尝试购买商品时,会出现Google Play界面,并显示一条错误消息:“您已经拥有此商品”。有两个按钮“确定”和“详细信息”。如果我按详细信息,则Google Play崩溃,然后返回到我的应用程序。
有没有类似的经历?如果用户以前曾退款,则禁止用户购买应用内商品吗?
我看到了同样的问题。GP崩溃和一切。
除了等待几个小时之外,您可能还需要打开“ Google Play”应用信息并清除缓存和清除数据。这为我解决了。看来GP会在设备上缓存购买信息,并且很少(如果有的话)检查Google的服务器是否有退款信息。
更新: 您可能还想终止Google Play进程,因为它似乎也将购买信息保留在内存中。
我知道这是一个老问题,但我一直在寻找同一问题的答案并最终得出了自己的结论。谷歌没有详细说明,但我相信他们希望您根据自己的逻辑决定如何处理取消和退款的购买。需要记住的另一点是,消耗性和非消耗性托管产品之间本质上没有区别。所有被管理的产品都是消耗品。
对我来说,当用户取消购买,或者我决定给用户退款时,我想要发生的是 1) 用户收到退款,2) 用户失去对付费功能的访问权限,3)如果用户愿意,可以选择再次购买该功能。
我所做的是使用应用内计费 API 在后端服务器上检查购买的购买状态。如果返回的purchaseState是1(取消)或2(退款),我会在我的应用程序中消费该购买。Google 处理第 1 项,将钱退还给用户。我的应用程序中的逻辑处理 2,锁定对付费功能的访问。使用购买手柄 3,让用户可以选择再次购买该功能。
其基本要点是,当购买被发送到我的后端服务器进行验证时,我检查购买状态。如果购买状态是 1 或 2,我会向我的应用程序返回适当的代码。当我的应用收到指示购买已取消或退款的代码时,我的应用将消耗该购买。
我使用 PHP 版本的 API,所以我获取购买状态的简化代码是:
$purchases = $service->purchases_products->get($packageName, $productId, $purchaseToken);
$purchaseState = $purchases->getPurchaseState();
if($purchaseState === 1){
$serverResponseCode = 3;
}
if($purchaseState === 2){
$serverResponseCode = 4;
}
Run Code Online (Sandbox Code Playgroud)
...然后在我的应用程序中,我检查服务器响应代码。
if(serverResponseCode == 3 || serverResponseCode ==4 ){
lockFeatures();
ConsumeParams params = ConsumeParams.newBuilder().setPurchaseToken(purchase.getPurchaseToken()).build();
billingClient.consumeAsync(params, listener);
}
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助其他人寻找这个问题的答案。
| 归档时间: |
|
| 查看次数: |
4080 次 |
| 最近记录: |