在应用程序自动更新订阅

时间:2011-03-16 17:35:18

标签: iphone in-app-purchase

对于有关iTunes订阅的第100个问题感到抱歉,但我仍有一些疑问。

基本上我正在我的应用程序中实现自动更新订阅,我想确保我做对了。以下列出了我想出的步骤:

  • 每当用户购买订阅时,将收据发送到服务器以验证它
    • 如果收据有效,请将其保存在数据库中
  • 在应用程序加载时,询问服务器是否存在此UDID的收据(这是为了确定用户是否具有有效订阅)
    • 如果是,请检查在订阅开始日期到过期日期之间的商店是否添加了新商品
      • 如果有的话,以某种方式通知用户这些项目并将其标记为可免费下载

这些步骤是否正确?如果是这样,为什么Apple医生说:

  
    
      

在大多数情况下,您的iOS客户端应用程序不需要更改。实际上,您的客户端应用程序现在变得更加简单,因为您可以使用相同的代码来恢复自动更新订阅,就像恢复非消耗性产品一样。 “恢复交易”中对此进行了描述。您的应用程序会在续订订阅的每个时间段内收到单独的交易;您的申请应单独核实每张收据。

    
  

对我来说,看起来这需要一些代码来处理我提到的所有各种情况。或者我完全错了。我呢?

另外,我如何知道订阅到期日期?我无法找到在任何地方获取此信息的方法。我应该把它保存在我自己的数据库中吗?

更新

自从我发布这个问题后,我发现了一些事情。如果我错了,请随意纠正我。

首先,我想我应该在我自己的数据库中存储订阅的长度,因为正如Apple的文档中所述,您无法通过Apple的Web服务以任何方式检索它。实际上,每个订阅长度都有不同的产品标识符,因此您应该有办法将产品标识符转换为订阅长度。

另外,Sylvian has posted详细介绍了他实施自动续订订阅的情况,所以至少我知道我的想法并没有太多缺陷。

现在唯一的问题是:我怎么知道用户有有效的订阅?我可以将这些信息存储在我的服务器上,是的,但是如何将用户与已完成的用户相关联交易?我应该保存设备的UDID吗?

4 个答案:

答案 0 :(得分:30)

以下是我们如何在我的公司实施In App Purchases,特别是新的汽车再生产品。

应用程序将交易收据发送到我们的Web服务,如果我们正确处理它并且Apple可以验证它,我们会向应用程序返回OK。在这种情况下,我们更新了用户帐户(即数据库),说“是他已付款,他的订阅有效,直到收据到期日期”。

在此Web服务的OK之后,应用程序通过另一个Web服务重新加载帐户信息,并看到有效订阅。就是这样......直到自动再生产品出现。

我们现在必须实施一些每天运行的CRON作业:我们每天都会列出一份应该过期的通行证清单,我们会询问Apple原始收据是否仍然有效:神奇的是他们的回答,有一个字段latest-receipt,其中嵌入了最新收据。如果它与我们的不同,我们理解订阅已自动续订,我们存储下一次cron检查的最新收据,并更新用户帐户以延长到期日期。

希望它有所帮助。

答案 1 :(得分:8)

我想我找到了解决方案。它不需要额外的用户名/密码,似乎工作正常。

注意:如果您认为这是不合适的,请在评论中解释原因。感谢。

基本上,每当用户购买订阅时,我都会根据我的服务器验证收据,并将收据数据存储在用户默认值中。然后,当应用程序打开时,或者每当我需要检查订阅是否仍然有效时,我从用户默认值中检索以前保存的收据数据并对服务器进行验证。

我的webservice只返回订阅是否仍然有效或已过期,以及其他一些相关信息,例如订阅长度。为此,它只是像往常一样查询iTunes服务器,并检查状态响应是否为非零。 21006表示订阅已过期。

答案 2 :(得分:0)

如果您的应用有一些用户管理,即您使用用户名/密码来使用该应用,那么您必须维护一台服务器来记录当前登录用户的购买/有效性。这适用于正常订阅和非消费品购买。但是......如果您使用新的自动续订订阅,那么就不可能在该应用中维护多个用户,因为:在订阅期内使用相同的Apple ID不能多次进行此类购买应用程序,我发现它真的很烦人,并为这种情况找到一个更好的解决方案,即我在应用程序中有多个子帐户,但我想使用相同的Apple-Id为每个帐户购买自动更新的订阅。而且我认为我必须使用旧的订阅模式。有什么新想法吗?

答案 3 :(得分:-2)

据我所知,苹果服务器会联系您(或客户用他的iPhone)并告诉“看这里我有一个有效的购买”​​。在您的应用程序中,您阅读此消息并解锁相关内容以供使用。下一步是告诉苹果服务器您已经回复了收据,苹果服务器将不再显示该消息。

因此,通过可续订订阅,您可以在每个时段获得新消息。如果我错了,请纠正我。