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