IAP バージョン 4 からバージョン 5 へのアップグレード
このガイドに従って、Unityアプリ内課金バージョン4からバージョン5に移行します。
読み終わるまでの所要時間 5 分最終更新 7日前
アプリ内課金(IAP)バージョン5(v5)では、接続と購入フローの各ステップをより適切にコントロールできるように、アーキテクチャが大幅に改善されました。移行には既存の IAP 実装を大幅に更新する必要がありますが、このガイドでは遷移に役立つステップバイステップの手順とコードサンプルを提供します。
変更点の概要
以下の表は、IAP v5の変更点と、実装の更新が必要な点をまとめたものです。アップグレードのメリットの詳細については、Unityアプリ内課金(IAP)v5.xにアップグレードする理由に関するサポート記事を参照してください。変更 | 必要な更新 |
|---|---|
| 初期化は、ストア接続、プロダクトフェッチ、購入フェッチの別々の非同期呼び出しに分割されます。 | Replace UnityPurchasing.Initialize() |
| Replace ConfigurationBuilder |
| ストア拡張はストア拡張サービスに置き換えられます。 | Replace ConfigurationBuilder |
| Replace IDetailedStoreListener and IStoreListener |
| Replace IStoreController |
| 購入フローの置き換え |
| 復元トランザクション |
エンタイトルメントチェックは、 | エンタイトルメントチェックの置き換え |
Apple App Store レシート検証は非推奨です。google playレシート検証で | 更新レシート検証 |
| Codeless IAP 更新 |
Replace UnityPurchasing.Initialize()
IAP v5 では、Unity Iap パッケージをより柔軟に初期化できます。ストアへの接続、製品のフェッチ、購入のハンドルは、個別に非同期で行うことができます。このアプローチは、初期化の成功を妨げる可能性のある問題を特定して解決するのにヘルプます。UnityPurchasing.Initialize()- 呼び出しと待機の:
StoreController.Connect()- この呼び出しが完了すると、IAP が現在のアプリストアに接続されます。
- 以下を呼び出します。
- のインスタンスに製品を追加できます。これは、
CatalogProviderに製品を追加するのと似ています。ConfigurationBuilderのリストをProductDefinitionsまたはProductService.FetchProducts()に渡すこともできます。詳細については、新しい初期化プロセスのコードサンプル を参照してください。StoreController.FetchProducts() - イベントハンドラーは、リクエストが正常に完了したときに呼び出されます。指定したプロダクトを取得できなかった場合は、
OnProductsFetchedが呼び出されます。OnProductsFetchFailed
- プロダクトが正常にフェッチされた後にを呼び出します。
FetchPurchases()- イベントハンドラーは、リクエストが正常に完了したときに呼び出されます。
OnPurchasesFetchedオブジェクトには、アプリストアから返されたすべてのディファード、保留中、および完了済みオーダーのフィルタ可能なコレクションが含まれます。失敗すると、Ordersが実行されます。OnPurchasesFetchFailed
StoreController を使用した新しい初期化プロセスのコードサンプル
以下の例は、IAP v5 の初期化方法を示しています。StoreController m_StoreController; async void InitializeIAP() { m_StoreController = UnityIAPServices.StoreController(); m_StoreController.OnPurchasePending += OnPurchasePending; await m_StoreController.Connect(); m_StoreController.OnProductsFetched += OnProductsFetched; m_StoreController.OnPurchasesFetched += OnPurchasesFetched; var initialProductsToFetch = new List<ProductDefinition> { new(goldProductId, ProductType.Consumable), new(diamondProductId, ProductType.Consumable) }; m_StoreController.FetchProducts(initialProductsToFetch); }void OnProductsFetched(List<Product> products) { // Handle fetched products m_StoreController.FetchPurchases(); } void OnPurchasesFetched(Orders orders) { // Process purchases, for example, check for entitlements from completed orders }
IDetailedStoreListener と IStoreListener を置き換える
IAP v5では、購入または初期化の処理にIDetailedStoreListenerIStoreListenerStoreControllerProductServicePurchaseServiceStoreServiceIDetailedStoreListenerStoreController
移行するには、各
IDetailedStoreListener関数 | IAP v5への置き換え |
|---|---|
| |
| |
| |
| |
| |
ConfigurationBuilder を置き換える
以下のConfigurationBuilder関数 | IAP v5への置き換え |
|---|---|
| |
| |
IStoreController を置き換える
IStoreControllerStoreControllerStoreControllerIStoreListenerUnityIAPServices.StoreController()StoreControllerIStoreControllerStoreControllerIStoreController | StoreController | ノート |
|---|---|---|
| | |
| | |
| | |
| | |
購入フローの置き換え
購入を開始するには、Purchase()StoreControllerPurchaseService``PurchaseProduct()PendingOrderStoreController.ConfirmPurchase(PendingOrder)PurchaseService.ConfirmPurchase(PendingOrder)ProcessPurchase- : 新規購入のために呼び出されます。
OnPurchasePending - : 復元された購入のために呼び出されます。
OnPurchasesFetched
ProcessPurchase復元トランザクション
RestoreTransactionsStoreControllerPurchaseServiceFetchPurchases()CheckEntitlement()エンタイトルメントチェックの置き換え
製品に対するユーザーのエンタイトルメントを確認するには、IAP はイベントに依存します。FetchPurchasesOnPurchasesFetchedCheckEntitlementOnCheckEntitlement追加プロダクトの取得
StoreControllerProductServiceFetchProductsOnPurchasesFetchedCatalogProviderFetchProductsProductServiceCatalogProviderFetchProductsレシート検証
Apple App Store レシートのレシート検証は非推奨になりました。レシート検証は Google Play ストアでのみサポートされます。レシートをフェッチするには、OrderProduct.ReceiptOrder.Info.ReceiptCodeless IAP の詳細
以下のCodelessIAPStoreListener
| IAP v5への置き換え |
|---|---|
| |