拡張機能と設定
消費型
Unity IAP では Google の Billing API V4 を使用しています。このバージョンには、消費型プロダクトの概念と明示的な消費型 API 呼び出しが備わっています。
Google のパブリッシャーダッシュボードで消費型プロダクトを作成する場合は、"Managed product" に設定してください。Unity IAP では、アプリケーションで購入が確認された後、その消費を管理します。
拡張機能
回復可能な初期化の中断をリッスンする
ある状況では、ゲームが Unity IAP の初期化を正常に完了できない、または不適切に完了する場合があります。これは、ゲームが Unity IAP を初期化する際に、ユーザーの Android デバイスに Google アカウントが追加されていないことが原因で起こっている可能性があります。
例えば、ユーザーがまず Play ストアでアプリケーションをインストールし、その後で、Google アカウントをデバイスから削除したとします。この場合、ユーザーがゲームを起動しても、Unity IAP の初期化は完了せず、プロダクトを購入したり、以前に購入したプロダクトを復元したりできなくなります。これは、ユーザーがデバイスに Google アカウントを追加 してからゲームに戻ると解決できます。
IGooglePlayConfiguration.SetServiceDisconnectAtInitializeListener(Action) API を使用して、このシナリオをリッスンできます。このアクションが発動されると、ゲームはユーザーインターフェースのダイアログを通じて、購入や以前の購入の復元には Google アカウントが必要であることをユーザーに通知することを選択できます。
以下の使用例を参照してください。
using UnityEngine;
using UnityEngine.Purchasing;
public class GooglePlayInitializationDisconnectListener : IStoreListener
{
public GooglePlayInitializationDisconnectListener()
{
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
builder.Configure<IGooglePlayConfiguration>().SetServiceDisconnectAtInitializeListener(() =>
{
Debug.Log("Unable to connect to the Google Play Billing service. " +
"User may not have a Google account on their device.");
});
builder.AddProduct("100_gold_coins", ProductType.Consumable);
UnityPurchasing.Initialize(this, builder);
}
public void OnInitialized(IStoreController controller, IExtensionProvider extensions) { }
public void OnInitializeFailed(InitializationFailureReason error) { }
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e)
{
return PurchaseProcessingResult.Complete;
}
public void OnPurchaseFailed(Product i, PurchaseFailureReason p) { }
}
プロダクト詳細の照会の失敗をリッスンする
Google Play ストアへのプロダクト詳細の照会が特定の状況で失敗することがあります。失敗した場合は、成功するまで再試行が行われます。
例えば、ユーザーがまず Play ストアでアプリケーションをインストールし、その後で、ユーザーがインターネットに接続していない状態でアプリケーションを起動したとします。Google Play ストアはインターネット接続を必要とするため利用できず、その結果、プロダクトの詳細を照会できなくなります。インターネット接続を復元すると、問題が解決され、アプリケーションは正常に再開されます。
IGooglePlayConfiguration.SetQueryProductDetailsFailedListener(Action<int>) API を使用して、このシナリオをリッスンできます。このアクションには、再試行回数を格納するパラメーターが備わっています。このアクションが発動されると、アプリケーションはユーザーインターフェースのダイアログを通じて、インターネット接続を確認するようにユーザーに通知することを選択できます。
以下の使用例を参照してください。
using UnityEngine;
using UnityEngine.Purchasing;
public class QueryProductDetailsFailedListener : IStoreListener
{
public QueryProductDetailsFailedListener()
{
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
builder.Configure<IGooglePlayConfiguration>().SetQueryProductDetailsFailedListener((int retryCount) =>
{
Debug.Log("Failed to query product details " + retryCount + " times.");
});
builder.AddProduct("100_gold_coins", ProductType.Consumable);
UnityPurchasing.Initialize(this, builder);
}
public void OnInitialized(IStoreController controller, IExtensionProvider extensions) { }
public void OnInitializeFailed(InitializationFailureReason error) { }
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e)
{
return PurchaseProcessingResult.Complete;
}
public void OnPurchaseFailed(Product i, PurchaseFailureReason p) { }
}