0

我已经按照 Apple 推荐的方式SKPaymentTransactionObserver在我的应用程序中实现了:AppDelegate

- (void) completeTransaction: (SKPaymentTransaction *)transaction
{
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:transaction.payment.productIdentifier];
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

- (void) restoreTransaction: (SKPaymentTransaction *)transaction
{
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:transaction.payment.productIdentifier];
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

- (void) failedTransaction: (SKPaymentTransaction *)transaction
{
    if (transaction.error.code != SKErrorPaymentCancelled)
    {
        // Optionally, display an error here.
    }

    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
    self.products = response.products;
}

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

我希望我的应用程序在发生以下情况时向用户发送对话消息:购买成功,购买失败,恢复成功,恢复失败。我在思考如何通过我的设计设置来做到这一点时遇到了一些麻烦。我有一些问题:

1)警报需要在初始化事务的视图控制器中发布。如何AppDelegate与此视图控制器进行通信以使其知道事件何时发生?我是否设置了一个代表AppDelegate?这对我来说似乎有点有趣......有更好的方法吗?

2) 我在哪里发送消息?它应该在finishTransaction(我需要覆盖吗?)还是其他地方?

4

1 回答 1

1

传递通知将是最好的方法。调用支付过程的视图控制器应该注册通知。

事务完成后,应用程序委托将发布控制器将收到的通知,并显示相应的消息。

于 2013-07-06T12:18:48.047 回答