我正在为我的Android应用使用Google的应用内结算功能。
我使用了Google的IabHelper类如何,因为他们的计费似乎非常复杂。
我的问题是我想知道购买是否成功。我认为我正在按照正确的流程进行操作,但在我的日志中,我看到很多用户都获得了升级,但是我的Google Play付款帐户中却没有显示其购买情况。 (即他们免费升级)。
我正在记录GP订单ID,有时它是一个类似的数字,
GPA.1234-5678-9123-1234
但有时它喜欢,
1234567891234.1234567891234
通常情况下,我认为非GPA订单不收取费用。
此外,我认为你可以通过订单,然后取消它,仍然得到升级?
你如何确保用户真的付钱?
码:
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, final Purchase purchase) {
if (result.isFailure()) {
showMessage("Google Billing Purchase Error");
return;
} else if (purchase.getSku().equals(sku)) {
IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
if (result.isFailure()) {
showMessage("Google Billing Error");
return;
} else {
if (inventory.hasPurchase(sku)) {
showMessage("Thank you for upgrading");
grantUpgrade();
// ** This line gets call, but no payment occurs.
}
}
}
};
mHelper.queryInventoryAsync(mReceivedInventoryListener);
}
}
};
mHelper.launchPurchaseFlow(this, sku, 10001, mPurchaseFinishedListener, "");
***更新以检查“inventory.hasPurchase(sku)”但仍然看到获得升级但不付费的用户。
**也许用户正在使用Freedom hack?无论如何要防止这种情况?
if (result.isFailure()) {
//If the user aborts or any other problems it will jump here
}
else {
//The user purchased some item, check out which it is
mIsPremium = inventory.hasPurchase(SKU_ANY_ITEM);
}
所以关于你的问题,这段代码已经验证用户是否真的购买了这个项目!
Purchase premiumPurchase = inventory.getPurchase(SKU);
boolean mIsPremium = (premiumPurchase != null
&& verifyDeveloperPayload(premiumPurchase));
if(mIsPremium){
...
}
Google Play商店会跟踪您的购买情况,因此您不应该认为仅仅因为购买成功,该商品就会被购买。用户可以获得购买退款。因此,您需要在每次启动时查询用户的库存并适当调整您的拨款。无论如何,您都需要执行此检查,以便为切换到新设备或卸载/重新安装应用程序时希望获得授权的用户提供支持。