使用RoboVM的应用内购买有什么解决方案?

3

我想在我的 RoboVM 应用程序中使用应用内购买。据我所知,我需要访问苹果的StoreKit框架。我找到了以下解决方案:

  • robovm-ios-bindings(已被标记为废弃,建议使用robopods)
  • robopods(..但我找不到StoreKid绑定)
  • gdx-pay(..是一个跨平台的解决方案,我不需要)

我想知道哪种方法最适合我。我首先尝试了gdx-pay,但我不需要跨平台解决方案。 robovm-ios-bindings似乎只关注我需要的功能。但由于它被标记为废弃,我有疑虑。 robopods很好,因为它被RoboVM网站引用,但我在那里找不到StoreKid绑定。

我正在尝试查找如何使用其中一种技术的文档/教程。例如

  • 如何实现它
  • 如何在模拟器上测试购买,而不使用真钱
  • 良好/不良的做法,文档链接等。

我建议使用Gdx-Pay,无论是否跨平台。它仍然可以只使用iOS实现。 - Benni
1个回答

1

Gdx-Pay 是最简单的方法。 这里 包含了你需要实现它的所有信息。

测试 不能使用真钱进行。你可以设置一个测试环境来测试购买,具体描述在 测试 IAP

苹果的一条规定是必须有一个“恢复”按钮用于购买。你的用户必须明确请求恢复他们的购买,例如在一个按钮上。

这是我如何设置 Gdx-Pay 的示例:

if(PurchaseSystem.hasManager()){
        config = new PurchaseManagerConfig();
        config.addOffer(new Offer().setType(OfferType.ENTITLEMENT).setIdentifier(item1String));

        //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");

                //Execute this on a button instead!
                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(stone1)) {
                        preferences.putBoolean("item1_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 {
        //Toast an error
    }

然后你可以直接调用。
PurchaseSystem.purchase("itemID");

购买商品。


简单易用,谢谢!(我只是使用了旧的绑定,导致它们停止工作)。 - Makalele

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接