我的应用通过Android BillingClient库使用应用内购买来启用“专业版”。这样便可以轻松获取价格明细,接受付款并将升级标记为已购买。
但是,如果我以应用程序所有者的身份进入控制台并退款了,则我无法弄清楚应该如何禁用应用程序中的专业功能。 getPurchasesList()
结果中似乎没有任何表明购买状态的信息,但据我所知,它已缓存在本地设备上,因此不会自动更新。
当前我的支票看起来像这样:
Purchase.PurchasesResult purchases = billingClient.queryPurchases(BillingClient.SkuType.INAPP);
if (purchases != null)
{
List<Purchase> bought = purchases.getPurchasesList();
if ( bought != null && 0 < bought.size() )
{
for (int i=0;i<bought.size(); i++)
{
if ( bought.get(i).getSku().equals(PRO_VERSION) )
{
purchased = true;
}
}
}
}
在这里我可以做些什么来检查购买的商品是否已退还,或者以后可以进行二次背景检查吗?我不想定期从缓存中删除购买通知,因为该应用程序可能会在信号有限或信号不连续的区域中使用,并且我也不想让合法购买该应用程序的任何人突然在以下位置丢失其“专业版”他们需要的时间。同时,如果有人购买了产品然后退款了,我希望能够在应用程序中反映出来。
我目前没有运行自己的任何后端基础结构,我希望保持这种状态。
答案 0 :(得分:1)
看来您的问题实际上没有真正的解决方案。但是,在浏览了一些Google文章之后,实际上似乎并不打算退还应用内购买商品,除非是在极少数情况下。据我所知,这意味着不打算退款。
来源:https://github.com/googlesamples/android-play-billing/issues/113
答案 1 :(得分:0)
如果已退款,则该物品不应出现在getPurchasesList()
返回的列表中。因此,您可以在共享首选项中保存购买状态:
Purchase.PurchasesResult purchases = billingClient.queryPurchases(BillingClient.SkuType.INAPP);
if (purchases != null)
{
preferences.setPro(false);
List<Purchase> bought = purchases.getPurchasesList();
if ( bought != null && 0 < bought.size() )
{
for (int i=0;i<bought.size(); i++)
{
if ( bought.get(i).getSku().equals(PRO_VERSION) )
{
preferences.setPro(true);
purchased = true;
}
}
}
}