【发布时间】:2021-08-08 22:57:59
【问题描述】:
我刷新到 android billing 版本 4 和 2 东西不再工作了。
首先我有这个:
else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED) {
Purchase.PurchasesResult queryAlreadyPurchasesResult = billingClient.queryPurchases(INAPP); // deprecated
List<Purchase> alreadyPurchases = queryAlreadyPurchasesResult.getPurchasesList();
if(alreadyPurchases!=null){
handlePurchases(alreadyPurchases);
}
}
queryPurchases 已弃用。
第二个我有这个:
void handlePurchases(List<Purchase> purchases) {
for(Purchase purchase:purchases) {
//if item is purchased
if (PRODUCT_ID.equals(purchase.getSku()) && purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED)
{
if (!verifyValidSignature(purchase.getOriginalJson(), purchase.getSignature())) {
// Invalid purchase
// show error to user
Toast.makeText(getApplicationContext(), R.string.plus_error, Toast.LENGTH_SHORT).show();
return;
}
getSku() 工作正常,但现在标记为Cannot resolve method getSku() in Purchase
任何想法如何解决这个问题?
来自文档:
Summary of changes
Added BillingClient.queryPurchasesAsync() to replace BillingClient.queryPurchases() which will be removed in a future release.
Added Purchase#getSkus() and PurchaseHistoryRecord#getSkus(). These replace Purchase#getSku and PurchaseHistoryRecord#getSku which have been removed.
但我不知道如何在上面的代码中应用这个新命令。
如果我将 getSku 更改为 getSkus,我的 if if (PRODUCT_ID.equals(purchase.getSkus()) && purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) 会说它总是错误的。而且我不知道如何使用 queryPurchasesAsync(),现在需要 2 个参数。
谢谢。
【问题讨论】:
-
我也在尝试找出这些变化。但是,您将字符串值 PRODUCT_ID 与 List
purchase.getSkus() 进行比较,难道不是您的问题吗?也许尝试 if (PRODUCT_ID.equals(purchase.getSkus().get(0) &&.....) 代替? -
getSkus() 返回一个 ArrayList
。也许遍历它们中的每一个并执行您的 PRODUCT_ID.equals() ?由于更改而不得不更改代码块是令人恼火的。如果只是方法/参数名称更改就可以了。他们还必须更改 billingClient.queryPurchases()。 -
@chitgoks 谢谢,我会试试的。是的,新版本,还有更多工作要做。
-
他们杀死了 billing 2.0,那些 b@stards )) 要是他们更新了文档就好了!现在是 2021 年 7 月,仍然没有记录
标签: java android in-app-purchase in-app-billing