5

Apple In App Purchaseプログラミングガイドによると:

App Storeは、サブスクリプションを更新するたびに個別のトランザクションを作成します。アプリケーションが以前の購入を復元すると、StoreKitは各トランザクションをアプリケーションに配信します。

私のアプリサブスクリプションがクライアント側のみ(サーバーコンポーネントなし)であると想像してみましょう。その後の更新が請求されたことを確認する最も簡単な方法は、毎月以前の購入を復元することのようです。

ただし、これにより、電話をかけるたびにユーザーのiTunesパスワードプロンプトがポップアップ表示され、restoreCompletedTransactionsユーザーエクスペリエンスが悪いように見えます。サーバーレシート検証コードを(新しい「共有シークレット」とともに)使用する唯一の手段はありますか?

4

2 に答える 2

3

App StoreはpaymentQueueを呼び出し、自動更新するたびにトランザクションを投稿します。トランザクションは、transaction.transactionState==SKPaymentTransactionStateRestoredで転記されます。

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

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

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

これがあなたにとって理にかなっているなら、これをAppleに届ける方法を提案してください....ありがとう。

于 2011-04-09T19:26:00.073 に答える
0

サーバーコンポーネントがない場合、この情報を保存できる場所はローカルファイル/データベース/構成のみです。

restoreCompletedTransactionsオプションは、ローカルデータベースに問題がある場合に使用できます。詳細設定パネルのどこかにボタンを配置して、以前のすべてのトランザクションを復元する必要があります。

したがって、ローカルに保存するデータを信頼する必要があります。通常、これはローカルファイルシステムを変更できないため安全です(ジェイルブレイクしない限り)。そのようなユーザーを信頼したくない場合は、オプションで暗号化できます...

于 2011-03-17T21:58:36.127 に答える