CN1中的Android IAP非消耗性购买

时间:2019-02-23 23:33:56

标签: android codenameone

我的问题是,在Android上,p.purchase()方法是否会在下面的主类中触发已实现的方法(用于非消耗性IAP),或者这仅仅是IOS?

    @Override
public void itemPurchased(String sku) {

背景信息: 我的应用使用了非消耗性应用内购买,并已发布到IOS和Android。我将IAP“收据”存储在我的云数据库中,因此我知道他们是否购买了完整版本。如果他们尚未购买,则在使用x天后,它将在发布IAP购买逻辑之前提示他们输入。

    public void askAndProcessMainIap() {
    if (Dialog.show("", "Your trial period has finished. Please upgrade to the Full Version", "Ok", null)) {
        Purchase p = Purchase.getInAppPurchase();
        p.purchase("main_app_iap_paid");
    }

在IOS上一切正常,但是在Android上,我所有的客户都报告它不起作用-他们能够从Google购买IAP,并且Google收据确实找到了正确的非消耗性IAP(正如我所看到的那样)在屏幕截图中)。但是我的应用程序未在数据库中存储“收据”。因此,当他们返回应用程序时,它会再次询问他们,然后发出一个错误,说明他们已经购买了该应用程序。

我需要触发itemPurchased()方法,因为它存储了数据库收据条目。 我问这个问题,因为purchase()方法的CN1 javadoc表示“在Android上,您必须使用Play订阅商店产品的subscribe(java.lang.String)”。

作为参考,我发现android.nonconsumable的构建提示应该正确,因为它找到了Google Play IAP显示名称。用户首次购买时并未报告任何错误。 谢谢

1 个答案:

答案 0 :(得分:2)

  

在下面的主类中,p.purchase()方法是否执行了已实现的方法(对于非消耗性IAP)

是的。 Android将在您的主类中触发itemPurchased()方法。

在应用内购买可能真的很难做到。 Google Play上有许多步骤需要完成,而即使缺少一个步骤,也可能导致事情无法进行。最好的策略是逐步对其进行测试。在模拟器中进行测试,以确保您的工作流正常运行,并且收据已正确提交到您的云数据库。

然后,您需要在实际的Android设备上进行测试。在Play商店中创建内部发行版,并将自己设置为测试人员,以便您可以使用“测试/虚拟”信用卡进行购买,并确保流程正常运行。 This page包含有关此测试过程的一些说明。重要步骤如下:

  1. 创建内部Alpha版本。
  2. 将您自己添加到该版本的Alpha测试人员列表中。
  3. 将您自己添加到您的Google开发人员帐户的“许可证测试人员”列表中(这与alpha测试人员列表不同)。
  4. 在设备上安装内部/测试版本。
  5. 尝试进行购买,并确保执行所有步骤/回调。

我通常将System.out.println语句放入所有购买回调方法中,以帮助跟踪测试时的进度。然后,我可以检查设备日志以查看是否/何时/哪个回调被调用。

不要将它留给用户来测试IAP,因为墨菲定律在IAP中很严格。