我有几个问题可以帮助我更好地理解事情,如果回答:
有没有办法区分新订阅和续订先前购买的订阅?
订阅expires_date后,订阅是否会立即完成续订过程?似乎有时(至少在Sandbox中)我的订阅将在expires_date之前续订30-60秒。
更新总是在expires_date命中后的一致时间发生?例如,如果我启动了我的app并且expires_date已经通过,那么更新何时发生(假设用户没有取消)?或者更确切地说,我的应用程序什么时候才能知道Apple的更新已经发生?
场景:启动了应用,并且我的一个订阅已经过了expires_date。我是否应该向Apple发送收据以查看该订阅是否已续订,还是应该等待几秒钟以确定续订过程是否发生?
谢谢!
答案 0 :(得分:4)
我会尝试回答我自己的问题:
要执行此操作,我会在初始购买完成后在expires_date
中存储订阅的NSUserDefaults
。订阅到期后,我会从NSUserDefaults
中删除该对象。这样,我就可以确定后续订阅是否为续订(NSUserDefaults中存在expires_date
- 续订完成时更新为新expires_date
)或新购买 strong>(expires_date
不存在,或者因为它在之前的订阅到期时删除了,或者产品从未购买过。)
这个问题无关紧要 - 每次应用进入前台时,我所做的就是将expires_date
中存储的NSUserDefaults
与current_date
进行比较。如果current_date
已通过expires_date
,我会致电我的服务器以验证Apple的收据。 Apple会将订阅状态返回给我的服务器(0
表示订阅有效,21006
表示订阅已过期,而其他所有其他内容对我的应用而言都是微不足道的)并且服务器转发它到我的应用程序。通过这种方式,我的应用程序需要多长时间才能获得续订的警报(也就是说,订阅已经通过Apple技术更新但我的应用程序还不知道),因为我确定订阅是否已过期或不。
在沙盒中,续订似乎非常不值得信任。有时,我的订阅会续订五到六次(the standard, according to Apple),有时一次,有时甚至根本不会。根据记录,7天订阅的续订频率不会超过30天订阅。在沙箱中获得与在实时服务器中相同的可靠性会很好,所以我可以相应地编写代码(并减少压力),但我离题了。我发现的唯一可靠且一致的方法是让订阅提醒我的应用,他们续订的是expires_date has passed && I force close/relaunch my app
。有时在背景和前景状态之间切换是有效的,但根据我的经验,这不太可靠 - 我觉得这在现场服务器中会更好[更好]。
当我注意到expires_date
已经过去时,我所做的就是检查我的服务器(进而检查Apple)。因此,更新是在/之前/之后发生并不重要,因为我的服务器确实告诉我订阅的状态。
我希望这些信息可以帮助那些遇到同样问题的人!