2016-12-14 15 views
0

アプリ内購入でiOS用のXamarinアプリがあります。テスト中、私は1つの消耗品を購入しましたが、転記を完了しませんでした(エラー時にクラッシュしました)。今、私はこの製品を購入することができますが、代わりにそれを復元し、 "製品は無料で復元されました"というメッセージを表示するアプリを再インストールした場合。iOS:以前購入したアプリ内購入商品は購入時に復元されますが、取引は更新されません

この動作は予想されますが、キューリスナーのUpdatedTransactionsは起動されませんでした。私はStoreKit.SKPaymentQueue.DefaultQueue.Transactionsを介してキューを直接チェックすることができましたが、ユーザインタラクションがいつ終了するかを知る必要があります(ユーザはそのメッセージダイアログでOKを押します)。しかし、リスナーメソッドは起動されません。 アップルのドキュメントからわかるように、この後にトランザクションの更新が必要です。購入しようとする前に解雇された可能性があります。しかし、購入前にキューを手動でチェックすべきですか?

答えて

3

私はXamarinを使用していませんが、StoreKitはiOS機能をサポートしているため、Xamarinでは動作しません。このイベントは早期に解雇されなければなりません。トランザクションオブザーバ([[SKPaymentQueue defaultQueue] addTransactionObserver:self])を追加すると、保留中のすべてのトランザクションで更新コールバックを受信します。これがアプリの起動時に完了していれば、購入画面に達するまでにトランザクションが更新されます。私にとっては、これはIAP開発の最も難しい部分です。アプリケーションの開始時と、いつでもコールバックができるすべての画面でそれらを処理する必要があるためです。

この保留中の取引はトランザクションリストに複数回表示されることがあります(私は主に非消耗品を使用していたため、保留中の取引をすべて終了することなくアプリを再起動するたびに新しい取引が追加されます)。その目的のために、私はコンポーネントがアプリケーションの開始直後にトランザクションオブザーバとして追加され、更新されたトランザクションをリッスンし、後で使用するためにインスタンス変数に格納しました。新しい購入を開始する前に、同じ商品IDの保留中の取引があるかどうかを確認し、それに応じて行動します。

これが役に立ちます。

+0

ありがとう、私は何か類似していると思われる。 Btwはいつでもキューをチェックすることができるので、アプリ起動時にこれを正確に行う必要はありません。少なくともxamarinではSKPaymentQueue.DefaultQueue.Transactionsは常に利用可能であるため、追加する必要はありません。 – Tertium

+0

私は答えを編集しました。再読してください。申し訳ありません:) –

+0

コードを書き換えて後で返信します – Tertium

関連する問題