13

AppStoreは、自動更新可能なサブスクリプションを自動更新するときにトランザクションを送信しますか?もしそうなら、それがオブザーバーとして設定されている場合、アプリが次にロードするときにアプリによって確実に検出されますか?

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

新しい自動更新されたトランザクションは、次の呼び出しを行いますか?

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions

transaction.transactionState == SKPaymentTransactionStatePurchased?

もしそうなら、素晴らしい。そうでない場合、これは、自動更新可能なサブスクリプションが以下を使用して有効期限に近づくたびに、すべてのトランザクションを調べる必要があることを意味しますか?

 [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 

ありがとう...

4

1 に答える 1

12

いくつかの調査の後、私は自分の質問に答えて、別の関連する問題を提起することができます. App Store は paymentQueue を呼び出し、トランザクションを送信します。トランザクションは、transactionState==SKPaymentTransactionStatePurchased ではなく、transactionState==SKPaymentTransactionStateRestored でポストされます。

問題は、残念ながらこれが 1 つのデバイスにしか投稿されないことです。2 番目のデバイスは投稿を取得しません。したがって、自動更新を検出するには、または自動更新の欠如を検出してデバイスの継続的なサブスクリプションを拒否するには、restoreCompletedTransaction または「最後のトランザクションを含む 64 ビットでエンコードされた JSON を http で投稿する」を実行する必要があります。前者の場合、ユーザーはパスワードを入力する必要があります。それは邪魔です。後者の場合、多くの追加コーディングが必要です。だから、私の質問は...なぜStoreKitにコマンドがないのですか:

(存在しません) - [[SKPaymentQueue defaultQueue] restoreAttachedTransactions:(NSArray *)transactions];

このコマンドは、restoreCompletedtRansactions と同じように流れますが、関連付けられたトランザクションのみを復元し、最も重要なこととして、ユーザーによるログインは必要ありません。これには、「最後のトランザクションを含む 64 ビットでエンコードされた JSON を http ポストする」と同じセキュリティ保護があり、アプリ内購入プロセス全体を Web ポスト コードを必要とせずに StoreKit で実行できます。

これがあなたにとって理にかなっている場合は、これをアップルに届ける方法を提案してください....ありがとう。

于 2011-04-09T19:20:55.800 に答える