【问题标题】:Android IAP non-consumable purchase in CN1CN1中的Android IAP非消耗性购买
【发布时间】:2019-02-23 23:33:56
【问题描述】:

我的问题是,在 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 上,您必须使用 subscribe(java.lang.String) 来购买 Play 商店订阅产品”。

对于 ref,我的 android.nonconsumable 构建提示应该是正确的,因为它发现 Google Play IAP 显示名称正常。用户在首次购买时不会报告任何错误。 谢谢

【问题讨论】:

  • 我自己在 Android 上使用 IAP 时遇到了困难,因此不得不向 Steve 寻求帮助。我请他在这里回答。我们很清楚,这不是订阅,而是一次性付款,所以您不需要订阅,只需 itemPurchased 回调?是否调用了任何回调?在模拟器上能正常工作吗?
  • @ShaiAlmog 这是一次性付款(非消耗性 IAP)。模拟器工作(忽略它抱怨没有收据存储),因为它确实调用了回调。是的,它是 itemPurchased(String sku) 回调,我想检查它是否应该在 Android 上触发,因为 javadoc 让我三思而后行。我会进一步调试,让你知道我想出了什么。也许它正在触发并且它正在下游代码中的某处抑制错误。

标签: android codenameone


【解决方案1】:

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 中很有效。

【讨论】:

  • 这使我走上了正确的道路,可以进行适当的测试。问题是 base64 签名密钥必须在控制台中的某个时间点发生更改,并且与我的应用程序中的构建提示不同。因此,当我进行 Alpha 测试时,设备将完成 IAP 的购买(如果不是测试,将从我的帐户中扣除),但跳过 itemPurchased() 方法并进入 itemPurchaseError() 方法。该错误显示为“sku 购买签名验证失败”。所以我去了“服务和 API”页面并将公钥复制到应用程序中,现在可以工作了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
相关资源
最近更新 更多