Unity IAP を使用してアプリ内で購入関係のイベントを受け取るには IStoreListener インターフェースを実装したクラスを作成する必要があります。
リスナーの実装と構成を行う初期化処理は UnityPurchasing.Initialize を呼び出すことで開始されます。
ネットワークワークが使用できない場合、初期化は失敗しません。Unity IAP はバックグラウンドで初期化を試行し続けます。Unity IAP で、設定ミスやデバイス設定での 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>
/// Called when Unity IAP is ready to make purchases.
/// </summary>
public void OnInitialized (IStoreController controller, IExtensionProvider extensions)
{
this.controller = controller;
this.extensions = extensions;
}
/// <summary>
/// Called when Unity IAP encounters an unrecoverable initialization error.
///
/// Note that this will not be called if Internet is unavailable; Unity IAP
/// will attempt initialization until it becomes available.
/// </summary>
public void OnInitializeFailed (InitializationFailureReason error)
{
}
/// <summary>
/// Called when a purchase completes.
///
/// May be called at any time after OnInitialized().
/// </summary>
public PurchaseProcessingResult ProcessPurchase (PurchaseEventArgs e)
{
return PurchaseProcessingResult.Complete;
}
/// <summary>
/// Called when a purchase fails.
/// </summary>
public void OnPurchaseFailed (Product i, PurchaseFailureReason p)
{
}
}