購入処理の扱い。
購入だけでなく、非消費型だったり、継続型だったりすると、Restore(復元)するときのことも考えなくちゃいけない
Sponsor Link
基本は、Queueからの通知への対応
基本的には、以下のコードで購入処理が始まる。
コード
SKPaymentQueueをオブザーブしていると、新しいSKPaymentTransactionが来ると、通知が来る。
1 2 3 4 |
let payment = SKPayment(product: product) SKPaymentQueue.default().add(payment) |
その通知に対応することが、アプリとしては、購入に対応することとなる。
通知の種類
通知が来ると、SKPaymentTransactionは、以下の状態のいずれかになっている。それぞれについて、処理していく必要がある。
- .purchasing
- .deferred
- .purchased
- .failed
- .restored
.purchasing
購入途中の意味なので、することなし、スルーしてOK
.deferred
まだ処理途中なので、スルーしてOK。例えば、子供が購入して親の承認待ちみたいな状態。
.purchased
購入完了した意味なので、アプリとして何かしなければいけないはず。
きちんと処理してキューから取り除くために、SKPaymentQueue.defaults().finishTransaction(transaction)として、通知しなければいけない
.failed
なんらかの理由で失敗したということなので、通知することくらい?
.purchasedと同様に、処理終了したら、キューから取り除く必要があるので、SKPaymentQueue.defaults().finishTransaction(transaction)をコールしなければいけない。
.restored
復元の意味なので、復元処理をします。
Sponsor Link