我们的iOS应用程序使用应用程序内购买,包括一次性和自动更新订阅。这两种都是不可消耗的。
似乎后者适用于所有情况,而前者只在某些情况下起作用。具体来说,当我们将自动更新的购买恢复到新设备上时,恢复购买的事务将导致未来的更新生成一个事务,该交易将在后台发送到新设备,在新设备上刷新收据不会导致下一次更新时将事务发送到该设备。
鉴于此,是否有理由使用刷新收据?
苹果似乎在说,我们可以使用以下两种方法:
通过使用SKReceiptRefreshRequest类刷新应用程序收据或使用SKPaymentQueue类的restoreCompletedTransactions方法恢复已完成的事务来检索有关过去采购的信息。
发布于 2018-09-04 08:44:32
您需要阅读这个恢复购买的产品来理解2之间的目的。
从iOS 7下载的每个应用程序在appStoreReceiptURL
都有收据(用于下载/购买应用程序)。当用户通过App购买某些内容时,appStoreReceiptURL
上的内容将被更新为购买信息。大多数情况下,您只需刷新收据(在appStoreReceiptURL
),以便知道用户进行了哪些事务处理。
用户恢复事务以维护对他们已经购买的内容的访问。例如,当他们升级到一部新手机时,他们不会丢失在旧手机上购买的所有物品。在你的应用程序中加入一些机制,让用户恢复他们的购买,比如恢复购买按钮。恢复“购买”提示输入用户的App凭据,这会中断应用程序的流程:因此,不要自动恢复购买,尤其是在应用程序启动时。 在大多数情况下,您的应用程序所需要做的就是刷新它的收据并交付其收据中的产品。更新后的收据包含了用户在此应用程序中、在此设备上或任何其他设备上的购买记录。但是,由于以下原因之一,有些应用程序需要采用其他方法: 如果您使用苹果托管的内容,恢复已完成的事务将为应用程序提供用于下载内容的事务对象。如果您需要支持iOS的版本,而不是iOS 7版本,而应用程序收据是不可用的,那么请恢复已完成的事务。 刷新收据要求App提供收据的最新副本。刷新收据不会创建任何新事务。 还原已完成的事务将为用户完成的每个事务创建一个新事务,实质上是为事务队列观察者重播历史记录。
更多关于接收的信息,来自WWDC 2017,StoreKit会话https://developer.apple.com/videos/play/wwdc2017/303/中的新内容
您还可以观看WWDC 2017,会话高级StoreKit获取更多详细信息https://developer.apple.com/videos/play/wwdc2017/305/。
发布于 2017-08-11 07:37:17
编辑:我最初的回答是解释恢复和刷新之间的区别,这并没有回答原来的问题。对于任何阅读谁感兴趣,看看这个StackOverflow答案获得更多信息。
要回答您的问题:是否有任何理由使用刷新收据?
是。您的典型流程是用户在新设备上安装应用程序,在上恢复购买。此时,您拥有处理该过程所需的所有信息。在提示用户凭据时通常由用户启动的进程:
在你的应用程序中加入一些机制,让用户恢复他们的购买,比如恢复购买按钮。恢复用户应用程序商店凭证的购买提示,这会中断应用程序的流程:正因为如此,不会自动恢复购买,尤其是在应用程序启动时。
稍后,将刷新收据,以获取有关您正在提供的自动可再生订阅的最新相关信息,如:
有关这些字段的更多信息,请参见收据字段文档。
有用的链接
发布于 2019-05-07 09:58:58
刷新收据将获得当前用户(Apple用户)的收据的最新副本。您的设备可能包含过期的收据。在某些情况下,您可能需要进行验证。
考虑一下你的应用程序维护用户帐户的情况,你可以在你的应用程序中自动更新订阅,并为新用户提供试用期。用户在您的应用程序上注册一个帐户(比如accA),并在试用期内提供购买服务。一旦试用期即将到期,她就会取消订阅,并删除应用程序。
几个月后,同一个真实世界的人再次安装应用程序(在同一台设备上或另一台设备上使用相同的apple id),但这一次他们重新注册了一个新帐户(比如accB)。您的应用程序无法知道这个人已经接受了试用期,因此,您的应用程序的UI显示给他们一个试用期,这个订阅是可用的。用户继续使用试用期,但由于她在Apple上使用相同的Apple Id登录,而且试用期已经可用,她将被收取订阅费。
对于一个用户来说,上述情况可能令人沮丧,因为用户没有故意试图欺骗系统来利用试用期,但忘记了以前的购买,掉进了UI陷阱,显示试用期是可用的。
为了避免这种情况,每当用户试图在应用程序中进行第一次购买时(试用期间),您必须首先刷新收据,以确定同一app用户之前是否已经使用了试用期。如果收据验证表明,您必须提示他们试用期已经为当前的应用程序商店用户所使用。
P.S:在这种情况下,即使你可以用accB帐户向用户提供试用期,但在应用程序购买中,只要用户在应用程序商店使用相同的Apple登录,就无法提供这一点。
https://stackoverflow.com/questions/45615106
复制相似问题