iTunes 跨平台 IAP 订阅——Netflix 是怎么做到的?

iTunes cross-platform IAP subscriptions - how does Netflix do it?

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

基本上,Netflix。

据我所知,以下是我的选择:

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

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

  3. 导入 iTunes 报告:不会工作,因为它不是实时的(拉,不是推),也没有告诉我有关取消订阅的任何信息。我只能生成新订阅者的报告。

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

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

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

首次订阅购买:

  1. 用户在 iDevice 上发起购买
  2. 设备联系 Apple,Apple 发出收据并将其发回给设备
  3. 设备将收据发送到我的服务器
  4. 服务器通过Apple的收据验证验证收据合法API
  5. 验证收据后,服务器将其存储在我的数据库中
  6. 服务器响应应用说一切正常

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

  1. 设置一个 cron 作业以每天或其他方式从数据库中检索过期收据
  2. 使用 Apple 验证每张收据
  3. Apple 将以更新版本的收据作为回应,其中包含有关订阅是否 canceled/renewed/etc 的详细信息。
  4. 服务器用数据库中的更新版本替换原始收据

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

我知道这已经过时了,但 Apple 最近推出了 Status Update Notifactions,它实现了 OP 通过 webhook 要求的内容:

  1. 将 Apple 配置为向您指定的端点发送通知。 (Apple's small guide)
  2. 处理从 App Store 通过 HTTP POST 发送的 JSON 对象并验证最新的收据。
  3. Update/save 数据到您的数据库。
  4. 响应 200 状态代码以报告成功。

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

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