【发布时间】:2016-01-14 18:40:08
【问题描述】:
我正在使用 Gdx-Pay 跨平台处理我的 IAP。 一切都是从 Libgdx 的 wiki 设置的,例如:
if(PurchaseSystem.hasManager()){
config = new PurchaseManagerConfig();
config.addOffer(new Offer().setType(OfferType.ENTITLEMENT).setIdentifier(item1));
config.addOffer(new Offer().setType(OfferType.ENTITLEMENT).setIdentifier(item2));
config.addOffer(new Offer().setType(OfferType.ENTITLEMENT).setIdentifier(item3));
config.addOffer(new Offer().setType(OfferType.ENTITLEMENT).setIdentifier(item4));
//Stores
config.addStoreParam(PurchaseManagerConfig.STORE_NAME_ANDROID_GOOGLE, base64EncodedKey);
config.addStoreParam(PurchaseManagerConfig.STORE_NAME_IOS_APPLE, base64EncodedKey); // <-- CHANGE KEY
PurchaseSystem.install(new PurchaseObserver() {
@Override
public void handleInstall() {
message(" - purchase manager installed: " + PurchaseSystem.storeName() + ".\n");
// restore purchases
message(" - do a restore to check inventory\n");
//PurchaseSystem.purchaseRestore();
}
@Override
public void handleInstallError(Throwable e) {
message(" - error installing purchase manager: " + e + "\n");
// throw error
throw new GdxRuntimeException(e);
}
@Override
public void handleRestore(Transaction[] transactions) {
// keep note of our purchases
message(" - totally " + transactions.length + " purchased products\n");
for (int i = 0; i < transactions.length; i++) {
if(transactions[i].getIdentifier().equals(item1)) {
item1_purchased = true;
}
if(transactions[i].getIdentifier().equals(item2)) {
item2_purchased = true;
}
if(transactions[i].getIdentifier().equals(item3)) {
item3_purchased = true;
}
if(transactions[i].getIdentifier().equals(item4)) {
item4_purchased = true;
}
}
}
@Override
public void handleRestoreError(Throwable e) {
message(" - error during purchase manager restore: " + e + "\n");
// throw error
throw new GdxRuntimeException(e);
}
@Override
public void handlePurchase(Transaction transaction) {
message(" - purchased: " + transaction.getIdentifier() + "\n");
// dispose the purchase system
Gdx.app.postRunnable(new Runnable() {
@Override
public void run () {
message(" - disposing the purchase manager.\n");
PurchaseSystem.dispose();
message("Testing InApp System: COMPLETED\n");
}
});
}
@Override
public void handlePurchaseError(Throwable e) {
message(" - error purchasing: " + e + "\n");
// throw error
throw new GdxRuntimeException(e);
}
@Override
public void handlePurchaseCanceled() {
message(" - purchase cancelled.\n");
// dispose the purchase system
Gdx.app.postRunnable(new Runnable() {
@Override
public void run () {
message(" - user canceled! - disposing the purchase manager.\n");
PurchaseSystem.dispose();
message("Testing InApp System: COMPLETED\n");
}
});
}
},config);
} else {
utils.toast_error("Connection failure, check your internet's connection");
}
这是在核心类中的“create()”方法上执行的。
我无法解决的是 Android 和 IOS IAP 之间的关系。 苹果有严格的规定,购买只能在一个按钮上“恢复”。 但我发现每次用户想要在我的应用中使用产品时都强制按下按钮非常不方便。
我有一张产品表,每个产品下方都有按钮,上面写着“购买”/“使用”,具体取决于他们是否购买了该产品。 所以我会觉得非常令人高兴的是有一种方法可以在应用启动时简单地“检查”用户是否拥有每个产品的所有权,并在我遍历列表时应用标志(布尔值)。
我认为我可以使用“handleRestore()”,如我的代码所示。但显然(我不确定),遍历该列表以检查购买将使 Apple 拒绝我的应用程序,因为它会在没有用户请求的情况下发生。
那么我是否可以在不执行 RESTORE 请求的情况下以某种方式检查用户 Google/Apple 帐户的购买情况?
【问题讨论】:
-
同样的问题有解决方案:stackoverflow.com/q/32374839/1472483