React-native-iap: 添加对 Amazon Appstore IAP 的支持

创建于 2020-02-26  ·  35评论  ·  资料来源: dooboolab/react-native-iap

我认为支持Amazon Appstore IAP API会很好。

🎯 feature 📢 announcement 🚶🏻 stale

最有用的评论

我看到过去有一个工作支持它,但它似乎已经过时并且不能与当前的 react-native-iap 库一起使用:
https://github.com/doobolab/react-native-iap/issues/370
所以我在https://github.com/nochkin/react-native-iap/tree/amazon-iap开始了我自己的分叉

它似乎在我自己的开发环境中工作。 但在我为其创建 PR 之前,最好让一些真正的 alpha/beta 测试人员来审查某些边缘案例并正确完善这些案例,因为我很可能不会在我自己的应用程序中使用所有功能。

我尽量留在原来的 react-native-iap API 中。 有几种方法我还没有做(如果有人有办法正确测试,我可以添加它)。

我的分支中的一项重大设计决策是如何检测 Google 与 Amazon。 我认为检测设备型号/品牌不是一个好方法,因为用户可以在 Kindle 上安装 Google Play 并通过 Google 获取应用程序(反之亦然,当您可以在基于 Play 的设备上安装 Amazon Appstore 时)。 在这种情况下,我们应该通过对应的 API 完成 IAP。
我的叉子检查安装源并采取相应措施。 在 dev 环境中,安装源不存在,因此您可以设置一个 fallback 以便能够正确测试它。
如果有兴趣将我的分叉合并到上游存储库中,我将记录这一点。

所有35条评论

我看到过去有一个工作支持它,但它似乎已经过时并且不能与当前的 react-native-iap 库一起使用:
https://github.com/doobolab/react-native-iap/issues/370
所以我在https://github.com/nochkin/react-native-iap/tree/amazon-iap开始了我自己的分叉

它似乎在我自己的开发环境中工作。 但在我为其创建 PR 之前,最好让一些真正的 alpha/beta 测试人员来审查某些边缘案例并正确完善这些案例,因为我很可能不会在我自己的应用程序中使用所有功能。

我尽量留在原来的 react-native-iap API 中。 有几种方法我还没有做(如果有人有办法正确测试,我可以添加它)。

我的分支中的一项重大设计决策是如何检测 Google 与 Amazon。 我认为检测设备型号/品牌不是一个好方法,因为用户可以在 Kindle 上安装 Google Play 并通过 Google 获取应用程序(反之亦然,当您可以在基于 Play 的设备上安装 Amazon Appstore 时)。 在这种情况下,我们应该通过对应的 API 完成 IAP。
我的叉子检查安装源并采取相应措施。 在 dev 环境中,安装源不存在,因此您可以设置一个 fallback 以便能够正确测试它。
如果有兴趣将我的分叉合并到上游存储库中,我将记录这一点。

@nochkin听起来很不错。 我想知道测试这个的步骤。 我没有任何amazon设备。 我还可以测试一下吗? 希望您能为那些有兴趣跟进此集成的人提供一些文档。

我使用真正的亚马逊设备进行测试。 我想如果你在非亚马逊设备上安装亚马逊应用商店,那应该可以。
我将在今天晚些时候创建一些文档以开始使用。 我很高兴有人对此感兴趣。

以下是有关如何将 Amazon IAP 支持添加到现有应用程序的指南:
https://github.com/nochkin/react-native-iap/blob/amazon-iap/README_AMAZON.md
让我知道是否需要进一步澄清。

供参考,
昨晚我对我的 fork 进行了一些更改,并使用它将我的应用程序发布到生产环境中。
到目前为止看起来不错。
如果需要我自己的应用程序未涵盖的任何其他功能或用例,我有兴趣从其他人那里获得反馈。

@hyochan有没有计划将此添加到版本中?

@curiousdustin
您可以使用我的 fork 进行测试和反馈:
https://github.com/nochkin/react-native-iap/tree/amazon-iap
我确定您的用例与我的不同,因此您可以提供额外的反馈以对其进行更多更改。

@nochkin您的分叉是否包括对亚马逊订阅 IAP 的支持?

@curiousdustin
尽管实施以来已经很长时间了,但我相信如此。 我只是没有通过订阅测试它。
您仍然需要在服务器端实施验证,因为我从未在客户端上验证任何内容。

亚马逊并没有带来那么多流量,所以我在现实生活中的测试有点慢。 如果你能在这方面做出贡献,那就太好了。

好的,我可能会对此进行测试。 我目前在生产中使用我自己的 fork,但这是在重大生命周期相关更改之前。 从那时起,我真的很想利用所有伟大的更新。

好的。 我仍在为我自己的应用程序实现订阅(内部应用程序相关逻辑,而不是 rn-iap),所以如果有任何事情请告诉我。

亚马逊订阅 API 在被查询时有点奇怪。 例如,我有相同服务的月度和年度订阅,但亚马逊以相同的方式报告它们。 唯一的区别是价格,所以我想我会根据价格来判断哪个是哪个。

您有很多订阅用户和新订阅用户吗?

是的,我使用的这个应用每个月都有数百个新订阅。 此外,任何使用此功能的更新都将在发布前进行彻底的 QA。

我们也有每月和每年的选择。 正如您所描述的,它们都在亚马逊的一个 ID 下。 在我们的例子中,我们通过 Amazon API 确认订阅,它为我们提供了有关期间的信息。

这听起来很棒。 我很高兴我的前叉将在不同的场景中进行适当的测试。

我需要在 UI 中显示订阅期限供用户选择。
奇怪的是,亚马逊开发者控制台有这些字段,但 API 无权访问它们。

这可能已经改变,但我们发现,即使您向已使用的用户提供 2 个选项,一旦他们启动购买流程,亚马逊将显示预选第一个选项的期间选项。 因此,我们必须为亚马逊实施一个新的 UI,用户实际上并没有选择时间段,直到他们进入亚马逊购买流程 UI。

实际上有趣的想法。 我的 UI 不适合此模型,但如果我决定更改它,我可能会考虑此选项。 无论如何,我可能仍然可以使用它。 谢谢。

@curiousdustin @nochkin
嗨,据我了解,您为这个问题做了很多工作,哇! 我也在实施订阅。 你怎么知道订阅已经更新了? 你需要在服务器上更新它吗? 它如何与 RVS 一起使用,我的意思是亚马逊收据没有订阅的结束日期,所以,如何更新服务器上用户的特定订阅。 如果您对所有这些事情有所了解,很高兴收到您的来信)

我实际上还没有开始在我的项目中实现这个分支。 下个月可能会这样做。

抱歉,我没有太多关于服务器端 Amazon 的工作原理的信息。 我团队中的另一个人处理后端。 我确实知道,目前我们只是将产品 ID 和收据 ID 交给我们的服务器,它会根据需要处理所有其他事情,以验证和更新订阅的有效性。

@kostiantyn-solianyk
我自己的应用目前只实现了 Google Play 和 App Store,我还没有为订阅做 Amazon RVS。
我为亚马逊定期进行应用内购买验证,这很容易实现,所以我认为订阅应该在某种程度上相似。

是的,在测试模式下一切正常,实际上你也可以使用 fork,根据需要工作(在我检查的情况下)。

我们被困在更新订阅的问题上,因为亚马逊收据没有订阅的结束日期,这实际上很奇怪。

我会看看我是否可以重新确定我的任务的优先级,以便我可以在他们的订阅上使用亚马逊验证。
我假设您在使用他们的测试服务器时也遇到了问题,对吧?

@nochkin顺便说一句,我注意到方法getAvailablePurchasesgetPurchaseHistory返回错误。 我认为这两个还没有在你的叉子中为亚马逊 IAP 实现?

你说的对。 我自己的应用模型不使用这些。
我会看一看。 谢谢你。

与@kostiantyn-solianyk 类似,我发现亚马逊需要实现以下方法:

RNIapAmazonModule.endConnection()RNIap.endConnection() $ 调用

我认为这只需要解决承诺。 它还需要更改index.ts ,否则永远不会使用。

RNIapAmazonModule.refreshItems()RNIap.consumeAllItemsAndroid() $ 调用

我的应用程序不使用consumeAllItemsAndroid ,所以我没有研究需要做什么。

RNIapAmazonModule.getPurchaseHistoryByType()RNIap.getPurchaseHistory() $ 调用

我的应用程序不使用getPurchaseHistory ,所以我没有研究需要做什么。

RNIapAmazonModule.getAvailableItemsByType()RNIap.getAvailablePurchases() $ 调用

这是在您的应用程序中提供 _Restore Purchases_ 流程所必需的。 我得到了这个工作,但我天真的感觉有点hacky。 如果我把它清理一下,我会在这里发布解决方案。

除此之外,到目前为止的测试进展顺利。 感谢@nochkin

@nochkin ,你能描述一下你是如何在你的应用项目中安装这个 fork 的吗?

当我做这样的事情时:

"react-native-iap": "github:nochkin/react-native-iap.git#amazon-iap"

该模块无法解析,因为它期望从 typescript 构建的 js 存在,但项目的构建版本在 github 上不存在。 它只为模块发布包创建。 事实上,我认为使用 npm 和上面的行安装,它甚至不会下载 index.ts,因为 .npmignore 文件。

这有意义吗?

非常感谢对缺失方法实现的总结。 我没有实现“endConnection”,因为它不是必需的,但我同意它需要具有兼容性目的的方法。
我会调查其他人。 抱歉,这花了一些时间,但现在事情正在得到解决,我希望尽快检查/实施。

我在本地安装,如下所示:
"react-native-iap": "../react-native-iap"
虽然拥有“react-native-iap”目录只是我的仓库的克隆。

不用担心!

好的,是的,我认为本地文件引用会起作用,但不会使项目非常便携。

我现在用来引用我自己的 fork/branch 的解决方法是定义这样的依赖项:

"react-native-iap": "github:curiousdustin/react-native-iap.git#curious-amazon-iap-ts"

在我的分支中,我已将react-native-iappackage.json中的main属性更改为index.ts而不是.js 。 我还删除了.npmignore中与 TypeScript 相关的条目。

这暂时有效,我猜是因为我的 RN 设置正在自动构建基于 TS 的模块......

另一个似乎缺少的重要部分是错误处理。

Amazon 实现从不运行任何代码来发出错误事件,例如来自 Google 版本的代码:

sendEvent(reactContext, "purchase-error", error);

这意味着purchaseErrorListener永远不会被调用。

著名的。 好点子。 谢谢。

你好,最近好像没有关于这个问题的活动。 问题是否已解决,还是仍需要社区关注? 如果没有进一步的活动发生,此问题可能会关闭。 您也可以将此问题标记为“供讨论”或“第一个问题”,我将保持开放状态。 感谢你的贡献。

撞!

在这个插件中也有亚马逊支持会很棒。 我一直在使用@nochkin制作的亚马逊实现进行自动续订订阅,而且非常可靠。 将这个 fork 集成到 repo 中并拥有更大的贡献者基础来维护实现会很棒!

以后会不会有这方面的消息,还是会放弃这个想法?

我不认为它会被丢弃。 我相信主要的停滞点是一些缺失的功能(对于我的用例来说是次要的,但对于其他人来说可能是主要的)。 我自己的应用程序也对当前状态感到满意。
剩下的拼图部分仍在我的雷达上,我开始研究这些。 不幸的是,由于其他优先事项,完成/测试所需的时间比预期的要长。

是的,我了解情况,到时我会密切注意的!

谢谢你的回复,我希望你能多花点时间🤣

我根据您的出色工作@nochkin @curiousdustin推了一个 PR(#1134)! 👏
测试完成,在我们这边工作得很好! 当 PR 合并时,我们将在react-native-iaphub上添加 Amazon 的支持。
它很实用,但就像@nochkin所说的那样,我们将来仍然可以做一些改进。

你好,最近好像没有关于这个问题的活动。 问题是否已解决,还是仍需要社区关注? 如果没有进一步的活动发生,此问题可能会关闭。 您也可以将此问题标记为“供讨论”或“第一个问题”,我将保持开放状态。 感谢你的贡献。

已解决,现在是 5.0.0 版本的一部分:
https://github.com/doobolab/react-native-iap/releases/tag/5.0.0

此页面是否有帮助?
0 / 5 - 0 等级