iTunes 跨平台 IAP 订阅 - Netflix 是如何做到的?

Posted

技术标签:

【中文标题】iTunes 跨平台 IAP 订阅 - Netflix 是如何做到的?【英文标题】:iTunes cross-platform IAP subscriptions - how does Netflix do it? 【发布时间】:2016-01-03 10:38:12 【问题描述】:

我正在创建一项服务,允许用户在任意数量的设备(网络、android、Roku、ios、Apple TV)上注册,然后购买每月订阅以观看视频内容。订阅提供对整个目录的访问。我有自己的订阅管理 API 在服务器上运行,我想利用它作为事实来源,以便用户可以在他们的 iPad 上购买订阅,在 Roku 上登录应用程序,然后继续观看他们离开的地方。

基本上,Netflix。

据我所知,这是我的选择:

    自动续订订阅:这是 Netflix 今天使用的,但 Apple 没有提供 API 或围绕其支付平台的任何 webhook 集,所以我不知道这个选项如何工作。我的后端服务不知道 Apple 何时自动每月续订订阅或用户是否取消订阅。

    非续订订阅:用户在里面购买订阅 该应用程序通过 IAP。购买完成后,应用同步 订阅我的后端系统。该应用程序与我的接口 任何时候需要权利检查的后端。当用户的 订阅即将到期,应用必须出示购买 再次工作流。

    导入 iTunes 报告:将不起作用,因为它不是实时的(拉取,而不是推送)并且不会告诉我有关取消订阅的任何信息。我只能生成新订阅者的报告。

    收据验证和推送收据到我的服务:不起作用,因为它取决于实际使用我的应用程序的用户。理论上,用户可以在我的应用中订阅,切换到 Roku,然后再也不会打开它。

    完全跳过 IAP,并要求用户通过网络订阅。

我错过了什么吗?我真的很好奇 Netflix 是如何做到这一点的。

【问题讨论】:

除非我忘记了什么,否则我认为 Netflix 根本不会使用 Apple 应用内购买订阅系统。我认为您只是直接通过 Netflix 购买订阅,他们会跟踪您的帐户状态等。他们的应用程序只是检查服务器和他们自己的内部跟踪,以查看您的帐户是否仍然有效。如果我想这样做,我只需要 PayPal 订阅或类似的东西,并完全绕过特定于平台的 API。此外,您不必从每个订阅中分给 Apple(或 Google 等)。 从上个月开始,Netflix 允许用户通过他们的 iDevices 订阅,并且他们使用 IAP(根据 Apple 的指导方针;他们不允许通过任何其他系统进行应用内支付) 【参考方案1】:

对于初始订阅购买:

    用户在 iDevice 上发起购买 设备联系 Apple,Apple 开具收据并发回设备 设备将收据发送到我的服务器 服务器通过 Apple 的收据验证 API 验证收据是否合法 验证收据后,服务器将其存储在我的数据库中 服务器响应应用程序说一切正常

要使服务器与 iTunes 订阅保持同步:

    设置 cron 作业以每天从数据库中检索过期收据或其他内容 通过 Apple 验证每张收据 Apple 将回复更新版本的收据,其中包含有关订阅是否被取消/续订/等的详细信息。 服务器将原始收据替换为数据库中的此更新版本

现在,如果有人在 Roku 或其他设备上登录他们的帐户,订阅可以兑现,因为我的数据库是事实的来源。

【讨论】:

您没有保存原始 binary64 收据,您正在验证该收据保持不变并且可以稍后在您的回答中重复使用您正在谈论保存我们传统上视为收据的内容并使用它来更新订阅等相关的数据点。答案让它看起来是一回事。 4.Server 将原始收据替换为数据库中的此更新版本 - 这不是必需的,原始收据始终为您提供最新信息。无需用任何其他未来收据替换它。 如果其他用户使用新帐户登录此设备,您将如何处理?您将注册该新用户拥有有效的收据和订阅,尽管他们没有支付任何费用。他们现在将登录到他们的设备,您的数据库将允许订阅。【参考方案2】:

我知道这已经过时了,但 Apple 最近推出了 Status Update Notifactions,它完成了 OP 通过 webhook 提出的要求:

    将 Apple 配置为向您指定的端点发送通知。 (Apple's small guide) 处理通过 HTTP POST 从 App Store 发送的 JSON 对象并验证最新收据。 将数据更新/保存到您的数据库。 回复200 状态码以报告成功。

您将能够处理以下通知类型:INITIAL_BUYCANCELRENEWALINTERACTIVE_RENEWALDID_CHANGE_RENEWAL_PREFERENCE

上面链接中的文档更详细地解释了实现和类型。

【讨论】:

我想指出,这些通知的完整实现存在一些问题(检查this SO answer 和this Apple developer forum)。

以上是关于iTunes 跨平台 IAP 订阅 - Netflix 是如何做到的?的主要内容,如果未能解决你的问题,请参考以下文章

通过 IAP 的内容订阅模式

拒绝 IAP - iTunes Connect

由于没有 IAP 的用户购买订阅,iOS 应用程序被拒绝 [关闭]

在 iTunes Connect 中为 iAP 添加新的本地化(语言)是不是需要(重新)批准 IAP?

Swift IOS 13,IAP - “无法连接到 Itunes Connect”

IAP 自动更新沙盒帐户 - 无法连接到 iTunes Store 错误