嗨,我需要在 Inapp-Purchase 中实现恢复功能,为此制作了一个调用方法的按钮“恢复”

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

它给了我一个弹出来输入苹果 id 的密码。然后没有任何 react 。

我在某个地方读到它叫
- (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;

        }
    }
}

但问题是上述方法既没有调用 this
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue

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

我还包括了所需的协议(protocol),

有人可以帮助我为什么这些委托(delegate)方法不调用还原过程。
我正在尝试使用测试帐户。

最佳答案

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

如果您在 UIViewController 中编写了此代码,请尝试将其添加到您的 viewDidLoad 中:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

viewDidDisappear 中:
[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];

10-08 05:42