初期化
Unity IAP が購入関連イベントをアプリケーションに通知するために使用する IStoreListener インターフェースの実装を提供する必要があります。
初期化処理を開始して、このリスナーの実装と設定を行うには、UnityPurchasing.Initialize メソッドを呼び出します。
ネットワークが利用できない場合でも初期化は失敗することがなく、Unity IAP はバックグラウンドで初期化を試行し続けます。初期化に失敗するのは、設定ミスがあったりデバイスの設定で IAP が無効になっていたりするなど、Unity IAP に回復不可能な問題が発生した場合のみです。
その結果、Unity IAP の初期化にかかる時間は一定ではなく、ユーザーがデバイスを機内モードにしている場合は初期化が終わらないこともあります。そのため、初期化が正常に完了しなかった場合は、ユーザーが購入できなくなるように適切に設計する必要があります。
using UnityEngine;
using UnityEngine.Purchasing;
public class MyIAPManager : IStoreListener {
private IStoreController controller;
private IExtensionProvider extensions;
public MyIAPManager () {
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
builder.AddProduct("100_gold_coins", ProductType.Consumable, new IDs
{
{"100_gold_coins_google", GooglePlay.Name},
{"100_gold_coins_mac", MacAppStore.Name}
});
UnityPurchasing.Initialize (this, builder);
}
/// <summary>
/// Unity IAP で購入の準備が整うと呼び出されます。
/// </summary>
public void OnInitialized (IStoreController controller, IExtensionProvider extensions)
{
this.controller = controller;
this.extensions = extensions;
}
/// <summary>
/// Unity IAP で回復不可能な初期化エラーが発生すると呼び出されます。
///
/// インターネットが利用できない場合、呼び出すことができないことに注意してください。Unity IAP は
/// インターネットが利用可能になるまで初期化を試みます。
/// </summary>
public void OnInitializeFailed (InitializationFailureReason error)
{
}
/// <summary>
/// 購入が完了すると呼び出されます。
///
/// OnInitialized() の後はいつでも呼び出すことができます。
/// </summary>
public PurchaseProcessingResult ProcessPurchase (PurchaseEventArgs e)
{
return PurchaseProcessingResult.Complete;
}
/// <summary>
/// 購入が失敗すると呼び出されます。
/// </summary>
public void OnPurchaseFailed (Product i, PurchaseFailureReason p)
{
}
}
UnityPurchasing の自動初期化
アプリ内課金が機能するためには、IAP SDK を初期化する必要があります。これは、Codeless IAP Button または IAP Listener の最初のインスタンスがランタイムにロードされたときに自動的に行われます。ただし、IAP Button または IAP Listener がゲームに表示される前に SDK の初期化が必要になる場合があります。このような場合は、IAP Catalog ウィンドウの下部にある Automatically initialize UnityPurchasing (recommended) をオンにします。これにより、アプリケーションが起動するとすぐに UnityPurchasing が確実に初期化され、Codeless のインスタンスのライフサイクルに依存することがなくなります。

これが機能するには、カタログに 1 つ以上のプロダクトが含まれている必要があります。
ノート: 自動初期化は IAP Button または IAP Listener と併用することができます。この場合、SDK は IAP Button または IAP Listener の最初のインスタンスがシーンにロードされたときではなく、ゲームが開始されたときに初期化されます。ただし、スクリプトで手動で初期化する場合は、自動初期化を有効にしないでください。有効にすると、エラーが発生することがあります。