gpt4 book ai didi

iphone - 何时使用 restoreCompletedTransactions 进行应用内购买?

转载 作者:IT王子 更新时间:2023-10-29 07:38:26 31 4
gpt4 key购买 nike

对于具有非消耗性应用内购买的基本应用,有没有人想出使用 SKPaymentQueue 的 restoreCompletedTransactions 的最佳实践?

观察

我知道建议始终注册事务观察器以接收返回应用程序的未决事务,但这是一个不同的问题。看起来 restoreCompletedTransactions 是应用程序必须主动决定何时调用以轮询客户已经进行的所有购买的事情。

据我所知,该方法旨在检索可能已丢失的购买。例如,客户可能会以这样一种方式将应用安装或移动到新设备,从而导致该应用以前付款的本地记录丢失或重置。

疑虑

我不清楚的是如何以可靠的方式自动检测这种情况(即如何决定何时轮询丢失的购买)。我不想搞砸这件事并冒着拒绝客户访问他们已经付费的功能的风险。

与此同时,我不想每次应用程序启动时都调用 restoreCompletedTransactions 只是为了安全并且基本上取回我已经知道大约 99.9% 的交易。 (除了应用内购买,我的应用实际上不需要任何网络连接。)

注意事项

Apple 文档阐明,客户无需为他们已经购买的任何非消耗品再次付费。如果他们尝试重新购买,付款交易仍会发送到该应用。

最坏的情况是,客户可以通过这种方式收 repo 买的商品,但我仍然希望避免让他们走上类似于重新购买他们已经支付过的东西的道路。

最佳答案

更新(2022 年 6 月)

Apple 已经为这个主题命名,并用整个 WWDC session 来讨论它。

(如果链接最终失效,它指的是 WWDC 2022 的 session 110404。)

类(class)20分钟,内容丰富,值得推荐。有很多细节需要导航,但我将提供两个亮点。

  • 首次启动新安装的应用程序可以自动说明预先存在的购买,而无需提示用户登录 Apple ID 或进行确认。 (restoreCompletedTransactions 用于此。)
  • Apple 仍然需要一个“恢复购买”按钮,用户可以在需要时返回并使用该按钮。

您的应用唯一需要调用 restoreCompletedTransactions 的时间是用户点击“恢复购买”按钮时。 (从一开始,这几乎就是我们对这篇文章的建议。)


上一个答案(2019 年 6 月)

Apple 的 documentation on this topic 2018年更新的,比较全面。它的许多建议与我们最终在这里得出的结论一致。自此问题于 2009 年首次发布以来最大的发展是 iOS 7 中的 App Store 收据。

如果链接在将来的某个时候失效,我将在此处引用一些文档。

Restoring Purchased Products

Users restore transactions to maintain access to content they’ve already purchased. For example, when they upgrade to a new phone, they don’t lose all of the items they purchased on the old phone. Include some mechanism in your app to let the user restore their purchases, such as a Restore Purchases button. Restoring purchases prompts for the user’s App Store credentials, which interrupts the flow of your app: because of this, don’t automatically restore purchases, especially not every time your app is launched.

In most cases, all your app needs to do is refresh its receipt and deliver the products in its receipt. The refreshed receipt contains a record of the user’s purchases in this app, on this device or any other device. However, some apps need to take an alternate approach for one of the following reasons:

  • If you use Apple-hosted content, restoring completed transactions gives your app the transaction objects it uses to download the content.
  • If you need to support versions of iOS earlier than iOS 7, where the app receipt isn’t available, restore completed transactions instead.
  • If your app uses non-renewing subscriptions, your app is responsible for the restoration process.

Refreshing the receipt asks the App Store for the latest copy of the receipt. Refreshing a receipt does not create any new transactions. Although you should avoid refreshing multiple times in a row, this action would have same result as refreshing it just once.

Restoring completed transactions creates a new transaction for every completed transaction the user made, essentially replaying history for your transaction queue observer. While transactions are being restored, your app maintains its own state to keep track of why it’s restoring completed transactions and how it needs to handle them. Restoring multiple times creates multiple restored transactions for each completed transaction.


上一个答案(2009-2012)

在写下问题并思考之后,我想出了几个解决方案。

自动(不推荐)

一个选项是在用户默认值中记录 restoreCompletedTransactions 是否已在应用程序中调用(并成功完成)。如果没有,应用程序会在启动时调用它一次。由于此标志可以存储在与非消耗性付款相同的位置,如果用户默认值稍后被删除,则恢复方法将在应用程序启动时再次调用。

这样,如果现有客户以某种方式重新安装应用程序,他们仍然会自动恢复购买。如果他们是以前从未启动过该应用程序的新客户,则恢复操作不会返回任何内容。

无论哪种情况,restoreCompletedTransactions 都只被调用一次,而不是在每次启动时调用。

手动(推荐)

另一种选择是在某处为客户提供“恢复购买”按钮,将其连接到 restoreCompletedTransactions 并让他们决定是否以及何时可能需要它。

(下面的评论说明了为什么手动恢复可能比尝试自动恢复更好。)

关于iphone - 何时使用 restoreCompletedTransactions 进行应用内购买?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1757467/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com