我已经按照 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
(我需要覆盖吗?)还是其他地方?