ios - 使用RoboVM进行应用内购买的解决方案是什么

标签 ios libgdx in-app-purchase robovm

我想在 iOS 上的 RoboVM 应用上使用应用内购买。据我了解,我需要为此访问 Apple 的 StoreKit 框架。我找到了以下解决方案:

我想知道什么是最适合我的方法。我首先尝试了 gdx-pay 但我不需要跨平台解决方案。 robovm-ios-bindings 似乎只关注我需要的功能。但由于它被标记为已弃用,我对此表示怀疑。 robopods 会很棒,因为 RoboVM 站点引用了它,但我在那里找不到 StoreKid 绑定(bind)。

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

  • 如何实现
  • 如何在不使用真钱的情况下在模拟器上测试购买
  • 好的/坏的做法、文档链接等。

最佳答案

Gdx-Pay 是最简单的方式。 This包含实现它所需的所有信息。

测试不能用真钱来完成。您可以设置测试环境以测试购买,如下所述:Testing IAP

Apple 必须遵守的一条规则是购买时要有一个“恢复”按钮。您的用户必须明确请求恢复他们的购买,例如通过按钮。

这是我如何设置 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");

进行购买。

关于ios - 使用RoboVM进行应用内购买的解决方案是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32285276/

相关文章:

in-app-purchase - 无法在 Google Play 开发者控制台中创建应用内购买

ios - 刷新UI TableView

ios - 数组和表格 View : only add new items

android - 如何决定 WorldSize,GamePlay 和 HUD 的视口(viewport)

java - Libgdx 上的游标输入返回 "incorrectly"

android - 在 libgdx 中检查(并执行某些操作)触摸事件的最佳方式是什么?

ios - 如何在同一设备不同账号下执行ios IAP

ios - 使用 UIGraphics 组合两个图像时遇到问题,图像位置不正确

ios - Xcode 10 Beta 6 Playground 中未调用 Deinit 方法

ios - 恢复码paymentQueue RestoreCompletedTransactions Finished() 是不是必须要有?