首页 > 解决方案 > 使用未完成的事务在 iOS 中跨设备共享消耗品?

问题描述

TL;DR你能推迟 iOS 中消耗品的 finishTransaction 调用以模仿机器人的 consumeAsync 吗?

在 Android 中,人们可以购买一件物品,它最终会出现在由计费 api 管理的列表中。并且可以通过queryPurchaseHistoryAsync访问。

然后可以稍后消费一个项目。购买和消费是两个不同的东西。

帐户在我们的应用程序中是可选的,我们使用 android 中描述的功能来跟踪用户已经购买/但在丢失设备时还没有消费的物品。

关于多设备同步的SKPaymentQueue文档并不清楚。

队列的内容在您的应用程序启动之间是持久的。

但实际上,它似乎是在设备之间交换的。

虽然不同的消息来源建议您必须为自己管理消耗品的状态。

我想知道是否可以通过将消耗品SKPaymentTransaction保持在购买状态来将 SKPaymentQueue 用作单点事实。因此,我不会在项目实际消耗之前调用finishTransaction 。

理论上,交易应该保留在 SKPaymentQueue 中,并且应该转移到使用同一个 AppStore 帐户登录的所有设备。

一旦交易在其中一个设备上完成,它应该从队列中删除,并且信息应该再次传播到所有设备。

我在某处找不到这种方法,我想知道我是否错过了一些重要的东西。

标签: iosin-app-purchasestorekit

解决方案


您绝对应该在 iOS 上完成交易:

每次您的应用程序从后台启动或恢复时,StoreKit 都会调用您的观察者的 paymentQueue(_:updatedTransactions:) 直到它们被删除。为此,您的客户可能会被反复要求对他们的购买进行身份验证或被阻止购买您的产品。 https://developer.apple.com/library/archive/technotes/tn2387/_index.html#//apple_ref/doc/uid/DTS40014795-CH1-BEST_PRACTICES-FINISH_THE_TRANSACTION

和安卓:

消费对应于给定购买令牌的购买。这将导致该商品从对 getPurchases() 的所有后续响应中删除,并允许重新购买相同 sku 的商品。 https://developer.android.com/google/play/billing/billing_reference#consumePurchase

实现多设备支持的正确方法是拥有一个服务器来验证和跟踪用户购买的产品。有了服务器就可以实现,不仅设备同步,还支持多平台。

您还可以使用像RevenueCat这样的服务,它可以为您完成所有这些工作,而不会让人头疼。


推荐阅读