何时刷新收据与在iOS中恢复购买?

时间:2017-08-10 13:27:29

标签: ios in-app-purchase

我们的iOS应用程序使用应用内购买,包括一次性订阅和自动续订订阅。这两种都是非消耗性的。

iOS提供两种API:refresh receiptrestore completed transactions

似乎后者适用于所有情况,而前者仅适用于某些情况。具体来说,当我们将自动更新购买恢复到新设备时,恢复购买的交易将导致将来续订生成将在后台发送到新设备的交易,其中刷新收据不会导致交易下次续订时发送到此设备。

鉴于此,有没有理由使用刷新收据?

Apple似乎说我们可以使用:

  

通过刷新应用来检索有关过去购买的信息   使用SKReceiptRefreshRequest类或恢复已完成的收据   使用restoreCompletedTransactions方法的事务   SKPaymentQueue类。

3 个答案:

答案 0 :(得分:3)

您需要阅读本Restoring Purchased Products才能理解2之间的目的。

在iOS 7中,从商店下载的每个应用都在appStoreReceiptURL处有一张收据(用于下载/购买应用)。当用户通过In App Purchase购买商品时,appStoreReceiptURL上的内容会更新为购买信息。在大多数情况下,您只需要刷新收据(位于appStoreReceiptURL),就可以知道用户进行了哪些交易。

  

用户可以还原交易,以保持对已购买内容的访问权限。例如,当他们升级到新手机时,不会丢失在旧手机上购买的所有物品。在您的应用程序中包含一些机制,以使用户恢复购买的交易,例如“恢复购买”按钮。恢复购买会提示用户提供App Store凭据,这会中断您的应用流:因此,请不要自动恢复购买,尤其是不是在每次启动应用时都会自动恢复购买。

     

在大多数情况下,您的应用所需要做的就是刷新收据,并在收据中交付产品。刷新后的收据包含用户在此应用程序,此设备或任何其他设备上的购买记录。但是,由于以下原因之一,某些应用需要采用其他方法:

     

如果您使用 Apple托管的内容,则还原已完成的交易将为您的应用提供用于下载内容的交易对象。   如果您需要支持无法使用应用收据的iOS 7之前的iOS版本,请还原已完成的交易。

     

刷新收据将要求App Store提供收据的最新副本。 刷新收据不会创建任何新交易。

     

还原已完成的交易会为用户进行的每个已完成的交易创建一个新交易,实质上是为您的交易队列观察者重放历史记录。

有关收据的更多信息,来自WWDC 2017,StoreKit会话https://developer.apple.com/videos/play/wwdc2017/303/中的新增功能

enter image description here

您还可以观看WWDC 2017,在Advanced StoreKit会话中了解更多详细信息https://developer.apple.com/videos/play/wwdc2017/305/

enter image description here

答案 1 :(得分:1)

修改:我的初步答案是解释恢复和刷新之间的差异,这不是回答原始问题。对于有兴趣阅读的人,请查看此StackOverflow answer以获取更多信息。

回答你的问题:有没有理由使用刷新收据?

是。您的典型流程是用户在新设备上安装您的应用,恢复购买。在这个时刻,您拥有处理该过程所需的所有信息。一个通常由用户启动的进程,因为它会提示用户的凭据:

  

在您的应用中添加一些机制,让用户恢复购买,例如“恢复购买”按钮。恢复购买会提示用户的App Store凭据,这会中断您的应用流量:因此,不会自动恢复购买,尤其是每次启动应用时都不会。

稍后您会刷新收据以获取有关您提供的自动续订订阅的最新相关信息,例如:

  • 订阅到期意图
  • 订阅重试标记
  • 订阅试用期
  • 取消日期
  • 取消原因
  • ...

有关这些字段的详细信息,请参阅Receipt Fields文档。

有用的链接

答案 2 :(得分:0)

刷新收据可获得当前用户(Apple Id用户)的收据的最新副本。您的设备可能包含过期的收据。在某些情况下,您可能需要此验证。

请考虑您的应用维护用户帐户,并在应用中提供自动续订的情况,并为新用户提供试用期。用户使用一个帐户(例如accA)注册您的应用,并在试用期内购买该产品。试用期即将到期后,她取消了订阅并删除了该应用。

再过几个月,同一位真实世界的人又在同一设备或具有相同App Store Apple ID的另一台设备上再次安装了该应用程序,但这次他们使用新帐户重新注册(例如accB)。您的应用无法知道此人已经接受了试用期,因此您的应用的用户界面向他们显示了该订阅的试用期可用。用户希望使用试用期,但是由于她在App Store上使用相同的Apple ID登录,并且试用期已经可用,因此需要为订阅付费。

对于没有故意欺骗系统来利用试用期但忘记了先前购买并陷入显示试用期可用的UI陷阱的用户,上述情况可能会令人沮丧。

为避免这种情况,每当用户尝试在您的应用中进行首次购买(针对试用期)时,您都必须先刷新收据,以识别同一App Store用户是否已经提前试用了该试用期。如果收据确认告知您,则必须提示他们当前的应用商店用户已经有试用期。

PS:在这种情况下,即使您可以使用帐户accB向用户提供试用期,但只要用户在App Store上使用相同的Apple ID登录,应用程序内购买就不能提供试用期。

>