iphone - 应用内购买完成后显示对话

标签 iphone ios cocoa-touch in-app-purchase

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

- (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) 警报需要发布到初始化事务的 View Controller 中。如何使 AppDelegate 与此 View Controller 通信以使其知道事件何时发生?我是否为 AppDelegate 设置委托(delegate)?这对我来说有点有趣......有更好的方法吗?

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

最佳答案

传递通知将是最好的方式。调用支付过程的 View Controller 应该注册通知。

完成交易后,应用程序委托(delegate)将发布 Controller 将收到的通知,并显示相应的消息。

关于iphone - 应用内购买完成后显示对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17502861/

相关文章:

ios - 如何保护 iOS bundle 文件,如 plist、图像、sqlite、媒体文件

iphone - 适用于 iOS SDK 2.0 的 Google Analytics - 如何处理应用程序委托(delegate)中的 "tracker"变量?

iphone - 使用Core Data时的模型实例化问题

ios - 将 UITableView 与不同的 View 模型类型重用

swift - 如何将 SceneKit 节点更新为 'automatically' 以反射(reflect)底层模型?

ios - 以编程方式创建的 UILabel 的宽度

iphone - 如何了解 iPhone 应用程序的成功程度?

ios - 找出 swift 协议(protocol)的所有实现者的名字

ios - 最后一个单元格不断出现在 myUITableView 上

objective-c - 像这样的 UITabBar