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

Sur*_*ore 7 objective-c storekit in-app-purchase ios

嗨我需要在Inapp-Purchase中实现恢复功能,为此创建了一个"恢复"按钮,它是调用方法

-(void)restorePurchasedProductsWithProductId:(NSString*)prodID
{
    _productIdsArray = [[NSMutableArray alloc] init];
    productID = [prodID retain];
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}
Run Code Online (Sandbox Code Playgroud)

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

我读到了它所调用的地方

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
Run Code Online (Sandbox Code Playgroud)

所以我喜欢这样

- (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;

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
Run Code Online (Sandbox Code Playgroud)

也不

-(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
Run Code Online (Sandbox Code Playgroud)

我还包括了所需的协议,

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

Bar*_*che 12

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

如果您已将此代码编写为a UIViewController,请尝试在以下位置添加此代码viewDidLoad:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
Run Code Online (Sandbox Code Playgroud)

并在viewDidDisappear:

[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
Run Code Online (Sandbox Code Playgroud)