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

購入品をクラウドに保存
消費型の購入品をクラウドに保存する場合は、PurchaseProcessingResult.Pending を返し、購入が問題なく完了した場合にのみ ConfirmPendingPurchase を呼び出す 必要があります。
Pending を返す際、Unity IAP は処理が確認されるまで基礎となるストアでトランザクションをオープンの状態に維持し、消費型の購入品がこの状態にある間にユーザーがアプリケーションを再インストールしても、この購入品が失われないようにします。
