首页 文章

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

提问于
浏览
8

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

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

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

1 回答

  • 1

    在上一届WWDC上,我们去了StoreKit实验室并亲自向StoreKit传播者询问了这一点 . 我们被告知iTunes validateReceipt endpoints 返回的'latest_receipt_info'字段正是我们想要用来检查订阅是否被续订的内容 . 这不会在不久的将来被弃用,但他们确实计划添加一些服务器到服务器的通信,以解决我们遇到的一些问题:

    • 您的服务器将能够收到Apple关于任何订阅续订,取消,降级等的通知 .

    • 在validateReceipt endpoints 返回的latest_receipt_info中,将添加几个字段,提供的信息包括订阅是否会在当前订阅过期后续订,是否在向用户的信用卡收费时出现问题等 .

    资料来源:

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

相关问题