7

嗨,我需要在 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;

        }
    }
}

但问题是上述方法既没有调用 this

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue

也不

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

我还包括了所需的协议,

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

4

2 回答 2

12

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

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

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

并在viewDidDisappear

[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
于 2012-10-08T10:46:41.703 回答
1

我也面临类似的问题;

经过研究和修改,我意识到:

[[SKPaymentQueue defaultQueue] finishTransaction:transaction]

方法不会立即实施。

通常,我检查 transaction.transactionReceipt 并将其发送到我的服务器,毕竟我发送回调以完成交易。最后,我明白了没有立即调用完成事务的问题。当我更改代码时,我的应用程序可以工作。

有趣的是,当我在沙盒环境中测试时,一切正常。然而,在 AppStore 应用程序并没有很好地工作。当我进行此修改时,我的问题就解决了。

于 2014-04-22T11:49:44.167 回答