在应用程序自动更新订阅

问题描述:

对于有关iTunes订阅的第100个问题抱歉,但我仍然有一些疑问。在应用程序自动更新订阅

基本上我在我的应用程序中实现了自动更新订阅,我想确保自己的答案正确。下面是步骤列表拿,我想出了:

  • 每当用户购买订阅,发送回执到服务器,以验证它
    • 如果收据是有效的,将其保存在数据库
  • 应用负载,要求服务器如果收到这个UDID存在(这是要弄清楚,如果用户有一个有效的订阅)
    • 如果是这样,检查是否有EW项目已被添加在商店中的日期范围从认购起始日期为到期日
      • 如果有的话,通知大约在某种程度上这些项目中的用户并将其标记为可免费下载的

这些步骤是否正确?如果是这样,为什么苹果的文档说:

在大多数情况下,您的iOS客户端应用程序不应该需要改变。事实上,您的客户端应用程序现在变得更简单了,因为您可以使用相同的代码来恢复自动更新订阅,就像恢复非消费品产品一样。这在“恢复事务”中进行了描述。您的应用程序在续订订阅的每个时间段都会收到单独的事务;你的申请应该分别验证每个收据。

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

另外,我怎么知道订阅到期日?我找不到在任何地方获取这些信息的方法。我应该保存在我自己的数据库?

更新:

,因为我张贴了这个问题,我已经想通了几件事情。如果我错了,随时纠正我。

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

另外,Sylvian has posted有关他实施自动更新订阅的详细信息,所以至少我知道我的想法没有太多缺陷。

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

+1

你应该检查出deforums.apple.com而不是问题。没有人知道答案,但开发人员正在这里讨论它, – honcheng 2011-03-17 00:35:52

+0

@honcheng我张贴在这里,因为我找不到答案。 – pt2ph8 2011-03-23 11:58:14

+0

我正在努力解决完全相同的问题,最重要的是识别'同一用户 - 其他设备'。你有没有进一步与此? – 2011-04-12 11:38:31

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

注意:如果您认为这样做不合适,请解释为什么在评论中。谢谢。

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

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

+0

您如何处理多设备用户? – 2011-04-12 11:23:34

+0

@Kai我有一个'恢复'按钮,它调用'restoreCompletedTransactions',就像很多其他应用程序一样 – pt2ph8 2011-04-12 12:11:44

+0

这不是苹果服务器的一点点开销吗?我通常会将验证过程的过期日期保存到数据库,但我不能相信苹果,因为在沙盒模式中,每月订阅结束5分钟后!!为什么?有没有更好的方法来验证订阅的长度?我已经阅读过苹果文档,订阅的长度必须由应用程序(或服务器)计算 – NicTesla 2011-07-07 09:32:31

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

因此,通过可更新的订阅,您可以为每个期间获得一条新消息。请纠正我,如果我错了。

下面是我们如何实施应用内购买,特别是我公司的新自动更新产品。

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

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

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

希望它有帮助。

+0

谢谢。我有一个问题:您说在验证收据后更新数据库上的用户帐户。但是,你真正用“用户帐户”的意思是什么?它是基于设备的udid的数据库记录吗? – pt2ph8 2011-03-30 12:58:55

+0

我们的客户必须登录,以便每个webservice知道用户打电话给他们。我们在数据库中有一条记录,表示该账户有订阅。 – Sylvain 2011-03-31 09:29:14

+0

我已经看到很多应用程序在不使用其他用户管理层的情况下执行此操作,而只是使用iTunes帐户。他们是如何做到的呢? – pt2ph8 2011-03-31 12:58:51

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

+0

在我的多用户应用程序中仍在争夺可再生订阅。正常订阅工作正常,但我们想使用新的自动更新。为应用程序中的每个新用户选择不同的productId(相同类型和目的)问题。 :( – Tushar 2011-07-27 05:45:30

+0

您是否为多用户应用程序自动更新工作? – Merkidemis 2014-10-10 19:26:03