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) アラートは、トランザクションが初期化される View Controller にポストされる必要があります。AppDelegate
このView Controllerと通信して、イベントが発生したことを知らせるにはどうすればよいですか? のデリゲートを設定しAppDelegate
ますか? これは私にはちょっとおかしいようです...もっと良い方法はありますか?
2) メッセージはどこに送信しますか? finishTransaction
それは(オーバーライドする必要がありますか?)または他の場所にあるべきですか?