【问题标题】:LibGDX Gdxpay requestPurchase not workingLibGDX Gdxpay 请求购买不起作用
【发布时间】:2015-04-07 12:38:39
【问题描述】:

我已经在我的 libgdx 游戏中实现了 Gdxpay,但是当我调用 requestPurchase() 时,没有任何反应。我遵循了本教程https://github.com/libgdx/gdx-pay/wiki/Integration-example-with-resolvers,但我不确定我哪里出错了。

这是购买观察者所在的主要游戏类:

public MyGame extends Application adapter {

public MyGame(IActivityRequestHandler handler) {
    // TODO Auto-generated constructor stub
    super();
    myRequestHandler = handler;
    // ---- IAP: define products ---------------------
   purchaseManagerConfig = new PurchaseManagerConfig();
   purchaseManagerConfig.addOffer(new Offer().setType(OfferType.ENTITLEMENT).setIdentifier(SKU_REMOVE_ADS));
}

public PurchaseObserver purchaseObserver = new PurchaseObserver() {

    @Override
    public void handleRestore (Transaction[] transactions) {
        for (int i = 0; i < transactions.length; i++) {
            if (checkTransaction(transactions[i].getIdentifier()) == true) break;
        }
        // to make a purchase (results are reported to the observer)
        PurchaseSystem.purchase(SKU_REMOVE_ADS);
    }

    @Override
    public void handleRestoreError (Throwable e) {
        // getPlatformResolver().showToast("PurchaseObserver: handleRestoreError!");
        Gdx.app.log("ERROR", "PurchaseObserver: handleRestoreError!: " + e.getMessage());
        throw new GdxRuntimeException(e);
    }

    @Override
    public void handleInstall () {
        // getPlatformResolver().showToast("PurchaseObserver: installed successfully...");
        Gdx.app.log("handleInstall: ", "successfully..");
    }

    @Override
    public void handleInstallError (Throwable e) {
        //getPlatformResolver().showToast("PurchaseObserver: handleInstallError!");
        Gdx.app.log("ERROR", "PurchaseObserver: handleInstallError!: " + e.getMessage());
        throw new GdxRuntimeException(e);
    }

    @Override
    public void handlePurchase (Transaction transaction) {
        checkTransaction(transaction.getIdentifier());
    }

    @Override
    public void handlePurchaseError (Throwable e) {
        if (e.getMessage().equals("There has been a Problem with your Internet connection. Please try again later")) {

            // this check is needed because user-cancel is a handlePurchaseError too)
            // getPlatformResolver().showToast("handlePurchaseError: " + e.getMessage());
        }
        throw new GdxRuntimeException(e);
    }

    @Override
    public void handlePurchaseCanceled () {
    }
};

protected boolean checkTransaction (String ID) {
    boolean returnbool = false;
    if (SKU_REMOVE_ADS.equals(ID)) {

        myRequestHandler.showAds(false);
        returnbool = true;
    }
    return returnbool;
}

public void create() {
...

这里是 requestPurchase 被调用的地方:

public class MainMenu extends Screen {
@Override
public void update() {
...
if (removeBounds.contains(touchPoint.x, touchPoint.y)) {
MyGame.getPlatformResolver().requestPurchase(MyGame.SKU_REMOVE_ADS);
    }
}
...
}

非常感谢。

编辑:OK logcat 在我请求购买时显示以下错误:

5188-5220/com.comp.myGame.android I/ERROR﹕ gdx-pay: requestPurchase(): purchaseManager == null

这意味着 pruchaseManager 为空,但根据本例中的教程,它应该会导致正确的 purchaseManager 被调用,所以我仍然感到困惑......

【问题讨论】:

    标签: java android libgdx in-app-purchase in-app-billing


    【解决方案1】:

    我遇到了完全相同的问题。我也按照教程进行了操作,但将分布式解析器系统更改为更本地定义的系统,其中所有应用商店密钥都在主游戏类中设置。

    这不起作用(出现同样的错误)。然后我重新设计了代码以完全按照教程进行 - 所有解析器的花里胡哨。接下来,我在创建 purchaseManager 时遇到了“找不到合适的应用商店”错误(此时我很庆幸,因为它至少尝试过创建它)。

    我认为第二次尝试成功与序列流有关:

    在android/AndroidLauncher.java中,onCreate:

        MyGame myGame = new MyGame(this);
        initialize(myGame, config);
    
        // init IAP
        myGame.setPlatformResolver(new AndroidResolver(myGame, this));
    

    在 core/MyGame.java 中,声明:

        public PurchaseObserver purchaseObserver = new BrainsPurchaseObserver();
        public PurchaseManagerConfig purchaseManagerConfig;
    

    在core/MyGame.java中,构造函数:

        purchaseManagerConfig = new PurchaseManagerConfig();
        Offer iap15Tipps = new Offer();
        iap15Tipps.setIdentifier(Product.brains_hints_15.name());
        iap15Tipps.setType(OfferType.CONSUMABLE);
        purchaseManagerConfig.addOffer(iap15Tipps);
    

    PlatformResolver.java 和 AndroidResolver.java 如教程中所述。这达到了上述错误“找不到应用商店”的程度。

    然后我从 gdx-pay 0.3.0 切换到 0.4.0(只需在 gradle 设置中增加版本,它已经在存储库中可用),它工作了!

    我建议你检查你执行的 IAP 初始化的顺序,如果你还没有使用它,请切换到 0.4.0。

    -- 迈克尔

    【讨论】:

    • 非常感谢您的详细回复,但恐怕它对我不起作用:(最后我决定放弃这个项目的应用内购买。
    • 购买的物品如何消费
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多