【问题标题】:Automatic Subscription In-App Purchases: Restoring Subsequent Renewals自动订阅应用内购买:恢复后续续订
【发布时间】:2011-06-29 13:03:33
【问题描述】:

根据 Apple In App Purchase Programming Guide:

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

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

但是,每次拨打restoreCompletedTransactions 时都会弹出用户的iTunes 密码提示,这似乎是糟糕的用户体验。是使用服务器收据验证码(连同新的“共享密钥”)的唯一途径吗?

【问题讨论】:

    标签: cocoa-touch ios in-app-purchase subscription


    【解决方案1】:

    App Store 调用 paymentQueue 并在每次自动更新时发布交易。交易通过 transaction.transactionState==SKPaymentTransactionStateRestored 发布。

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

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

    此命令的流程就像 restoreCompletedTransactions 一样,但它只会恢复附加的事务,最重要的是,它不需要用户登录。它具有与“http 发布包含最后交易的 64 位编码 JSON”相同的安全保护,并且它允许在 StoreKit 中完成整个应用内购买过程,而不需要网络发布代码。

    如果这对您有意义,请建议如何将其发送给 Apple....谢谢。

    【讨论】:

    • 好主意。我希望苹果会允许它。
    【解决方案2】:

    如果您没有服务器组件,您可以存储此信息的唯一位置是在本地文件/数据库/配置中

    restoreCompletedTransactions 选项用于当您的本地数据库出现问题时,您应该在高级设置面板的某处放置一个按钮以恢复所有以前的事务。

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

    【讨论】:

    • 感谢您的回答。但是,它并不是真正特定于订阅的。这只是一般通过 StoreKit 进行的购买。
    猜你喜欢
    • 2017-10-29
    • 1970-01-01
    • 2018-06-01
    • 2016-01-25
    • 2016-10-23
    • 2020-04-06
    • 2018-02-17
    • 2015-07-25
    • 1970-01-01
    相关资源
    最近更新 更多