5

根据 Apple In App Purchase Programming Guide:

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

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

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

4

2 回答 2

3

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

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

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

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

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

于 2011-04-09T19:26:00.073 回答
0

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

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

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

于 2011-03-17T21:58:36.127 回答