【问题标题】:Validate iOS auto-renewable subscriptions from multiple apps验证来自多个应用的​​ iOS 自动更新订阅
【发布时间】:2017-04-25 00:51:05
【问题描述】:

我在一家游戏开发公司工作,该公司每月至少发布一款游戏。对于我们真正的粉丝,我们希望开始为我们的游戏提供订阅服务,这样他们就可以(在任何平台上)玩我们所有的游戏,而无需经常购买。

iOS 的想法是使用应用内自动更新订阅。这会产生我们存储在后端的收据。后端可以验证此收据并向应用程序提供有关用户订阅的信息。 该系统将解决很多问题:您可以在 1 个游戏中订阅,并在您喜欢的任何设备上玩所有游戏。

但是现在我们遇到了问题:一个月后收据不再有效,我们需要在 iTunes 商店中查看用户是否仍有有效订阅。

我的第一个想法是使用“latest_receipt_info”字段来获取最新收据并进行验证。但根据文档,此功能应仅用于 iOS 6 收据:

"仅返回 iOS 6 样式的自动更新交易收据 订阅。”

来源: https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-

尽管我实际上仍然可以在我的全新 iOS 10 收据中使用此字段,但我认为使用它并不明智,因为它已被弃用。

(另一个告诉你不应该再使用它的消息来源:https://forums.developer.apple.com/message/156580#156580

Apple 建议的解决方案是在应用程序中实现一个 SKPaymentTransactionObserver。这将在可用时检索最新的收据,并将其发送到后端。尽管这远非理想,但这可以工作......但是:

这意味着应用程序必须处于活动状态才能检索最新收据。在我们的例子中,用户很可能在 app1 中订阅,几天后下载了 app2、3 和 4,但再也没有使用 app1。所以在这种情况下,将永远不会获取最新的收据(因为只有 app1 的观察者可以访问收据)

为了解决这个问题,我们应该能够从我们订阅组中的任何应用程序中获取此订阅的收据。但是根据苹果网站 (https://developer.apple.com/app-store/subscriptions/) 上的文档,您只能从 1 个应用程序访问订阅,并且您必须自己完成多个应用程序的事情:

您可以提供自动更新 订阅以访问您投资组合中的多个应用程序。每个应用程序必须 被批准使用可自动更新的应用内购买,并且必须是 在 App Store 上以相同的开发者名称发布。

在 iTunes Connect 中,您需要设置单独且等效的 多应用程序中提供的每个应用程序中的自动更新应用程序内购买 订阅,以便用户可以从任何应用程序订阅。为了避免用户 为同一产品多次支付,您有责任 在显示之前验证他们是其中一个应用程序的订阅者 任何订阅选项。为此,请考虑维护一个帐户 用户在其中创建您的企业帐户的管理系统 登录每个应用程序。

那么有没有什么方法可以做我们想做的事,而不是强迫用户回到他每个月购买订阅的应用程序?

【问题讨论】:

  • 我删除了我的答案,因为在检查了实际收据后,它根本不正确。但是,latest_receipt_info 始终显示订阅,即使收据不是 iOS 6 样式。不知道发生了什么,你能否依赖它,有一点很清楚:Apple 在验证订阅方面搞得一团糟。
  • Latest_receipt_info 正是我所需要的,但在包括苹果官方开发者论坛在内的几个论坛上,都提到不再使用它,因为它可能已被弃用。但是......这种弃用不是 100% 确定的,Apple 拒绝对此给出明确的答案。
  • @SanderAgricola:一个有点不合时宜的问题,如果有多个应用程序,一个特定应用程序中的收据是否包含其他应用程序中的购买信息?

标签: ios in-app-purchase subscription


【解决方案1】:

在上一次 WWDC 上,我们去了 StoreKit 实验室,并亲自询问了 StoreKit 的布道者。我们被告知,iTunes validateReceipt 端点返回的“latest_receipt_info”字段正是我们应该用来检查订阅是否续订的。 这不会在不久的将来被弃用,但他们确实计划添加一些服务器到服务器的通信来解决我们遇到的一些问题:

  1. 您的服务器将能够从 Apple 收到有关任何订阅续订、取消、降级等的通知。
  2. 在 validateReceipt 端点返回的 latest_receipt_info 中将添加一些字段,提供诸如订阅到期后是否会续订、用户信用卡收费是否有问题等信息。

来源:

WWDC 2017 Session 303 - What's new in StoreKit
WWDC 2017 Session 305 - Advanced StoreKit

【讨论】:

猜你喜欢
  • 2014-11-10
  • 2021-02-06
  • 1970-01-01
  • 2018-04-24
  • 2016-03-25
  • 2019-08-16
  • 2015-04-28
  • 2016-02-25
  • 2020-08-23
相关资源
最近更新 更多