Guest User

Untitled

a guest
Jan 16th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.20 KB | None | 0 0
  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.Purchasing;
  4.  
  5. public class Purchaser : MonoBehaviour, IStoreListener
  6. {
  7. private static IStoreController m_StoreController; // Unity Purchasing システムです。
  8. private static IExtensionProvider m_StoreExtensionProvider; // ストア毎の Purchasing サブシステムです。
  9.  
  10. // アイテムIDを指定
  11. public static string kProductIDConsumable = "dummy1";
  12.  
  13. void Start()
  14. {
  15. // Unity Purchasing の参照がまだ設定されていない場合は
  16. if (m_StoreController == null)
  17. {
  18. // Purchasing への接続の設定を開始する。
  19. InitializePurchasing();
  20. }
  21. }
  22.  
  23. public void InitializePurchasing()
  24. {
  25. // Purchasing に既に接続していたら ...
  26. if (IsInitialized())
  27. {
  28. // ... ここで終わりです。
  29. return;
  30. }
  31.  
  32. // ビルダーを作成し、最初に Unity 提供のストアのパッケージをパスする。
  33. var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
  34.  
  35. // 販売するプロダクトを追加する / 識別子を利用して
  36. // (汎用識別子をそのストア別識別子と関連付けて)復元する。
  37. builder.AddProduct(kProductIDConsumable, ProductType.Consumable);
  38.  
  39. // 非同期呼び出しで、設定およびこのクラスのインスタンスをパスして
  40. // セットアップの残りを開始する。OnInitialized か OnInitializeFailed 内でレスポンスが起こる。
  41. UnityPurchasing.Initialize(this, builder);
  42. }
  43.  
  44.  
  45. private bool IsInitialized()
  46. {
  47. // 両方の Purchasing 参照が設定されて初めて初期化されたことになる。
  48. return m_StoreController != null && m_StoreExtensionProvider != null;
  49. }
  50.  
  51.  
  52. public void BuyConsumable()
  53. {
  54. // 消耗型プロダクトを、その汎用識別子を使用して購入します。
  55. // レスポンスは ProcessPurchase または OnPurchaseFailed 経由で非同期的に発生します。
  56. BuyProductID(kProductIDConsumable);
  57. }
  58.  
  59.  
  60. void BuyProductID(string productId)
  61. {
  62. // Purchasing が初期化されていれば ...
  63. if (IsInitialized())
  64. {
  65. // ... 汎用のプロダクト識別子と Purchasing システムの商品コレクションから
  66. // Product の参照を取得します。
  67. Product product = m_StoreController.products.WithID(productId);
  68.  
  69. // このデバイスのストア用のプロダクトが存在し、そのプロダクトが販売可能な状態であれば ...
  70. if (product != null && product.availableToPurchase)
  71. {
  72. Debug.Log(string.Format("Purchasing product asychronously: '{0}'", product.definition.id));
  73. // ... プロダクトを購入します。ProcessPurchase または OnPurchaseFailed 経由で
  74. // 非同期的にレスポンスが発生します。
  75. m_StoreController.InitiatePurchase(product);
  76. }
  77. // そうでなければ ...
  78. else
  79. {
  80. // ... product の参照取得の失敗あるいはプロダクトが購入可能でない旨のログを出力します。
  81. Debug.Log("BuyProductID: FAIL. Not purchasing product, either is not found or is not available for purchase");
  82. }
  83. }
  84. // あるいは ...
  85. else
  86. {
  87. // ... Purchasing がまだ初期化に成功していない旨のログを出力します。更に待機し続けるか
  88. // 初期化を再度試みるか検討してください。
  89. Debug.Log("BuyProductID FAIL. Not initialized.");
  90. }
  91. }
  92.  
  93.  
  94. //
  95. // --- IStoreListener
  96. //
  97.  
  98. public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
  99. {
  100. // Purchasing は初期化に成功しました。Purchasing の参照を取得します。
  101. Debug.Log("OnInitialized: PASS");
  102.  
  103. // このアプリケーション用のプロダクトが設定された Purchasing システム全体
  104. m_StoreController = controller;
  105. // デバイス専用のストア機能にアクセスする為の、ストア専用のサブシステム
  106. m_StoreExtensionProvider = extensions;
  107. }
  108.  
  109.  
  110. public void OnInitializeFailed(InitializationFailureReason error)
  111. {
  112. // Purchasing のセットアップに成功しませんでした。エラーの原因を確認してください。ユーザーにこの原因を共有することを検討してください。
  113. Debug.Log("OnInitializeFailed InitializationFailureReason:" + error);
  114. }
  115.  
  116.  
  117. public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
  118. {
  119. // ある消耗型プロダクトがユーザーによって購入されました。
  120. if (String.Equals(args.purchasedProduct.definition.id, kProductIDConsumable, StringComparison.Ordinal))
  121. {
  122. Debug.Log(string.Format("ProcessPurchase: PASS. Product: '{0}'", args.purchasedProduct.definition.id));
  123. }
  124. else
  125. {
  126. Debug.Log(string.Format("ProcessPurchase: FAIL. Unrecognized product: '{0}'", args.purchasedProduct.definition.id));
  127. }
  128.  
  129. // このプロダクトが完全に受領されたか、あるいは次回のアプリ起動時にリマインドが必要かを示すフラグを返します。
  130. // 購入された商品が未だクラウドに保存中で、その保存に遅延が
  131. // 生じた場合は PurchaseProcessingResult.Pending を使用します。
  132. return PurchaseProcessingResult.Complete;
  133. }
  134.  
  135.  
  136. public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason)
  137. {
  138. // あるプロダクトの購入に失敗しました。詳細は failureReason を確認してください。問題解決のためのヒントとして
  139. // 原因をユーザーに共有することを検討してください。
  140. Debug.Log(string.Format("OnPurchaseFailed: FAIL. Product: '{0}', PurchaseFailureReason: {1}", product.definition.storeSpecificId, failureReason));
  141. }
  142. }
Add Comment
Please, Sign In to add comment