自动续订订阅在自动续订时是不是会发送 SKPaymentTransactionStatePurchased 交易?

Posted

技术标签:

【中文标题】自动续订订阅在自动续订时是不是会发送 SKPaymentTransactionStatePurchased 交易?【英文标题】:Do auto-renewable subscriptions send an SKPaymentTransactionStatePurchased transaction when they auto-renew?自动续订订阅在自动续订时是否会发送 SKPaymentTransactionStatePurchased 交易? 【发布时间】:2011-07-20 18:16:23 【问题描述】:

AppStore 在自动续订自动续订订阅时会发送交易吗?如果是这样,如果应用程序将自己设置为观察者,它是否可以在应用程序下次加载时可靠地检测到:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

新的自动更新交易是否会调用:

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions

使用 transaction.transactionState==SKPaymentTransactionStatePurchased?

如果是这样,那就太好了。如果不是,这是否意味着您必须在每次自动续订订阅即将到期时检查所有交易:

 [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 

谢谢...

【问题讨论】:

【参考方案1】:

经过一些研究,我可以回答我自己的问题并提出另一个相关问题。 App Store 调用 paymentQueue 并发布交易。交易通过 transaction.transactionState==SKPaymentTransactionStateRestored 发布, 不是 transaction.transactionState==SKPaymentTransactionStatePurchased。

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

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

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

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

【讨论】:

首先感谢您为我澄清这一点。找了半个小时左右。为什么苹果公司记录的如此糟糕(根本没有)?!也许它在某个地方,但不在系统指南“自动更新订阅”中,这对我来说是合乎逻辑的地方?!? 其次,我明白你的意思,但也许你的想法有缺陷?在第二台设备上,您要从哪里获取参数“事务”以发送到您的愿望 api?如果没有首先调用 paymentQueue,您还不知道新交易是什么。您的建议(我认为?)充其量只能用于恢复以前“已知”购买的一部分。但即便如此,期望用户必须输入他/她的密码也是合理的。没有? 我们这样做的方式(至少到目前为止对于消耗品购买而言)是为用户提供“选项”(非常重要 - 可选!)在我们的网站上注册。这样,在第二台设备上,我们已经知道订阅已续订,并且该应用可以继续并(提供)下载最新的问题。 第三,有了报亭,这一切都将成为历史! :-)

以上是关于自动续订订阅在自动续订时是不是会发送 SKPaymentTransactionStatePurchased 交易?的主要内容,如果未能解决你的问题,请参考以下文章

恢复已删除的自动续订订阅

iOS收据验证 - 自动续订订阅

如何处理自动续订重新订阅?

验证服务器上的自动续订订阅收据

使用自动续订订阅的应用是不是需要 Apple 应用内购买?

自动续订订阅错误