Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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_In App Purchase_Icloud - Fatal编程技术网

Ios 非续订订阅:返回时间

Ios 非续订订阅:返回时间,ios,in-app-purchase,icloud,Ios,In App Purchase,Icloud,我正在创建一个应用程序,可以在有限的时间内向用户解锁功能。我们称之为高级功能。他们可以购买一个月、6个月或一年的订阅。这些订阅将是不续费的。在搜索了大量的网页并找到了非常不同的“解决方案”之后,我转向StackOverflow寻求最佳解决方案 购买订阅时,结束日期将存储在设备本地,直到通过iCloud同步,因为苹果希望您在所有设备上都有此订阅。该应用程序检查iCloud以查看当前订阅是否仍然可用,并为用户显示了还剩几天的倒计时。但我现在遇到了一个问题。当用户支付了一个月的费用,并将设备的日期更改

我正在创建一个应用程序,可以在有限的时间内向用户解锁功能。我们称之为高级功能。他们可以购买一个月、6个月或一年的订阅。这些订阅将是不续费的。在搜索了大量的网页并找到了非常不同的“解决方案”之后,我转向StackOverflow寻求最佳解决方案

购买订阅时,结束日期将存储在设备本地,直到通过iCloud同步,因为苹果希望您在所有设备上都有此订阅。该应用程序检查iCloud以查看当前订阅是否仍然可用,并为用户显示了还剩几天的倒计时。但我现在遇到了一个问题。当用户支付了一个月的费用,并将设备的日期更改为一年前的日期(或其他日期),则可以使用订阅一年。倒计时现在显示的不是还剩23天,而是389天

我怎样才能避免这种情况? 我应该检查某个服务器以检查实时时间和日期吗? 如果用户仅在飞行模式下使用该应用程序会怎么样


提前谢谢

您可以检查标准的基于web的时间服务器来执行此操作。因为我有自己的服务器(作为我的应用内购买机制的一部分),所以我只需要在服务器上询问我的服务器当前的时间。每次应用程序启动时,我都会这样做,每次我打服务器电话时(通常是在应用程序内购买完成时)。然后,我将时间存储在本地(在KeyChain或NSUserDefaults中,不记得是哪个!),并使用它(以及设备时间,时间越晚越好)计算购买到期日


当然,这假设用户在启动应用程序时有网络连接。不过你只能做这么多

实际上,在成功完成您的InApp购买后,苹果将为您提供一个事务接收器……该事务接收器存储在本地。当您要检查订阅是否处于活动状态或已过期时,您需要使用此事务接收请求storekit,然后storekit将为您提供状态。。如果状态为0,则它处于活动状态。如果状态为21006,则您的交易已过期。如果要在其他设备中继续订阅,则需要在那里恢复事务。。恢复完成后,您将获得所有产品ID和事务接收。。您需要将事务接收存储在那里,并且需要将其传递给storekit,无论它处于活动状态还是过期状态。。对不起,我的英语很差

这是错误的。苹果公司对不续约的子条款的续约时间/日期一无所知。由app为不续费的订阅实施这种机制。