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

2) メッセージはどこに送信しますか? finishTransactionそれは(オーバーライドする必要がありますか?)または他の場所にあるべきですか?

4

1 に答える 1

1

通知を渡すことが最善の方法です。支払い手続きを呼び出すView Controllerは、通知のために登録する必要があります。

トランザクションが完了すると、アプリ デリゲートはコントローラーが受け取る通知を投稿し、適切なメッセージを表示します。

于 2013-07-06T12:18:48.047 に答える