从多个应用程序验证iOS自动续订订阅

San*_*ola 10 subscription in-app-purchase ios

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

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中,您需要在多应用订阅中提供的每个应用中设置单独且等效的自动续订应用内购买,以便用户可以从任何应用订阅.为避免用户多次为同一产品付费,您有责任在显示任何订阅选项之前验证他们是其中一个应用的订阅者.要执行此操作,请考虑维护一个帐户管理系统,用户可以在该系统中为您的公司创建帐户以登录每个应用.

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

Dan*_*ani 2

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

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

资料来源:

WWDC 2017 会议 303 - StoreKit 的新增功能
WWDC 2017 会议 305 - 高级 StoreKit