首页 文章

自动订阅应用内购买:恢复后续续订

提问于
浏览
5

根据Apple In App Purchase编程指南:

每次续订订阅时,App Store都会创建一个单独的事务 . 当您的应用程序恢复以前的购买时,Store Kit会将每笔交易交付给您的应用程序 .

让我们假设我的应用订阅仅限客户端(没有服务器组件) . 验证后续续费的最简单方法似乎是每月恢复以前的购买 .

However ,每次调用 restoreCompletedTransactions 时都会弹出用户的iTunes密码提示,这似乎是糟糕的用户体验 . 是使用服务器收据验证码(以及新的"shared secret")的唯一办法吗?

2 回答

  • 0

    App Store会在每次自动续订时调用paymentQueue并发布交易 . 该事务使用transaction.transactionState == SKPaymentTransactionStateRestored发布 .

    问题是,不幸的是,这只会发布到一个设备上 . 第二个设备无法发布 . 因此,要检测自动续订,或者更确切地说检测缺少自动续订并拒绝任何设备继续订阅,您必须执行restoreCompletedTransaction或“http发布包含最后一个事务的64位编码JSON” . 如果是fomer,用户需要提供密码;正如你所指出的,这是侵入性的 . 如果是后者,则需要许多额外的编码 . 所以,我在回答你的问题时的问题是......为什么StoreKit没有命令:

    (不存在) - [[SKPaymentQueue defaultQueue] restoreAttachedTransactions:(NSArray *)transactions];

    此命令将像restoreCompletedTransactions一样流动,但它只会恢复附加的事务,最重要的是,它不需要用户登录 . 它具有与“http发布包含最后一个事务的64位编码JSON”相同的安全保护,并且它允许整个In App Purchase过程在StoreKit中完成,而不是需要Web发布代码 .

    如果这对你有意义,请建议如何把它送到Apple ....谢谢 .

  • 3

    如果没有服务器组件,则可以存储此信息的唯一位置是本地文件/ database / config

    restoreCompletedTransactions选项适用于本地数据库出现问题的情况,您应该在高级设置面板上的某个位置放置一个按钮以恢复之前的所有事务 .

    因此,您必须信任本地存储的数据 . 通常,这是安全的,因为您无法更改本地文件系统(除非您越狱) . 如果您不想信任这样的用户,您可以选择加密它...

相关问题