【发布时间】:2016-07-28 11:59:01
【问题描述】:
我正在按照教程编写应用内计费项目,并且我设法让一切变得更好,但是当我想知道用户是否购买了某个项目时,它总是错误的,即使我使用其他设备进行测试也是如此拥有 Beta 版测试人员帐户。
这是我用来购买商品的:
mHelper = new IabHelper(MainActivity.this, base64EncodedPublicKey);
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
IabHelper.QueryInventoryFinishedListener mGotInventoryListener
= new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result,
Inventory inventory) {
if (result.isFailure()) {
// handle error here
}
else {
// does the user have the premium upgrade?
boolean mIsPremium = inventory.hasPurchase(ITEM_SKU);
// update UI accordingly
Toast.makeText(getApplicationContext(), "" + mIsPremium, Toast.LENGTH_LONG).show();
if(mIsPremium){
buy.setVisibility(View.INVISIBLE);
}
}
}
};
mHelper.queryInventoryAsync(mGotInventoryListener);
}
});
这是购买该物品的代码:
buy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mHelper.launchPurchaseFlow(MainActivity.this, ITEM_SKU, 10001,
new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
if (result.isFailure()) {
return;
} else if (purchase.getSku().equals(ITEM_SKU)) {
mHelper.queryInventoryAsync(new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
if (result.isFailure()) {
} else {
mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU),
new IabHelper.OnConsumeFinishedListener() {
public void onConsumeFinished(Purchase purchase, IabResult result) {
if (result.isSuccess()) {
buy.setVisibility(View.GONE);
} else {
}
}
});
}
}
});
}
}
}, "mypurchasetoken");
}
});
当我在真实设备上使用我的 beta 测试人员的帐户测试应用程序时,购买该项目时代码运行良好,但是当我关闭应用程序并再次打开它时,第一个代码表示该帐户没有购买项目。
【问题讨论】: