Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何恢复和验证自动续订订阅?_Ios_Swift_In App Purchase_App Store - Fatal编程技术网

Ios 如何恢复和验证自动续订订阅?

Ios 如何恢复和验证自动续订订阅?,ios,swift,in-app-purchase,app-store,Ios,Swift,In App Purchase,App Store,首先,关于这个主题似乎有很多问题,但大多数问题似乎已经过时,并且没有考虑iOS 9中可用的API 1) 如何恢复购买? 当用户在>=iOS 9上点击自动续费订阅的Restore-Purchase按钮时,是否应调用SKReceiptRefreshRequest或SKPaymentQueue.defaultQueue().restoreCompletedTransactions()?目前,我验证收据文件以确定活动订阅并解析最新收据信息,调用restoreCompletedTransactions时是

首先,关于这个主题似乎有很多问题,但大多数问题似乎已经过时,并且没有考虑iOS 9中可用的API

1) 如何恢复购买? 当用户在>=iOS 9上点击自动续费订阅的
Restore-Purchase
按钮时,是否应调用
SKReceiptRefreshRequest
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
?目前,我验证收据文件以确定活动订阅并解析
最新收据信息
,调用
restoreCompletedTransactions
时是否也在设备上创建收据文件

2) 如何验证自动续费订阅? 要验证>=iOS 9上的自动续费订阅是否仍处于活动状态且未取消,我将在用户每次启动应用程序时调用
SKReceiptRefreshRequest
。但政府说:

在你的应用程序中加入一些机制,让用户恢复他们的 购买,例如恢复购买按钮。恢复购买 提示输入用户的应用商店凭据,这会中断 应用程序流:因此,不会自动恢复 购买,特别是不是每次启动应用程序时购买

我应该每天只给它打一次电话,还是有其他方法来验证订阅

更新: 对于2)刚刚发现的:

在应用程序启动后立即执行收据验证, 在显示任何用户界面或生成任何子进程之前。 在主功能中执行此检查,然后 调用NSApplicationMain函数。为了增加安全性,您可以 在应用程序运行时定期重复此检查


显然,收据可以在没有用户交互的情况下进行验证。为了安全起见,甚至建议在自己的服务器上执行此操作。因此,只要收据由App Store服务器验证,就不需要收据刷新请求。

对于(2)-您应该只在每次希望续订时验证订阅,并存储该订阅已续订。不需要重复这么做。@sschale订阅可能会被取消,所以我必须重复检查,不是吗?那取决于你有多偏执。这是用户体验和安全性之间的权衡。@sschale我认为你认为这是一种权衡的假设是不正确的。显然,无需收据刷新请求即可验证收据。苹果甚至建议反复验证收据,看我的更新。啊-阅读这些文档,我认为恢复购买和刷新收据是有区别的。我在这里没有实际经验,但我会尝试调用刷新,看看它是否不会提示登录。