![](/img/trans.png)
[英]Refreshing iOS IAP receipt to restore purchases always return a receipt even if no purchase has been made
[英]When to refresh a receipt vs restore purchases in iOS?
我们的iOS应用程序使用应用内购买,包括一次性订阅和自动续订订阅。 这两种都是非消耗品。
似乎后者适用于所有情况,而前者仅适用于某些情况。 具体来说,当我们将自动更新购买恢复到新设备时,恢复购买的交易将导致将来续订生成将在后台发送到新设备的交易,其中刷新收据不会导致交易下次续订时发送到此设备。
鉴于此,有没有理由使用刷新收据?
Apple似乎说我们可以使用:
通过使用SKReceiptRefreshRequest类刷新应用收据或使用SKPaymentQueue类的restoreCompletedTransactions方法恢复已完成的事务,检索有关过去购买的信息。
您需要阅读此恢复购买的产品以了解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/
您还可以观看WWDC 2017,会话高级StoreKit了解更多详情https://developer.apple.com/videos/play/wwdc2017/305/
编辑 :我的初步答案是解释恢复和刷新之间的区别 ,这没有回答原始问题。 对于任何有兴趣阅读的人,请查看此StackOverflow答案以获取更多信息。
回答你的问题:是否有理由使用刷新收据?
是。 您的典型流程是用户在新设备上安装您的应用并恢复购买一次 。 在这个时刻,您拥有处理该过程所需的所有信息。 在提示用户凭据时通常由用户启动的进程:
在您的应用中包含一些机制,让用户恢复购买,例如“恢复购买”按钮。 恢复购买会提示用户的App Store凭据,这会中断您的应用流量:因此, 请勿自动恢复购买 ,尤其是每次启动应用时都不会。
在稍后的某个时间点,您将刷新收据以获取有关您提供的自动续订订阅的最新相关信息,例如:
有关这些字段的详细信息,请参阅收据字段文档。
刷新收据将获取当前用户(Apple Id用户)的最新收据副本。 您的设备可能包含过期的收据。 可能存在您可能需要此验证的情况。
考虑一个案例,您的应用维护用户帐户,并在您的应用中提供自动续订订阅,并为新用户提供试用期。 用户使用帐户(例如accA)注册您的应用,并在试用期内使用购买。 试用期即将到期后,她会取消订阅并删除应用。
几个月后,同一个真实世界的人再次安装应用程序(在同一设备或具有相同App Store苹果ID的其他设备上),但这次他们重新注册一个新帐户(比如accB)。 您的应用无法知道此人已经过了试用期,因此您的应用的UI会向他们显示此订阅的试用期。 用户跳过试用期,但由于她在App商店中使用相同的Apple Id登录,并且试用期已经开始,因此她将收取订阅费用。
对于没有故意试图欺骗系统以利用试用期但忘记了之前的购买并且陷入UI的陷阱显示试用期可用的上述情况可能是令人沮丧的。
要避免这种情况,每当用户尝试在您的应用中首次购买时(试用期),您必须先刷新收据,以确定试用期是否已由同一App Store用户提前使用。 如果收据验证告知,您必须提示他们已经为当前的应用商店用户使用了试用期。
PS:在这种情况下,即使您向帐户accB的用户提供试用期很好,但只要用户使用App Store上的相同Apple Id登录,应用购买就无法提供。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.