在应用程序购买 - 没有购买恢复

时间:2014-08-17 20:08:17

标签: ios objective-c in-app-purchase

我试图弄清楚当用户尝试恢复In App Purchase但是没有购买时,我是否收到了回复消息。

现在,只要用户点按restoreButton,我就会停用restoreButton

- (IBAction)purchaseRestore:(id)sender {
    NSLog(@"4 IBAction Purchase Restore Method: start");
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    [[SKPaymentQueue defaultQueue]restoreCompletedTransactions];
    NSLog(@"4 Purchase Restore: SKPayment Queue two lines... log in user");
    restoreButton.enabled = NO;
    NSLog(@"4 Restore button enabled: No");
}

因此,如果他们点击restoreButton,并且无法恢复,那么restoreButton只会保持灰色。

我想做UIAlert之类的事情或更改restoreButton文字,如果碰巧说“#34};你没有任何要恢复的项目&#34 ;但是我想我需要从Apple那里得到一些消息说“没有要恢复的项目”#34;所以我可以解雇那些代码。

如果需要,请点击我的updatedTransactions代码:

case SKPaymentTransactionStateRestored:

                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                NSLog(@"5 Finish Transaction");

                restoreButton.hidden = YES;
                NSLog(@"5 restore button hidden: Yes");

                [self showButtonThree];
                NSLog(@"5 Show Button Three");

                NSLog(@"5 Restored: End");

                break;

有什么想法吗?谢谢!

更新

试过这个:

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {
    NSLog(@"Completed Transactions Finished");
    UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:
                              @"Restored succesfully" message:nil delegate:
                              self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
    [alertView show];
}

但是,是否存在要恢复的交易。我曾经假设,如果没有可以恢复的交易,这将会被调用,但有意义的是它不会:

-(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error {
    NSLog(@"Completed Transactions Failed with Error");
    UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:
                              @"Not restored succesfully" message:nil delegate:
                              self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
    [alertView show];
}

1 个答案:

答案 0 :(得分:2)

来自restoreCompletedTransactions

的官方Apple文档
  

交付交易后,支付队列调用   观察者的paymentQueueRestoreCompletedTransactionsFinished:方法。   如果在恢复事务时发生错误,观察者将会   通过它通知   paymentQueue:restoreCompletedTransactionsFailedWithError:方法。