11

我们正在为 iPhone 开发一款 iOS 应用程序,该应用程序将免费提供功能,并且应用程序将具有高级功能,其中 4 个应用程序内购买自动更新订阅选项如下:

  • 单月订阅
  • 单年订阅
  • 家庭每月订阅
  • 家庭年度订阅

我们将在应用程序中拥有一个商店屏幕,它可以选择订阅我们的应用程序提供的各种订阅。

我们发现用户可以转到设备设置并管理他们的应用内购买订阅。

我们还计划提供选项,例如用户可以从一个订阅升级到另一个订阅,用户还应该能够降级他们的订阅,这将是所有相同的选项,反向并回到免费版本可能的升级选项:

  • 免费提供任意 4 个订阅选项
  • 单月到单年
  • 单月到家庭月
  • 单身每月到家庭每年
  • 家庭每月到家庭每年

可能的降级选项:

  • 家庭每年到家庭每月
  • 家庭每年到单身每月
  • 家庭月度到单身月度
  • 单年至单月
  • 从任何 4 个订阅选项到免费版本

笔记:

  • 根据 Apple 的说法,我们不能使用 Apple 家庭共享选项来共享应用内购买,因此我们正在应用程序中开发自己的家庭共享选项。(参考: https: //support.apple.com/en-in/HT203046

查询:

  1. 我们对如何在 iOS 应用程序中管理订阅有一些疑问?
  2. 设备设置选项将如何显示我们用于升级和降级的 4 个应用内购买选项,从一个选项到另一个选项?
  3. 作为 iOS 开发人员,我们需要注意哪些事项来恢复自动更新订阅?如果用户尝试在我们的应用程序中使用具有多个用户帐户的 iTunes 帐户进行恢复,我们不清楚可能的情况,我们可以采取哪些预防措施,当用户购买一次订阅并尝试在多个用户帐户上恢复时,苹果允许哪些措施?
  4. Apple 会拒绝使用自动更新订阅选项的自定义家庭共享选项吗?
  5. 如果我们可以使用上述功能,我们最终需要注意哪些苹果不会处理的点?
  6. 如果我们在 iOS 应用程序中使用上述功能,违反苹果指南和应用程序拒绝的可能性是什么?

如果有人可以分享他们的观点或提供一些关于我们应该走的路或者我们是否偏离苹果政策的指导,这将对我们有很大的帮助......您的所有这些反馈将帮助我们获得东西搬过来了。

谢谢

4

1 回答 1

16
  1. 我们对如何在 iOS 应用程序中管理订阅有一些疑问?

因为您使用的是自己的用户管理系统,所以您应该将与数据库中的用户关联的订阅状态保持不变。当用户在应用程序中创建购买时,应用程序应将此收据发送到您的 API,然后 API 将继续对其进行验证

持久化后,将计划进程排入队列以在订阅到期日期运行,以更新记录并无限期地更新,直到到期日期不再是未来。

当用户打开应用以确定其订阅状态时,您的应用应查询您的 API。不要依赖应用中本地的收据,因为您用户的家庭成员设备不会关联此购买。

  1. 设备设置选项将如何显示我们用于升级和降级的 4 个应用内购买选项,从一个选项到另一个选项?

如果 iTunes Connect 中列出的所有产品属于同一“订阅系列”,它们将出现在用户 iTunes 帐户的订阅管理页面中。

当用户在产品之间切换时,将创建一个事务并将一个SKPaymentTransactionStatePurchased事件添加到SKPaymentQueue. 这将是一个新交易,其原始交易标识符与第一次购买来自同一订阅系列的产品的原始交易标识符相同,并且产品标识符反映了新产品。

出于这个原因,您希望您的应用程序中的事务观察器在后台运行以接收任何新事务。收到新交易时,您可以 a) 将整个收据发送到您的 API 或 b) 通知您的 API 已收到新交易并重新验证保留的收据。

使用 (a) 可能会出现问题,因为随着时间的推移,收据会变得越来越大,每次都需要用户提供更多带宽。

使用 (b) 也有它的缺点,因为您可能会遇到诸如用户切换 iTunes 帐户等边缘情况的麻烦。对此的解决方案是将应用程序identifierForVendor与收据一起存储,如果不匹配,则要求应用程序发送整个收据。大多数情况下,您只会通知 API 发生了交易,并且在标识符不匹配的少数情况下,它会发送新的收据。

  1. 作为 iOS 开发人员,我们需要注意哪些事项来恢复自动更新订阅?如果用户尝试在我们的应用程序中使用具有多个用户帐户的 iTunes 帐户进行恢复,我们不清楚可能的情况,我们可以采取哪些预防措施,当用户购买一次订阅并尝试在多个用户帐户上恢复时,苹果允许哪些措施?

恢复时,将创建一个具有新事务 ID 的新事务,但原始事务 ID 将相同。如果您在数据库中创建交易表,您可以确保交易及其原始交易只与单个用户相关联,从而防止用户在其他设备上恢复购买并获得对订阅的访问权限。

恢复的交易将被推送到队列中SKPaymentTransactionStateRestored,所以当这种情况发生时,我建议将收据发送到您的 API 并正常处理收据;将任何新交易与原始用户相关联。

  1. Apple 会拒绝使用自动更新订阅选项的自定义家庭共享选项吗?

我对此表示怀疑,但我不是苹果,所以不要相信我的话。Spotify 有一个类似的方案,称为“ Spotify Family ”,用户可以与家人共享他们的 Spotify 帐户,但不确定是否为他们的 iTunes 应用启用了此功能。

  1. 如果我们可以使用上述功能,我们最终需要注意哪些苹果不会处理的点?
  1. 您需要具有用户管理和家庭关联的自己的 API
  2. 您的用户需要在您的应用上登录/注册
  3. 如果家庭用户的父帐户已经购买,您将需要阻止他们购买。
  4. 在数据库中保留收据和 identifierForVendor。
  5. 使用验证 API处理收据验证。
  6. 持久化一个事务表并考虑这个表是自引用的,这样一个事务就可以通过original_transaction_id. 确保transaction_id列是唯一的。
  7. 每次交易到期续订时验证收据。
  1. 如果我们在 iOS 应用程序中使用上述功能,违反苹果指南和应用程序拒绝的可能性是什么?

除了第17.2节外,我在指南中看不到任何内容:

要求用户共享个人信息(例如电子邮件地址和出生日期)才能正常运行的应用程序将被拒绝

我认为这个有点矛盾,因为在17.5中它指出:

包含帐户注册或访问用户现有帐户的应用程序必须包含隐私政策,否则将被拒绝

我想这意味着用户必须能够在不需要注册的情况下使用该应用程序,但我知道很多应用程序的例子就是这样做的。

于 2016-03-09T16:17:24.233 回答