購入が完了するときに、ストアリスナーの ProcessPurchase 関数が呼び出されます。アプリケーションは、ユーザーの購入に関するすべての処理を実行する必要があります。例えば、ローカルコンテンツのロックを解除する、レシートをサーバーに送信してサーバー側のゲームモデルを更新する、などです。
戻り値は、課金処理が終了したかどうかを返します。
| 結果 | 説明 |
|---|---|
| PurchaseProcessingResult.Complete | 購入処理が終了し、再度通知する必要はありません。 |
| PurchaseProcessingResult.Pending | まだ購入処理中で、IStoreController の ConfirmPendingPurchase 関数が呼び出されない限り、次にアプリケーションを起動したときに ProcessPurchase がもう一度呼び出されます。 |
ProcessPurchase は、初期化が成功した後のどこかのタイミングで呼び出されます。ProcessPurchase ハンドラーの実行中にアプリがクラッシュした場合は、Unity IAP が次に初期化されるときにこのハンドラがもう一度呼び出されるため、独自に重複排除機能を実装することをお勧めします。
Unity IAP では、ネットワークの停止やアプリケーションのクラッシュが発生した場合でも、購入が確実に行われたことを確認するために明示的な承認が必要です。アプリケーションがオフラインのときに行われた購入は、次に初期化するときにアプリケーションに送信されます。
PurchaseProcessingResult.Complete が返されると、Unity IAP はトランザクションを即座に終了します (下図参照)。
消費型プロダクトを販売してサーバーから処理を行っている場合 (オンラインゲームで金貨を提供するときなど) は、PurchaseProcessingResult.Complete を返してはいけません。
`PurchaseProcessingResult.Complete` を返してしまうと、クラウドで保存される前にアプリケーションがアンインストールされた場合に、消費型購入品が失われてしまうことがあります。
消費型購入処理をクラウドに保存する場合は PurchaseProcessingResult.Pending を返す必要があり、購入処理が問題なく完了した場合のみ ConfirmPendingPurchase を呼び出します。
Pending を返すとき場合、Unity IAP は、処理が確認されるまで対象ストアでトランザクションを終了しないで維持し、この状態にある間はユーザーがアプリケーションを再インストールしても消費型の購入品が失われないようにします。