首页 文章

restoreCompletedTransactions坏了吗?

提问于
浏览
19

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 {
}

6 回答

  • 0

    如果您在Sandbox环境和 Test User is broken 中进行测试,这仍然会发生(1) . 在iTunes Connect中创建一个新的测试用户,然后重试 .

    目前还不完全清楚是什么让测试用户变坏了;从我收集到的,在非沙箱环境中使用它们一次可以做到这一点,但也可能有其他原因 .

    (1)Xcode 4.3.1,iOS SDK 5.1

  • 24

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

    你的代码应该是这样的:

    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

  • 3

    我能绕过这个但很奇怪 . 在我的测试设备上,我被iTunes窃听,登录到多个测试用户帐户 . 我通常只是点击取消并使用我想要恢复的帐户测试我的恢复 . 这次我决定输入这些其他恼人的登录框的密码 . 它工作,下次我重新启动我的应用程序并点击恢复它没有错误我登录其他测试帐户,只是我测试的那个 . 我继续进行恢复,它确实恢复了我想要看到的项目 .

    我说有人遇到了愚蠢的沙盒问题,而且我们也知道苹果在应用程序购买方面发生了一些变化 . 继续玩它,你会得到它锻炼 .

    希望这可以帮助你 .

  • 0

    产品 Consumable 无法恢复 .

    产品 Non-Consumable 可以恢复 .

    检查您的产品是否为 Non-Consumable 型 .

  • 3

    如果您收到paymentQueueRestoreCompletedTransactionsFinished,则不应该需要updatedTransactions回调 . “队列”有一个你的交易清单,你可以循环通过这些 .

    - (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
    {
        for (SKPaymentTransaction *transaction in queue.transactions) 
            if ([myItem.productID isEqualToString:transaction.payment.productIdentifier])
                myItem.purchased = YES;
    }
    
  • 5

    确保Xcode中的内部版本号没有空格 . 例如“1.0 Beta” . 使用空格updatedTransactions将不会被调用 . 收据验证也可能失败 .

相关问题