IAPを試してみた」という記事がありましたが、今回は実際に導入してみた事例を紹介します。1.15.0ドキュメントiOSAndroidUnityIAPスクリプトリファレンス購入完了までの流れ初期化まずUntiyIAPを初期化する必要があります。builder);初期化結果によりIStoreListenerの以下が呼ばれます。完了待ちすると進行不能になる可能性があるので注意が必要です。未処理のトランザクションがある場合は初期化完了後からIStoreListener経由でトランザクションが流れ始めるのでそのまま購入処理を実装するとユーザ登録前やインゲーム中など予期せぬタイミングで購入処理が走るのでハンドリングする必要があります。初期化完了後のIStoreControllerのproductsにvalidate済みの商品一覧があるのでこちらを使用しました。metadataにそのユーザアカウントでローカライズされた通貨、金額で取得できます。課金実装のフローに関しては、基本的なものと変わりません。基本的な購入フロー(成功)購入要求IStoreControllerからUnityIAP経由でStoreに購入リクエストします。第2引数のpayloadはandroidのレシート内のdeveloperPayloadの内容です。今回はレシート検証用途でuseridを入れています。購入が完了するとIStoreListenerの以下が呼ばれます。cancelなどのストア側での購入失敗}成功時にProcessPurchaseが呼ばれるのでサーバに必要情報をリクエストしアプリケーション側の購入処理に入ります、図6一度Pendingを返却しておきます。サーバ側のレシート検証などは割愛します。アプリケーション側の購入処理がすべて正常に終わったことをストア側に通知します。図10ConfirmPendingPurchaseを呼ばない場合は未処理として購入トランザクションは残ります。購入完了_controller.ConfirmPendingPurchase(product);基本的な購入処理は以上です。課金メニュー表示時に初期化が終わっていなければ商品を表示しない対応を行いました。商品の表示に関しては、世界対応でローカライズ表記が必要な場合を考慮し、ゲームサーバのMasterDataからの表示はしませんでした。1.6.0を使用していました。テスト時、プラットフォーム側からの「このApp内課金はすでに購入済みです」エラーが出る際にOnPurchaseFailedが呼ばれない不具合がありました。購入要求後、アプリ側はローディング待ち表示でユーザの操作を制御していたため、進行不能になっていました。この問題はUnityIAPのversion1.11.0のリリースにて修正され正常にOnPurchaseFailedが呼ばれ解消されました。この後、テスト・リリース後にOnPurchaseFailed呼ばれない問題は起きていません。最終的にどうにかなったので使えなくないっといった感想です。ネイティブコードを書かなくていいのでコスト面では楽ですが、すでに実績のあるネイティブプラグインの実装がある場合は、そちらを利用したほうがよいかもしれません。くぼっと!コメントは停止中です。