android - 华为In App Purchase沙盒测试,我已经购买过一次的商品无法购买
问题描述
IAP沙盒测试中,消耗品和非消耗品购买一次后不能再购买。结果,支付页面无法显示。onActivityResult中,IAP SDK返回代码
ORDER_PRODUCT_OWNED 60051
这是一个普遍的问题还是我做错了什么?
解决方案
错误代码60051表示用户未能购买产品,因为用户已经拥有该产品。
解决方法:使用obtainOwnedPurchases接口查看用户是否购买了商品。
对于已购买的消耗品,发货后调用consumeOwnedPurchase接口进行消耗。食用后可下次购买。如果产品是非消耗品或订阅产品,则无法再次购买该产品。
查询所有已购买的应用内商品信息,包括消耗品、非消耗品和自动续订订阅。
- 如果返回耗材信息,可能会因为某些异常导致耗材无法送达。在这种情况下,您的应用需要检查耗材是否已送达。如果没有,则应用需要交付它们并调用 consumeOwnedPurchase API 来消费它们。
- 如果返回非消耗品信息,则不需要消耗非消耗品。
- 如果返回订阅信息,则返回用户在应用中的所有现有订阅关系。
- 如果 purchaseState 为0,则表示产品已购买。
- 如果 purchaseState 为1,则表示产品为CANCELED。
- 如果 purchaseState 为2,则表示产品为PURCHASED。
代码:
public void checkUserOwnedTheProduct(final Context context) {
OwnedPurchasesReq ownedPurchasesReq = new OwnedPurchasesReq();
ownedPurchasesReq.setPriceType(productType);
Task<OwnedPurchasesResult> task = Iap.getIapClient(context).obtainOwnedPurchases(ownedPurchasesReq);
task.addOnSuccessListener(new OnSuccessListener<OwnedPurchasesResult>() {
@Override
public void onSuccess(OwnedPurchasesResult result) {
// Obtain the execution result.
if (result != null && result.getInAppPurchaseDataList() != null) {
for (int i = 0; i < result.getInAppPurchaseDataList().size(); i++) {
String inAppPurchaseData = result.getInAppPurchaseDataList().get(i);
String inAppSignature = result.getInAppSignature().get(i);
boolean success = CipherUtil.doCheck(inAppPurchaseData, inAppSignature, Key.getPublicKey());
if (success) {
try {
InAppPurchaseData inAppPurchaseDataBean = new InAppPurchaseData(inAppPurchaseData);
int purchaseState = inAppPurchaseDataBean.getPurchaseState();
} catch (JSONException e) {
}
}
}
} else {
if (productType == IapClient.PriceType.IN_APP_NONCONSUMABLE) {
((HmsInAppPurchaseList) context).loadList();
return;
}
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
if (e instanceof IapApiException) {
IapApiException apiException = (IapApiException) e;
Status status = apiException.getStatus();
int returnCode = apiException.getStatusCode();
} else {
// Other external errors
}
}
});
}
有关更多信息,您可以访问以下链接: 应用内购买文章:
应用内购买 Github 链接:
客户端: https ://github.com/DTSE-India-Community/HMS-In-App-Purchase-Kit
推荐阅读
- javascript - 为什么这种类型不适用
- mysql - 如何在mysql中获取常用数字
- android - 通过 Appium 远程连接到 Android 设备
- r - 如何在 Excel 中将列名称更改为粗体字体样式
- spring - 如何使用 Mockito 测试 SpringBoot 中带有 Java 注释的 Hibernate 配置类?
- android - 如何在 Google Play 商店中为指定人员发布应用程序
- zingchart - 折线图默认隐藏所有系列
- entity - 内置 Luis 位置实体无法正常工作
- python - python字符串比较失败
- c# - 数据结构 C#( 链表
) vs 我们自己在 C# 中实现的 LinkedList