Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using UnityEngine;
- using UnityEngine.Purchasing;
- public class Purchaser : MonoBehaviour, IStoreListener
- {
- private static IStoreController m_StoreController; // Unity Purchasing システムです。
- private static IExtensionProvider m_StoreExtensionProvider; // ストア毎の Purchasing サブシステムです。
- // アイテムIDを指定
- public static string kProductIDConsumable = "dummy1";
- void Start()
- {
- // Unity Purchasing の参照がまだ設定されていない場合は
- if (m_StoreController == null)
- {
- // Purchasing への接続の設定を開始する。
- InitializePurchasing();
- }
- }
- public void InitializePurchasing()
- {
- // Purchasing に既に接続していたら ...
- if (IsInitialized())
- {
- // ... ここで終わりです。
- return;
- }
- // ビルダーを作成し、最初に Unity 提供のストアのパッケージをパスする。
- var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
- // 販売するプロダクトを追加する / 識別子を利用して
- // (汎用識別子をそのストア別識別子と関連付けて)復元する。
- builder.AddProduct(kProductIDConsumable, ProductType.Consumable);
- // 非同期呼び出しで、設定およびこのクラスのインスタンスをパスして
- // セットアップの残りを開始する。OnInitialized か OnInitializeFailed 内でレスポンスが起こる。
- UnityPurchasing.Initialize(this, builder);
- }
- private bool IsInitialized()
- {
- // 両方の Purchasing 参照が設定されて初めて初期化されたことになる。
- return m_StoreController != null && m_StoreExtensionProvider != null;
- }
- public void BuyConsumable()
- {
- // 消耗型プロダクトを、その汎用識別子を使用して購入します。
- // レスポンスは ProcessPurchase または OnPurchaseFailed 経由で非同期的に発生します。
- BuyProductID(kProductIDConsumable);
- }
- void BuyProductID(string productId)
- {
- // Purchasing が初期化されていれば ...
- if (IsInitialized())
- {
- // ... 汎用のプロダクト識別子と Purchasing システムの商品コレクションから
- // Product の参照を取得します。
- Product product = m_StoreController.products.WithID(productId);
- // このデバイスのストア用のプロダクトが存在し、そのプロダクトが販売可能な状態であれば ...
- if (product != null && product.availableToPurchase)
- {
- Debug.Log(string.Format("Purchasing product asychronously: '{0}'", product.definition.id));
- // ... プロダクトを購入します。ProcessPurchase または OnPurchaseFailed 経由で
- // 非同期的にレスポンスが発生します。
- m_StoreController.InitiatePurchase(product);
- }
- // そうでなければ ...
- else
- {
- // ... product の参照取得の失敗あるいはプロダクトが購入可能でない旨のログを出力します。
- Debug.Log("BuyProductID: FAIL. Not purchasing product, either is not found or is not available for purchase");
- }
- }
- // あるいは ...
- else
- {
- // ... Purchasing がまだ初期化に成功していない旨のログを出力します。更に待機し続けるか
- // 初期化を再度試みるか検討してください。
- Debug.Log("BuyProductID FAIL. Not initialized.");
- }
- }
- //
- // --- IStoreListener
- //
- public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
- {
- // Purchasing は初期化に成功しました。Purchasing の参照を取得します。
- Debug.Log("OnInitialized: PASS");
- // このアプリケーション用のプロダクトが設定された Purchasing システム全体
- m_StoreController = controller;
- // デバイス専用のストア機能にアクセスする為の、ストア専用のサブシステム
- m_StoreExtensionProvider = extensions;
- }
- public void OnInitializeFailed(InitializationFailureReason error)
- {
- // Purchasing のセットアップに成功しませんでした。エラーの原因を確認してください。ユーザーにこの原因を共有することを検討してください。
- Debug.Log("OnInitializeFailed InitializationFailureReason:" + error);
- }
- public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
- {
- // ある消耗型プロダクトがユーザーによって購入されました。
- if (String.Equals(args.purchasedProduct.definition.id, kProductIDConsumable, StringComparison.Ordinal))
- {
- Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
- }
- else
- {
- Debug.Log(string.Format("ProcessPurchase: FAIL. Unrecognized product: '{0}'", args.purchasedProduct.definition.id));
- }
- // このプロダクトが完全に受領されたか、あるいは次回のアプリ起動時にリマインドが必要かを示すフラグを返します。
- // 購入された商品が未だクラウドに保存中で、その保存に遅延が
- // 生じた場合は PurchaseProcessingResult.Pending を使用します。
- return PurchaseProcessingResult.Complete;
- }
- public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason)
- {
- // あるプロダクトの購入に失敗しました。詳細は failureReason を確認してください。問題解決のためのヒントとして
- // 原因をユーザーに共有することを検討してください。
- Debug.Log(string.Format("OnPurchaseFailed: FAIL. Product: '{0}', PurchaseFailureReason: {1}", product.definition.storeSpecificId, failureReason));
- }
- }
Add Comment
Please, Sign In to add comment