Sur*_*ary 7 android in-app-purchase android-inapp-purchase
我正在我的应用程序中实现IAP。一种是删除广告,另一种是添加更多的谜题。我正在我的设备上进行测试,但是遇到了一个问题。购买物品后,我得到的响应代码为“物品已拥有”,但未显示在购买清单中。
我正在这样设置我的计费客户,
private void setUpBillingClient(){
mBillingClient = BillingClient.newBuilder(this).setListener(this).build();
mBillingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) {
if (billingResponseCode == BillingClient.BillingResponse.OK) {
List skuList = new ArrayList<>();
skuList.add(ITEM_SKU_MORE_PUZZLE);
skuList.add(ITEM_SKU_REMOVE_AD);
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
mBillingClient.querySkuDetailsAsync(params.build(),
new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(int responseCode, List skuDetailsList) {
// Process the result.
if (responseCode == BillingClient.BillingResponse.OK
&& skuDetailsList != null) {
for (Object skuDetailsObject : skuDetailsList) {
SkuDetails skuDetails = (SkuDetails) skuDetailsObject;
String sku = skuDetails.getSku();
String price = skuDetails.getPrice();
if (ITEM_SKU_MORE_PUZZLE.equals(sku)) {
btnMorePuzzle.setText(price);
}
else if(ITEM_SKU_REMOVE_AD.equals(sku)) {
btnRemoveAd.setText(price);
}
}
}
}
});
}
}
@Override
public void onBillingServiceDisconnected() {
//Toast.makeText(getApplicationContext(), getResources().getString(R.string.billing_connection_failure), Toast.LENGTH_SHORT);
}
});
queryPurchases();
queryPrefPurchases();
}
Run Code Online (Sandbox Code Playgroud)
第一个问题,当我已经购买了商品后,为什么在这里开票响应是可以的。我不想将按钮文字设置为价格,购买产品后此响应会设置该价格。
这是我的Onpurchase实施,
@Override
public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) {
if (responseCode == BillingClient.BillingResponse.OK && purchases != null) {
for (Purchase purchase : purchases) {
if (purchase.getSku().equals(ITEM_SKU_REMOVE_AD)) {
mSharedPreferences.edit().putBoolean("ad_free", true).commit();
btnRemoveAd.setText("Done");
btnRemoveAd.setEnabled(false);
}
else if(purchase.getSku().equals(ITEM_SKU_MORE_PUZZLE)){
mSharedPreferences.edit().putBoolean("more_puzzle", true).commit();
btnMorePuzzle.setText("Done");
btnMorePuzzle.setEnabled(false);
}
}
} else if (responseCode == BillingClient.BillingResponse.ITEM_ALREADY_OWNED ) {
// I am getting response "Item already owned" here for item bought but purchase list here is empty
// so i can't do anything for purchased item
}
}
Run Code Online (Sandbox Code Playgroud)
第二个问题,在这里我得到的答复是我的物品已经购买,但清单仍然为空。如何正确实施?
如果有人已经购买了产品,则应该禁用按钮。另一个疑问是,在进行测试时,我是否必须等待1-2小时才能从Playstore退还该商品才能再次进行测试,或者还有其他方法。
我正在遵循此代码进行应用内实施。 https://github.com/patpatchpatrick/Streakr/
小智 0
我发现您的 onPurchasesUpdated 中有一个错误,条件设置错误。
它应该是这样的,
if(BillingResponse.OK && purchases != null) {
// update records
} else if(BillingResponse.ITEM_NOT_OWNED){ //this condition was missing
// update records if required or ask to buy
} else if(BillingResponse.ITEM_ALREADY_OWNED ){ // update records}
Run Code Online (Sandbox Code Playgroud)
我还建议为此更新数据库。
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |