Iphone 恢复已完成的事务是否已损坏?

Iphone 恢复已完成的事务是否已损坏?,iphone,in-app-purchase,Iphone,In App Purchase,SDK 4.3中的restoreCompletedTransactions是否已中断 我正在尝试恢复我的自动续费订阅。它不会导致对updatedTransactions的回调。这是我的密码 { .... [appDelegate.inapp loadStore]; [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; .... } 期待对updatedTransactions进行回调,但不接收它 - (voi

SDK 4.3中的restoreCompletedTransactions是否已中断

我正在尝试恢复我的自动续费订阅。它不会导致对updatedTransactions的回调。这是我的密码

 {
 ....
 [appDelegate.inapp loadStore];

 [[SKPaymentQueue defaultQueue]  restoreCompletedTransactions];
 ....
 }
期待对updatedTransactions进行回调,但不接收它

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
     NSLog(@"IN updatedTransactions,  transaction.transactionState");

    for (SKPaymentTransaction *transaction in transactions)
    {

        switch (transaction.transactionState)
        {
            ...
            ...
            case SKPaymentTransactionStateRestored:
            NSLog(@"IN updatedTransactions,  SKPaymentTransactionStateRestored");
            [self restoreTransaction:transaction];
            break;

        }
    }
}
但我最终还是接到了这个电话

-(void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {
}

我能够绕过这个问题,但这很奇怪。在我的测试设备上,我被iTunes窃听,无法登录到多个测试用户帐户。我通常只是点击“取消”,然后用我想要恢复的帐户测试我的恢复。这一次,我决定为其他恼人的登录框输入密码。它工作了,下次我重新启动我的应用程序并点击restore时,它没有让我登录到其他测试帐户,只是我正在测试的那个帐户。我继续恢复,它确实恢复了我想看的东西

我说我们正在经历愚蠢的沙箱问题,而且我们也知道苹果已经改变了应用程序的购买方式。继续玩弄它,你会解决问题的


希望这对您有所帮助。

如果您正在获得PaymentQueueRestoreCompletedTransactions Finished,则不需要updatedTransactions回调。“队列”中有一个事务列表,您可以循环这些事务

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
    for (SKPaymentTransaction *transaction in queue.transactions) 
        if ([myItem.productID isEqualToString:transaction.payment.productIdentifier])
            myItem.purchased = YES;
}
如果您在沙箱环境中进行测试,并且您的测试用户已中断,则仍可能发生这种情况。在中创建新的测试用户,然后重试

现在还不完全清楚是什么让测试用户变坏;据我所知,在非沙箱环境中使用它们一次可以做到这一点,但也可能有其他原因


(1) Xcode 4.3.1,iOS SDK 5.1

确保在使用
[[SKPaymentQueue defaultQueue]restoreCompletedTransactions]之前添加观察者

您的代码应该类似于:

[[SKPaymentQueue defaultQueue]addTransactionObserver:self];

[[SKPaymentQueue defaultQueue]恢复完成的事务]

无法还原产品耗材

产品非消耗性可以恢复


检查您的产品是否为非耗材类型,确保Xcode中的内部版本号没有空格。例如“1.0测试版”。如果空间已更新,则不会调用Transactions。此外,收据验证可能会失败。

此处未提及的另外两点:

  • 如果您使用的是Firebase请确保在初始化Firebase之前添加一个观察者
  • 确保在处理购买时调用finishTransaction方法。您将无法还原未完成的事务

  • 苹果又回到了我的票上。这是4.3.1中的一个bug。看起来他们现在已经解决了。在iOS 5.0中仍然面临相同的问题在iOS 6和iOS 7中仍然面临相同的问题。来吧,苹果。输入所有为meThis工作的测试用户的密码来自苹果的文档。“此方法在支付队列处理完所有可恢复的交易后调用。您的应用程序无需在此方法中执行任何操作。”。我也觉得这是iOS中的一个bug,但我在iOS 5.0中遇到了它,所以我不知道为什么okgo在上面的回答中说它是固定的。这是固定的吗?我也遇到了同样的问题,我在任何地方都找不到解决方案。我遇到过很多“失败的测试用户”(已经创建了400多个沙盒文本用户)。我看不出是什么打破了它们,但我还没有使用测试用户购买“prod”应用程序。加油,谢谢。那些测试用户很微妙——在测试过程中创建增量测试用户已经成为我的测试流程。哎呀!我的测试用户也“变坏了”…这是一个非常小的样本,但我的应用程序在通过苹果的审查后似乎变坏了…可能相关?哇-这是另一个“坏”测试用户的受害者。我怀疑您是否尝试在系统首选项中设置该帐户,并继续验证它是否为实际帐户(信用卡等),这将使其变糟。我如何确定我的测试用户是否已损坏?但此方法中没有
    SKProduct
    参数,
    SKPaymentQueue.default().restorecocompletedtransactions()