gpt4 book ai didi

android - 应用内结算错误 : Item already owned (BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED)

转载 作者:行者123 更新时间:2023-11-30 03:00:18 25 4
gpt4 key购买 nike

我正在开发支持应用内购买并且有大量用户进行应用内购买的 Android 产品,在所有用户中,一些用户面临“BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED”错误,返回的响应为 7。在每次购买被授予后,我都会调用 consume call ,并在应用程序开始时设置 InApp 时验证我的库存,并检查任何拥有的项目并在其上调用 consume 。任何解决问题的建议。

最佳答案

参见 here . Google 表示您必须使用托管的应用内项目。如果不这样做,用户将无法再购买一个。购买成功后,使用:

int response = mService.consumePurchase(3, getPackageName(), token);

您从 purchaseData JSON 对象获取 token :

final String token = jo.getString("purchaseToken");

但如果您出于某种原因没有消费购买的商品,您就会陷入困境。

我遇到了同样的问题,因为我升级到 iap api v3,而在 v2 中这不是问题。

当您收到此错误时,请尝试消费给定 productId 的所有购买。或者只是消费在服务设置期间购买的所有东西。请注意,您可能希望在 consumePurchase() 成功返回后实际提供购买,具体取决于应用程序的语义。

服务连接后调用如下代码(在onServiceConnected()中),当然是在后台执行:

String continuationToken="";
boolean hasMorePurchases=false;
do {
try {
Bundle purchases = mService.getPurchases(3, activity.getPackageName(), "inapp", continuationToken);
int response = purchases.getInt("RESPONSE_CODE");
if (response == 0) {
continuationToken = purchases.getString("INAPP_CONTINUATION_TOKEN");
if(!TextUtils.isEmpty(continuationToken)) hasMorePurchases=true;
final ArrayList<String> purchaseDataList = purchases.getStringArrayList("INAPP_PURCHASE_DATA_LIST");
for(String purchaseJSON : purchaseDataList) {
JSONObject object = new JSONObject(purchaseJSON);
String productId = object.getString("productId");
String orderId = object.getString("orderId");
String purchaseToken = object.getString("purchaseToken");
Log.i(getClass().getSimpleName(),"consuming purchase of " + productId + ", orderId " + orderId);
mService.consumePurchase(3, activity.getPackageName(), purchaseToken);
}
} else {
Log.e(getClass().getSimpleName(), "could not get purchases: " + response);
}
} catch (RemoteException e) {
Log.e(getClass().getSimpleName(), "RemoteException during getPurchases:", e);
} catch (JSONException e) {
Log.e(getClass().getSimpleName(), "JSONException during getSkuDetails:", e);
}
} while(hasMorePurchases);

请注意,每次调用 getPurchases 最多返回 700 次购买,因此您需要使用延续 token 来获取更多。

如果您收到 ALREADY_OWNED 错误代码并且仅针对涉及的 productId,您当然可以只使用此代码。之后,再次尝试开始购买。

关于android - 应用内结算错误 : Item already owned (BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22637371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com