菜鸟教程小白 发表于 2022-12-12 15:11:15

ios - 使用未完成的事务在 iOS 中跨设备共享消耗品?


                                            <p><p><strong>TL;DR</strong> 你能推迟 iOS 中消耗品的 finishTransaction 调用来模仿机器人的 consumeAsync 吗? </p>

<p>在 Android 中,您可以购买一件商品,该商品最终会出现在由结算 api 管理的列表中。并且可以通过<a href="https://developer.android.com/reference/com/android/billingclient/api/BillingClient.html#queryPurchaseHistoryAsync%28java.lang.String,%20com.android.billingclient.api.PurchaseHistoryResponseListener%29" rel="noreferrer noopener nofollow">queryPurchaseHistoryAsync</a>访问. </p>

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

<p>帐户在我们的应用程序中是可选的,我们使用 android 中描述的功能来跟踪用户在<strong>丢失他/她的设备</strong>时已购买/但尚未消费的元素。</p>

<p><a href="https://developer.apple.com/documentation/storekit/skpaymentqueue" rel="noreferrer noopener nofollow">SKPaymentQueue</a> 上的文档不清楚关于多设备同步。</p>

<blockquote>
<p>The contents of the queue are persistent between launches of your app.</p>
</blockquote>

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

<p>虽然不同<a href="https://stackoverflow.com/questions/22599763/how-to-consume-a-purchased-item-with-in-app-purchase-on-ios" rel="noreferrer noopener nofollow">sources</a>建议您自己管理消耗品的状态。</p>

<p>我想知道是否可以通过保留消耗品 <a href="https://developer.apple.com/documentation/storekit/skpaymenttransaction" rel="noreferrer noopener nofollow">SKPaymentTransaction</a> 来将 SKPaymentQueue 用作单一事实点在 <a href="https://developer.apple.com/documentation/storekit/skpaymenttransactionstate/purchased" rel="noreferrer noopener nofollow">purchased</a>状态。因此,我不会调用 <a href="https://developer.apple.com/documentation/storekit/skpaymentqueue/1506003-finishtransaction" rel="noreferrer noopener nofollow">finishTransaction</a>在元素实际消耗之前。</p>

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

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

<p>我在某处找不到这种方法,我想知道我是否在这里遗漏了一些重要的东西。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您绝对应该在 iOS 上完成交易:</p>

<blockquote>
<p>StoreKit will call your observer’s paymentQueue(_:updatedTransactions:) every time that your app launches or resumes from background until they are removed. To that effect, your customers may be repeatedly asked to authenticate their purchases or be prevented from purchasing your products.
<a href="https://developer.apple.com/library/archive/technotes/tn2387/_index.html#//apple_ref/doc/uid/DTS40014795-CH1-BEST_PRACTICES-FINISH_THE_TRANSACTION" rel="noreferrer noopener nofollow">https://developer.apple.com/library/archive/technotes/tn2387/_index.html#//apple_ref/doc/uid/DTS40014795-CH1-BEST_PRACTICES-FINISH_THE_TRANSACTION</a></p>
</blockquote>

<p>和安卓:</p>

<blockquote>
<p>Consume purchase corresponding to the given purchase token. This will result in this item being removed from all subsequent responses to getPurchases() and allow repurchase of items of the same sku.
<a href="https://developer.android.com/google/play/billing/billing_reference#consumePurchase" rel="noreferrer noopener nofollow">https://developer.android.com/google/play/billing/billing_reference#consumePurchase</a></p>
</blockquote>

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

<p>您还可以使用 <a href="https://www.revenuecat.com/" rel="noreferrer noopener nofollow">RevenueCat</a> 之类的服务这一切都为您解决了问题。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 使用未完成的事务在 iOS 中跨设备共享消耗品?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/55076694/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/55076694/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 使用未完成的事务在 iOS 中跨设备共享消耗品?