Unity Iap の初期化
Unity Iapパッケージの初期化、基本設定の構成、設定の確認を行い、サポートされているプラットフォーム間でアプリケーション内課金の処理を開始する方法を説明します。
読み終わるまでの所要時間 4 分最終更新 1ヶ月前
Unity アプリ内課金(IAP)を使用する前に、IAP パッケージを初期化します。
プロジェクトで Unity Analytics または Unity Authentication を使用する場合は、IAP を初期化する前にまず Unity Gaming Services(UGS)を初期化する必要があります。次の「 Initialize Unity Gaming Services 」セクションにハウツーが記載されています。
Unity Gaming Services の初期化
UnityServices.InitializeAsync()Task詳細については、初期化例を参照してください。完全に機能するサンプルについては、06 Initialize Gaming Services サンプルをインポート(Package Manager > アプリ内課金 > Samples)。
詳細については、Services Core API を参照してください。
アプリ内課金の初期化
前提条件
購入する製品について、エディターでカタログを作成する の手順を実行します。
初期化手順
初期化期化は、以下のステップで構成されます。
- アプリストアのの取得。
StoreController - へのイベントリスナーの接続。
StoreController - アプリストアへの接続。
- アプリストアからプロダクトを取得する。
- アプリストアからの購入を取得します。
using System.Collections.Generic;using UnityEngine.Purchasing;public class MyIAPManager{ private StoreController m_StoreController; public MyIAPManager() { // Define products var catalogProvider = new CatalogProvider(); catalogProvider.AddProduct("100_gold_coins", ProductType.Consumable, new StoreSpecificIds() { {"100_gold_coins_google", GooglePlay.Name}, {"100_gold_coins_mac", MacAppStore.Name} }); // Get StoreController m_StoreController = UnityIAPServices.StoreController(); // Add event listeners m_StoreController.OnStoreDisconnected += OnStoreDisconnected; m_StoreController.OnProductsFetched += OnProductsFetched; m_StoreController.OnProductsFetchFailed += OnProductsFetchFailed; m_StoreController.OnPurchasesFetched += OnPurchasesFetched; m_StoreController.OnPurchasesFetchFailed += OnPurchasesFetchFailed; // Connect to store m_StoreController.Connect().ContinueWith(_ => { // Fetch products from store catalogProvider.FetchProducts( list => m_StoreController.FetchProducts(list) }); } /// <summary> /// Invoked when connection is lost to the current store, or on a Connect() failure. /// </summary> /// <param name="failure">Information regarding the failure.</param> private void OnStoreDisconnected(StoreConnectionFailureDescription failure) { } /// <summary> /// Invoked with products that are successfully fetched. /// </summary> /// <param name="products">Products successfully returned from the app store.</param> private void OnProductsFetched(リスト<Product>プロダクト) { // Fetch purchases for successfully retrieved products m_StoreController.FetchPurchases(); } /// <summary> /// Invoked when an attempt to fetch products has failed or when a subset of products failed to be fetched. /// </summary> /// <param name="failure">Information regarding the failure.</param> private void OnProductsFetchFailed(ProductFetchFailed failure) { } /// <summary> /// Invoked when previous purchases are fetched. /// </summary> /// <param name="orders">All active pending, completed, and deferred orders for previously fetched products.</param> private void OnPurchasesFetched(オーダーオーダー) { } /// <summary> /// Invoked when an attempt to fetch previous purchases has failed. /// </summary> /// <param name="failure">Information regarding the failure.</param> private void OnPurchasesFetchFailed(PurchasesFetchFailureDescription failure) { } /// <summary> /// Invoked when a purchase needs to be processed and fulfilled. /// </summary> /// <param name="order">The order awaiting fulfillment.</param> private void OnPurchasePending(PendingOrder order) { }}
StoreController の取得
StoreControllerStoreControllerStoreController へのイベントハンドラーのアタッチ、設定、添付
ストアを正しく機能させるには、次のイベントにハンドラをアタッチ、設定、添付します。
- OnStoreDisconnected
- OnProductsFetched
- OnProductsFetchFailed
- OnPurchasesFetched
- OnPurchasesFetchFailed
- OnPurchasePending
アプリ内課金をプロジェクトに統合する際に、追加のハンドラーの実装が必要になる場合があります。 で使用可能なイベントの完全なリストについては、イベント を参照してください。
StoreControllerアプリストアへの接続
StoreController.Connect を呼び出してアプリストアに接続します。返されるは、接続が完了または失敗したときに解決されます。接続が失敗すると、 イベントが発生します。IAP 機能を使用するには、ストアに接続する必要があります。
TaskOnStoreDisconnectedフェッチプロダクト
製品が購入可能かどうかを検証するには、 StoreController.FetchProducts を呼び出します。成功すると、正常に返されたプロダクトのリストで イベントが実行されます。 失敗すると、 イベントが実行されます。
OnProductsFetchedOnProductsFetchFailed購入は、正常に返された製品に対してのみフェッチまたは開始できます。ランタイムに複数回を呼び出すことができますが、を再度呼び出す前に以前のリクエストが終了するのを待つ必要があります。
FetchProductsFetchProductsApple App Store を使用すると、の完了後に未処理の注文に対して が呼び出される場合があります。
FetchProductsOnPurchasePendingGetProducts
GetProductsFetchProductsFetchProductsFetchProductsGetProducts購入の取得
StoreController.FetchPurchasesPendingOrdersConfirmedOrdersDeferredOrdersFetchPurchasesOnPurchasesFetchedOnPurchasesFetchFailedOrdersOnPurchasePendingこれは、アプリ内課金機能の使用を開始するために厳密には必須ではありません。ただし、新しい購入を開始する前に、既存の購入をフェッチしてハンドルすることをお勧めします。そうしないと、予期しない動作が発生する可能性があります。
ランタイムに追加の製品を取得する場合は、購入を再度取得する必要があることに注意してください。
購入をオフラインで取得
Apple StoreKit 2 などの一部のプラットフォームライブラリは、製品データをキャッシュせずにオフラインアクセスのためのエンタイトルメントをデバイスにキャッシュします。このアプローチは推奨されませんが、 コールバックの後でを呼び出すことはできます。この場合、は購入情報を返しますが、リンクされた製品にはなが含まれます。また、との両方にストア固有の識別子が設定されます。
OnProductsFetchFailedFetchPurchasesFetchPurchasestypeProductType.UnknownProductDefinition.idProductDefinition.storeSpecificIdGetPurchases
GetPurchasesFetchPurchasesFetchPurchasesGetProductsFetchProductsFetchPurchasesGetPurchasesCodeless IAP の自動初期化
Codeless IAP の設定方法の詳細は、『 Codeless IAP の設定 』を参照してください。
Codeless IAP の自動 Unity ゲーム サービス初期化
Codeless IAP を使用している場合は、IAP Catalog ウィンドウの下部にある Automatically initialize Unity Gaming Services チェックボックスをオンにして、Unity Gaming Services 自動初期化をイネーブルにします。
これにより、アプリケーションの起動時に Unity Gaming Services が即座に初期化されます。
この特徴を使用するには、Automatically initialize UnityIAPServices (recommended) を有効にする必要があります。IAP カタログにこれらのチェックボックスが表示されない場合は、カタログウィンドウに製品がまだ追加されていない可能性があります。
デフォルトの初期化オプションで Unity Gaming Services を初期化します。一部のサービスには特定の初期化オプションが必要で、デフォルト設定では動作しない場合があります。カスタムオプションが必要な場合は、前述のコード化された API を使用して Unity Gaming Services を初期化します。