Unity IAP 5:IAP 4からの変更点と移行方法
Daniel Godley - Unity
Senior Content Marketing Manager
Unity In-App Purchasing(IAP)バージョン5は、IAP 4のインターフェースベースのアーキテクチャを単一のイベント駆動型StoreControllerクラスで置き換えたものです。移行にはコードの変更が必要です。IStoreListenerおよびIDetailedStoreListenerインタフェースとConfigurationBuilderが削除され、初期化は非同期になり、購入はライフサイクルサイクルイベントを通じて処理されます。IAP 5では、ウェブからモバイルへのマネタイズ、カスタム決済プロセッサ(StripeやCodaなど ) 、 およびスタンドアロンのウェブショップも可能になります。
Unity Iap 5について知っておくべきこと
- Unity Iap 5では、IAP 4で必要なIStoreListenerとIDetailedStoreListenerのインターフェイスが削除されています。
- Unity Iap 5のすべての購入ロジックは、1つのクラスを介して実行されます。UnityIAPServices.StoreController ( ) 。購入ライフサイクル全体にわたってイベントを発生させます。
- IAP 4のConfigurationBuilderが削除されます。製品定義は、IDと製品タイプを持つProductDefinitionオブジェクトとしてFetchProducts()に直接渡されます。
- IAP 5では、古い機能IDクラスはStoreSpecificIdsに名称変更されています。
- Unity Iap 5の初期化は非非同期であり、まずawait UnityServices.InitializeAsync ( ) を介してUnity Gaming Servicesを初期化する必要があります。
- IAP 5のAppleレシートは、開発者に届く前にStoreKit 2を通じて自動的に検証されます。google playの検証には、開発者者のGoogleキーが必要であり、IAPパッケージに含まれるツールで難読化されている。
- IAP 5ではiOS 15.0にアップグレードできないデバイス(iPhone 6sより古いデバイス)のStoreKit 1サポートが復活。
- 作業リファレンス実装は、Unity Package Managerで入手できるMinimal Coded IAPサンプル(PaywallManagerスクリプト)というパッケージに同梱されています。

Unity Iap 5では、アーキテクチャの大幅な改良、初期化の構造変更、製品のフェッチワークフローのクリーン化などが行われています。さらに、ダイレクトペイメントプロバイダー(StripeやCodaなど)やウェブショップなど、上級者向けなエコシステム機能への道が拓かれ、販売のターゲットをより絞り、購入収益の共有を大きく保つことができます。Unity Iap 4からIAP 5に移行する場合、またはUnityゲームエンジンで初めてモバイルアプリ内課金を設定する場合、このステップバイステップの内訳は実装ワークフロー全体を対象としています。
建築設計
Unity IAP 4
IStoreListener / IDetailedStoreListener は、固定コールバックを持つインタフェース
Unity IAP 5
ライフサイクルイベントを持つ単一のStoreControllerクラス
ストアID
Unity IAP 4
new IDs()
Unity IAP 5
new StoreSpecificIds()
製品設定
Unity IAP 4
初期化期化前にConfigurationBuilderにパッケージ化された製品
Unity IAP 5
FetchProducts()に直接渡されるProductDefinitionオブジェクトは、いつでも
購入の開始
Unity IAP 4
製品ID文字列で呼び出されます
Unity IAP 5
完全な製品オブジェクトで呼び出されるPurchaseProduct(製品)
買取取扱
Unity IAP 4
プロセスIStoreController経由の購入コールバック
Unity IAP 5
OnPurchasePending(Order)イベント、ConfirmPurchase(pendingOrder)で確認
レシート検証 (Apple)
Unity IAP 4
手動によるクロスプラットフォーム検証
Unity IAP 5
StoreKit 2で事前検証済み
UI購入ハンドラー
Unity IAP 4
製品IDベース
Unity IAP 5
変更なし — 既存のUIハンドラは動作し続ける
Unity IAP 4
Unity IAP 5
建築設計
IStoreListener / IDetailedStoreListener は、固定コールバックを持つインタフェース
ライフサイクルイベントを持つ単一のStoreControllerクラス
ストアID
new IDs()
new StoreSpecificIds()
製品設定
初期化期化前にConfigurationBuilderにパッケージ化された製品
FetchProducts()に直接渡されるProductDefinitionオブジェクトは、いつでも
購入の開始
製品ID文字列で呼び出されます
完全な製品オブジェクトで呼び出されるPurchaseProduct(製品)
買取取扱
プロセスIStoreController経由の購入コールバック
OnPurchasePending(Order)イベント、ConfirmPurchase(pendingOrder)で確認
レシート検証 (Apple)
手動によるクロスプラットフォーム検証
StoreKit 2で事前検証済み
UI購入ハンドラー
製品IDベース
変更なし — 既存のUIハンドラは動作し続ける
Unity Iap 4からIAP 5への移行方法
移行は次の4つのステップに従います。
初期化して接続します。Unity Gaming Servicesを初期化し、StoreControllerを取得し、そのイベントをサブスクライブし、Connect ( ) を呼び出してgoogle playまたはApple App Storeにアクセスします。OnStoreConnectedとOnStoreDisconnectedを使用して購入UIをトグル。
製品を取得します。エディタのIAP製品カタログまたはコード(例えば、新しいProductDefinition("gem_chest_01", ProductType.消費型))からListをビルドし、FetchProducts()に渡します。ストアはローカライズされた価格と説明を返します。
保留中の購入を取得します。FetchPurchases()を呼び出して、中断または延期したトランザクションを回復します。保留中の注文はOnPurchasePendingイベントを通じて届きますが、iOSのバージョンによっては保留中のイベントが見逃される可能性があるため、開発者もorders.PendingOrdersを処理する必要があります。確認済みの非消耗品およびサブスクリプションは、この時点で再エンタイトルメントできます。
購入、付与、確認PurchaseProduct(product)を呼び出します。OnPurchasePendingで、アイテムを付与し、レシートを検証し、ConfirmPurchase(pendingOrder)を呼び出します。OnPurchaseFailedでのハンドル障害:ユーザーのキャンセルにはメッセージは必要ありません。その他のエラーはプレイヤーに表面化する必要があります。
Unity Iap 5の購入フロー
以下のインフォグラフィックを使用して、新機能、ウェブショップ、カタログ、決済プロバイダーなど、Unity IAP5の購入フロー全体をビューできます。

IAP 5へのアップグレード時によくある落とし穴
- 複製助成金:OnPurchasePendingと手動の保留注文パスの両方を通じて、同じ注文が浮上する可能性があります。HashSet(OnPurchasesConfirmedから入力)で処理されたトランザクションを追跡し、許可する前にチェックします。
- 同時購入:注文の配送中に購入ボタンを無効にして、複製リクエストを防ぎます。
- イベントリーク:IAP 5はイベント駆動型で、購買マネージャーが破壊された時点でStoreControllerのすべてのイベントから登録解除されます。
- StoreKit 1 購入停止:iOS 15以前のデバイスでは、未確認購入によりプレイヤーが同じ製品を再購入することをブロックできます。これらの購入を追跡して解決するバックエンドが推奨されます。
サーバー側での検証
IAP 5の注文のトランザクションIDをUnity Cloud Codeに送信してサーバー側で検証でき、Unity Economyを通じてプレイヤーにアイテムが付与される。