【问题标题】:Codename One wasPurchased() method : Is it supported on Android devices?Codename One wasPurchased() 方法:Android 设备是否支持?
【发布时间】:2017-03-23 11:04:30
【问题描述】:

对于我的 Codename One 应用程序,我试图弄清楚我是否可以判断是否已经在 Android 上购买了应用内购买(非消耗品)(code shown in my other SO question)。

根据2014 question,Android 似乎不支持托管购买。但是,当我在 Android 上测试 isManagedPaymentSupported() 时,它返回 true,我可以购买 In-App-Purchase。

因此,Android 似乎支持托管购买。然而wasPurchased() 即使在成功购买后仍然是错误的,尽管this Google Group discussion 似乎说ẁasPurchased() 确实有效。

我试图联系source code for that wasPurchased() method,但找不到任何有用的东西(也许我没有找到正确的代码片段)。

所以我完全迷失了,因为我的代码可以在模拟器上按预期运行,但不能在真正的 Android 设备上运行(这也可能有问题)。因此,有人可以告诉我wasPurchased() 是否在 Android 上运行(在这种情况下,我的 Android 设备出现故障),或者我是否必须实现一些原生 Android 代码才能完成 wasPurchassed() 的预期工作?

编辑 2016 年 11 月 10 日:使用后缀“_nonconsume”解决

正如blog post @Shai showed 在他的回答中所写,默认情况下,Google Play 将产品视为消耗品。这就是为什么在非消耗品wasPurchased() 返回错误的情况下。要使 Google Play 将应用内产品视为非消耗品,您必须在开发者控制台中的 SKU 名称中使用后缀“_nonconsume”(例如:“myappfull_nonconsume”)。然后在将您的应用程序提交到 alpha 测试通道后等待几个小时,当应用程序可用时,Google play 会记住购买,wasPurchased() 将按预期工作。

任何帮助表示赞赏,

【问题讨论】:

    标签: android in-app-purchase codenameone


    【解决方案1】:

    这可能更有用:https://github.com/codenameone/CodenameOne/blob/master/Ports/Android/src/com/codename1/impl/android/CodenameOneActivity.java#L191-L209

    这才是真正被调用的部分。几年前,当我们迁移到新的 Android 应用内购买 3 API 时,添加了对托管购买的支持:https://www.codenameone.com/blog/migrating-to-androids-in-app-purchase-30.html

    【讨论】:

    • 我确实在开始我的项目之前阅读了这篇文章,但忘记了关于非消耗品采购命名约定的关键部分!无论如何,感谢@Shai 的输入!我会将 sku 更改为 myapp_full_nonconsume 并再次检查它现在是否有效。顺便说一句,我在互联网上的其他任何地方都看不到命名约定。这是 Google 的要求还是 Codename One 的特定要求?
    • 就是这样!必须在 SKU 中使用后缀 _nonconsume,就像在您提供的博客条目中一样!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 2019-10-29
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    相关资源
    最近更新 更多