4

StoreKit ガイドから:

ユーザーが非消費型製品または購入済みの更新可能なサブスクリプションを購入しようとすると、アプリケーションは復元トランザクションではなく、そのアイテムの通常のトランザクションを受け取ります。ただし、ユーザーがその製品に対して再度請求されることはありません。アプリケーションは、これらのトランザクションを元のトランザクションと同じように扱う必要があります。

これは、私が取り組んでいるアプリに大きな問題をもたらします。アプリ内購入による販売のために、パブリッシャーから大量のコンテンツのライセンスを取得しています。このコンテンツの一部を販売する (つまり、ユーザーが支払う) たびに、サーバーがサーバー上の API を呼び出してトランザクションを報告する必要があります。これは会計上の目的であり、最終的には、彼らとの合意に従って、月末に支払う金額を決定するために使用されます.

SO や他の場所で、restoreCompletedTransactions をかなり頻繁に呼び出し、ユーザーが既に購入したものをデバイス上でローカルに理解して、再度購入できないようにすることに関するいくつかの提案を読みました。これは、サーバー側で実装できるはずのもののように思えます。ただし、Apple サーバーから返されるレシートは、StoreKit ガイドで約束されているように、購入と再購入でまったく同じです。

この種の状況で、StoreKit からの支払いコールバックが有効なアカウンティング メカニズムとして信頼できない場合 (「支払われた」対「支払われなかった」)、トランザクション トラフィックに関する他のリアルタイムの洞察を利用できますか? 私たちが協力している発行元が、iTunes Connect から実際の支払った金額を得るために、月末から 45 日待たなければならないと言ったら、満足しないと思います。

4

3 に答える 3

6

私は最近、同じ問題を調べました。私の場合、モバイル アプリ トラッキングを使用して正確な収益追跡を実装し、さまざまな顧客獲得キャンペーンから得られた収益を追跡したいと考えていました。

幸いなことに、それを行う方法があります。SKPaymentTransactionStatePurchasedvs.SKPaymentTransactionStateRestoredは、元のアクション (たとえば、復元を開始したのか、(再) 購入を開始したのか) にのみ依存するため、機能しないことに注意してください。

代わりに機能するのは、復元再購入の対象SKPaymentTransaction.originalTransactionとなるものを確認することです。後者は残念ながら未定義の動作です ( docs )。ただし、nullチェックは十分に公平だと思います。!= nil

もう 1 つのオプションは、トランザクションの transaction-receipt を検証し、返された検証済みの領収書のプロパティが と一致するSKPaymentTransactionStatePurchasedことを確認することです。original_transaction_idtransaction_id

于 2013-06-08T10:02:25.673 に答える
4

残念なことに、現在の iOS バージョン ( 4.3.x ) では、非消耗品の購入と再購入を区別する方法がありません。

状況を緩和するために、次の 2 つのことをお勧めします。

初め

購入が成功したら、product identifier購入した製品NSUserDefaultsの をデバイスの に保存します。その後、すでに購入した製品をユーザーから隠して、再購入の状況に対処できます。

ユーザーが自分のNSUserDefaultsデバイスを同期すると、iTunes によってバックアップされます。そのため、ユーザーが新しいデバイスを入手しても、保存された購入情報が失われることはありません。

2番

レシートデータをデバイスIDとともにサーバーに保存します。レシートの製品 ID とデバイス ID を分析します。

同じ製品 ID とデバイス ID の組み合わせを持つ別のレシートを受け取った場合は、再購入を想定してください。少なくともこれにより、ほとんどの再購入ケースをカバーできます。

通常の iPhone ユーザーが 1 ~ 2 年ごとにデバイスを切り替えると仮定すると、少なくとも再購入のケースのほとんどをカバーでき、Apple が将来これを修正する可能性があります。

于 2011-04-21T11:21:06.150 に答える
1

私は1つの解決策を持っています、

  1. 製品を消耗品として構成します。これで問題は解決します - (このコンテンツの一部を販売するたびに (つまり、ユーザーが支払います))。

  2. 次に、製品購入オプションにロジックを実装する必要があります。ユーザーが製品を購入すると、購入オプションを削除する必要があります。そうしないと、ユーザーがたまたま購入に行き、同じデバイスで同じ製品の現金を失う可能性があります。この目的で NSUserdefaults を使用できます。

ありがとう、

于 2011-07-04T07:52:56.030 に答える