Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 自动恢复订阅赢得';不能自动清洗_Ios_In App Purchase_Sandbox_Restore - Fatal编程技术网

Ios 自动恢复订阅赢得';不能自动清洗

Ios 自动恢复订阅赢得';不能自动清洗,ios,in-app-purchase,sandbox,restore,Ios,In App Purchase,Sandbox,Restore,对不起,关于自动恢复订阅的第一百万个问题,我不明白。 我已经按照苹果应用程序内购买指南中的描述做了所有事情,但这并没有解决问题 我的问题是我已经创建了可自动恢复的订阅,但它们不会自动恢复 我创建了一个PaymentTransactionObserver类,它实现了SKPaymentTransactionObserver接口。此类将在应用程序启动时作为paymentObserver安装在viewDidLoad:方法中 PaymentTransactionObserver*observer=[[Pa

对不起,关于自动恢复订阅的第一百万个问题,我不明白。 我已经按照苹果应用程序内购买指南中的描述做了所有事情,但这并没有解决问题

我的问题是我已经创建了可自动恢复的订阅,但它们不会自动恢复

我创建了一个PaymentTransactionObserver类,它实现了SKPaymentTransactionObserver接口。此类将在应用程序启动时作为paymentObserver安装在
viewDidLoad:
方法中

PaymentTransactionObserver*observer=[[PaymentTransactionObserver alloc]init]

[[SKPaymentQueue defaultQueue]addTransactionObserver:observer]

在paymenttransactionobserver中,我有paymentQueue:updateTransactions方法:(与Apple文档中的descripbet相同)

  • (void)paymentQueue:(SKPaymentQueue*)队列更新事务:(NSArray*)事务{ 用于(SKPaymentTransaction*交易中的交易){
当我购买一个自动再生产品时,该产品将被成功购买。 但它永远不会自动恢复。我认为,事务观察程序会以某种方式被解除分配,但它不会(否则,调试器会通知我)。我还认为,我确实删除了观察程序,但它永远不会被删除

我使用调试器来确保
updateTransitions:
方法会被调用,但不会被调用。当我购买自动恢复时间为一周的测试产品(在沙盒模式下)时,该方法应该在3分钟后被调用,但不会被调用

我做错了什么

有人能帮忙吗


Br Nic

自动续订仅在应用程序启动时或从后台返回时才会发布到应用程序的购买队列中。请尝试单击“主页”按钮,然后返回到应用程序。

如果订阅是自动续订的,则交易将不会通过paymentQueue:updateTransactions方法。续订仅在应用商店中进行。如果如果要进行测试,则必须:

  • 如果您将收据存储在应用服务器上,请在应用服务器上重新验证收据

  • 在您的iOS客户端上重新验证收据

(http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/VerifyingStoreReceipts/VerifyingStoreReceipts.html#//apple_ref/doc/uid/TP40008267-CH104-SW1)

为了避免在每次启动/激活时测试自动续费,您应该存储订阅期的结束日期,以便在之后测试续费

另见:


然而,沙箱中似乎有一个bug。订阅有时会更新,有时不会。很难测试…

我刚刚在苹果论坛上发布了这个问题,希望很快能得到回复!现在我还创建了一个开发人员支持请求。这个问题似乎还有很多其他问题!但在应用程序运行时,它是否也可以工作g?(好的,在订阅过期之前,你通常不会让你的应用程序运行,但从开发者网站上看,这是一件正常的事情,也是很有帮助的)。苹果的购买指南中有记录吗?我会试试这个,但谢谢你的回复!你会打电话给[[SKPaymentQueue defaultQueue]restoreCompletedTransactions];启动时?@NicTesla No.当应用程序运行时,它也不应该工作。这就是为什么我说它不工作的原因:)查看2011年WWDC视频#510,47:10。@NicTesla,你不应该在启动时调用
restoreCompletedTransactions
,或者响应任何非直接用户交互的事情。它会弹出一个警报g的苹果ID凭据,如果它一直/随机发生,将非常混乱/恼人。好的,谢谢你提供此信息!无论如何,它仍然不起作用,所以我联系了一位苹果开发人员,他们说在几个商店的沙盒模式中有一个bug。你在使用哪个商店?在沙盒中他们刚刚得到更新的si为每个测试用户注册x次,然后停止,因此您必须为此注册一个新的测试用户
    switch (transaction.transactionState) {

        case SKPaymentTransactionStatePurchased: 

            [self completeTransaction:transaction]; 

            break;

        case SKPaymentTransactionStateFailed: 

            [self failedTransaction:transaction]; 

            break;

        case SKPaymentTransactionStateRestored:

            [self restoreTransaction:transaction]; 

            break;

        default:

            break;
    }
}