用于自动续订订阅通知的应用内购买

Posted

技术标签:

【中文标题】用于自动续订订阅通知的应用内购买【英文标题】:in-app purchase for auto-renewal subscriptions notifications 【发布时间】:2013-05-29 09:12:39 【问题描述】:

我一直在阅读有关应用内购买自动续订订阅的各种主题,并且我认为我已经拼凑了我需要的大部分信息,但还有一些缺失的部分。我希望有人可以帮助我。

情况: 我有各种用户可以订阅的订阅套餐(例如,套餐 A 每月 1 英镑,套餐 B 每月 2 英镑,等等)。我将用户的订阅信息存储在我的数据库中。当用户登录时,我会检查他使用的是哪个包以及它是否过期。我的网站,androidios 都使用相同的数据库,因此这种方法似乎很有意义。

通过应用内购买订阅用户似乎很简单。我检查了 paymentQueue,一旦支付完成,我就可以更新我的数据库了。

我的问题:

1) 我的理解是用户可以使用 iTunes 来管理他们的订阅。比如说,他们进入 iTunes 并取消订阅,如何通知我以便更新我的数据库?我是否需要一个守护程序来检查过期订阅以查看用户是否续订?

2) 如果用户想将他们的订阅从套餐 A 升级到套餐 B,我该如何处理定价?假设在 1 月 1 日,他们购买了套餐 A,我向他们收取 1.00 英镑并将到期日期设置为 1 月 31 日。 1 月 15 日,他们想通过应用内购买升级到包 B。理想情况下,我会向他们收取 2 英镑的套餐 B 减去他们对套餐 A 的 0.50 英镑的信用额度,并将新的到期日期设置为 2 月 14 日。但是,Apple 强迫我将每个包裹与等级价格相关联。我该如何处理?我不希望用户等到月底才将他们放入更高级别的包中......如果他们在月中升级,这意味着他们希望新的内容包 B 立即交付给他们。

任何帮助表示赞赏!

谢谢!

【问题讨论】:

你好杰森,你找到解决办法了吗?我也在找一样的。 【参考方案1】:

回答问题 1,您可以像其他 IAP 一样验证订阅收据,但您需要定期检查订阅是否已过期(验证会告诉您订阅是否已过期)。

这里有更多关于 Apple 文档的信息:

http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/RenewableSubscriptions/RenewableSubscriptions.html

【讨论】:

【参考方案2】:

已编辑

对于第二个问题,Apple 的自动续订订阅系统在技术上并不提供不同产品之间的可升级计划。

每个订阅都是一个独立的产品,用户可以使用 iTunes Store 中的订阅管理器手动打开/关闭订阅。

但是,如果包 A 和包 B 提供完全相同的内容,只是持续时间与 ajay_nasa 所说的正确,则您可以创建具有不同持续时间选项的单个自动订阅产品。如果用户订阅了 1 个月,然后用户尝试更改为 2 个月的订阅,他们将收到以下错误消息,要求他们转到 App Store 的订阅管理器

所以基本上用户可以实际更改订阅长度的唯一地方是 App Store。 Apple 是否决定按比例分配旧订阅的剩余金额,或者只是将其附加到当前订阅中,这实际上取决于 Apple。您需要通过阅读每个收据条目中的原始购买日期订阅到期日期字段并确定开始时间来确保用户可以访问订阅,只要它处于活动状态和订阅的结束日期。

【讨论】:

这是一个非常糟糕的主意,而且非常不可靠。您永远不应该在两个订阅之间的订阅费差异中破解,因为有一天您可能会增加一个订阅的费率,而不想为另一个订阅,并且可能会在某些情况下导致赔钱。解决方案的最佳技巧是要求用户在升级之前删除他们以前的订阅。如果用户取消订阅,您可以检查您的数据库。同样对于这种情况,用户可能会有延迟,但比此解决方案要好得多。 不幸的是,Apple 的自动更新订阅系统确实提供了可升级的计划。请尝试在现有的自动续订订阅中添加持续时间。您可以在购买订阅的用户的 iTunes Connect 帐户中进一步验证升级。【参考方案3】:

1) 是的,您必须重新验证您的收据,查看Receipt Validation Programming Guide in the documentation。他们提到了一些重要的关键:

status - 如果收据有效,则为 0,或错误代码 receipt - 收据的 JSON 响应 latest_receipt(仅限自动续订)- 最近续订的 base 64 编码收据 latest_receipt_info - latest_receipt 的 JSON 版本

有了这些信息,当购买时,将收据发送到您的后端进行验证,后端会将收据保存在数据库中,并通过 status = 0 验证它是有效的收据。从那里开始,每隔x 天,您可以使用 chron 作业、守护程序等验证该收据并重新验证。每次返回的响应都将包含latest_receipt_info,您现在需要将其保存到您的数据库中,以便您在x 天的下一次检查中获得最新的收据。这样,您将始终拥有最新的收据。没有即时通知告知用户何时取消订阅,但通过此通知,您将每隔x 天知道他们是否仍有订阅。

2) 不幸的是,无法处理这样的定价。它不是为了让用户通过订阅来“升级” - 在撰写本文时,每个订阅都可以访问它自己的独家内容。但是,如果客户通过电子邮件向其投诉,您可以询问他们的用户名并在您的数据库中确定该用户是否确实在月中升级并适当地补偿他们。非常老派,对于庞大的用户群来说是不可行的,但希望你不会拥有那么多并且能让他们开心。

【讨论】:

【参考方案4】:

实际上,Apple 的自动续订订阅系统确实提供了可升级的计划。

要实现这一点,我们只需在现有的自动续订订阅中添加持续时间。每个 Auto-Renewable Subscription 都可以是 Subscriptions 家族,因此每当开发人员想要升级订阅时,他应该在现有的 Auto-Renewable Subscription 中添加不同 productID 的持续时间。

每当用户在当月之间升级他的计划时,他的升级计划将从下个月自动生效。

【讨论】:

【参考方案5】:

回答您的问题 #1

最近,Apple 推出了一项功能,可在订阅续订时启用服务器通知。但是,订阅应该是应用内的。

请参阅下面给出的链接以供参考:

https://help.apple.com/itunes-connect/developer/#/dev0067a330b

&

https://itunespartner.apple.com/en/apps/news/45333106?sc_cid=ITC-AP-ENREC

【讨论】:

【参考方案6】:

我们需要检查收据中提供的取消日期。

【讨论】:

以上是关于用于自动续订订阅通知的应用内购买的主要内容,如果未能解决你的问题,请参考以下文章

在应用内购买中取消自动续订订阅

iOS 应用内购买自动续订订阅管理

应用内购买,具有不同持续时间的多个自动续订订阅

使用自动续订订阅的应用是不是需要 Apple 应用内购买?

iPhone - 如何检索应用内购买的自动续订订阅的持续时间

处理“终身”订阅以及自动续订应用内购买