我已经按照 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/