ios – paymentQueue:(SKPaymentQueue *)队列updatedTransactions :( NSArray *)事务在restoreCompletedTransactions时不被调用

嗨我需要在Inapp-Purchase中实现恢复功能,为此创建了一个“恢复”按钮,它是调用方法
-(void)restorePurchasedProductsWithProductId:(NSString*)prodID
{
    _productIdsArray = [[NSMutableArray alloc] init];
    productID = [prodID retain];
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}

它给了我一个输入苹果id密码的弹出窗口.在这之后没有任何反应.

我读到了它所调用的地方

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

所以我喜欢这样

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    NSLog(@"paymentQueue");
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased:
                [self completeTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed:
                [self failedTransaction:transaction];
                break;
            case SKPaymentTransactionStateRestored:
                NSLog(@"restored");
                [self restoreTransaction:transaction];
                break;
            default:
                break;

        }
    }
}

但问题是上面的方法并没有调用这个

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue

也不

-(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error

我还包括了所需的协议,

有些正文可以帮助我为什么这些委托方法不会要求恢复过程.
我正在尝试使用测试帐户.

解决方法

您需要确保实现paymentQueueRestoreCompletedTransactionsFinished的类:和paymentQueue:restoreCompletedTransactionsFailedWithError:被注册为您的支付队列的观察者.

如果您已在UIViewController中编写此代码,请尝试在viewDidLoad中添加此代码:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

并在viewDidDisappear中:

[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...