Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.Purchasing;
- // Placing the Purchaser class in the CompleteProject namespace allows it to interact with ScoreManager,
- // one of the existing Survival Shooter scripts.
- // Deriving the Purchaser class from IStoreListener enables it to receive messages from Unity Purchasing.
- public class subscribe : MonoBehaviour, IStoreListener
- {
- private static IStoreController m_StoreController; // The Unity Purchasing system.
- private static IExtensionProvider m_StoreExtensionProvider; // The store-specific Purchasing subsystems.
- //must be saved in memory
- private long lastTimeFromPay;
- private long lastTimeEnterInGame;
- private bool canBuySubscription = true;
- // Product identifiers for all products capable of being purchased:
- // "convenience" general identifiers for use with Purchasing, and their store-specific identifier
- // counterparts for use with and outside of Unity Purchasing. Define store-specific identifiers
- // also on each platform's publisher dashboard (iTunes Connect, Google Play Developer Console, etc.)
- // General product identifiers for the consumable, non-consumable, and subscription products.
- // Use these handles in the code to reference which product to purchase. Also use these values
- // when defining the Product Identifiers on the store. Except, for illustration purposes, the
- // kProductIDSubscription - it has custom Apple and Google identifiers. We declare their store-
- // specific mapping to Unity Purchasing's AddProduct, below.
- public static string kProductIDSubscription = "subscription";
- // Apple App Store-specific product identifier for the subscription product.
- private static string kProductNameAppleSubscription = "com.unity3d.subscription.new";
- // Google Play Store-specific product identifier subscription product.
- private static string kProductNameGooglePlaySubscription = "com.unity3d.subscription.original";
- void Update()
- {
- if (Input.GetKeyDown(KeyCode.W))
- {
- InitializePurchasing();
- }
- if (Input.GetKeyDown(KeyCode.C))
- {
- InitializePurchasing();
- }
- }
- void Start()
- {
- if(canBuySubscription==false)
- ResultFromSubscribe();
- }
- public void ResultFromSubscribe()
- {
- if(lastTimeEnterInGame-lastTimeFromPay>=30)
- {
- lastTimeEnterInGame = 0;
- lastTimeFromPay = 0;
- }
- else
- {
- lastTimeEnterInGame = System.DateTime.Now.Day;
- }
- }
- public void InitializePurchasing()
- {
- // If we have already connected to Purchasing ...
- if (IsInitialized())
- {
- // ... we are done here.
- return;
- }
- // Create a builder, first passing in a suite of Unity provided stores.
- var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
- // Add a product to sell / restore by way of its identifier, associating the general identifier
- // with its store-specific identifiers.
- // And finish adding the subscription product. Notice this uses store-specific IDs, illustrating
- // if the Product ID was configured differently between Apple and Google stores. Also note that
- // one uses the general kProductIDSubscription handle inside the game - the store-specific IDs
- // must only be referenced here.
- builder.AddProduct(kProductIDSubscription, ProductType.Subscription, new IDs(){
- { kProductNameAppleSubscription, AppleAppStore.Name },
- { kProductNameGooglePlaySubscription, GooglePlay.Name },
- });
- // Kick off the remainder of the set-up with an asynchrounous call, passing the configuration
- // and this class' instance. Expect a response either in OnInitialized or OnInitializeFailed.
- UnityPurchasing.Initialize(this, builder);
- }
- private bool IsInitialized()
- {
- // Only say we are initialized if both the Purchasing references are set.
- return m_StoreController != null && m_StoreExtensionProvider != null;
- }
- public void BuySubscription()
- {
- // Buy the subscription product using its the general identifier. Expect a response either
- // through ProcessPurchase or OnPurchaseFailed asynchronously.
- // Notice how we use the general product identifier in spite of this ID being mapped to
- // custom store-specific identifiers above.
- BuyProductID(kProductIDSubscription);
- }
- void BuyProductID(string productId)
- {
- // If Purchasing has been initialized ...
- if (IsInitialized())
- {
- // ... look up the Product reference with the general product identifier and the Purchasing
- // system's products collection.
- Product product = m_StoreController.products.WithID(productId);
- // If the look up found a product for this device's store and that product is ready to be sold ...
- if (product != null && product.availableToPurchase)
- {
- Debug.Log(string.Format("Purchasing product asychronously: '{0}'", product.definition.id));
- // ... buy the product. Expect a response either through ProcessPurchase or OnPurchaseFailed
- // asynchronously.
- m_StoreController.InitiatePurchase(product);
- }
- // Otherwise ...
- else
- {
- // ... report the product look-up failure situation
- Debug.Log("BuyProductID: FAIL. Not purchasing product, either is not found or is not available for purchase");
- }
- }
- // Otherwise ...
- else
- {
- // ... report the fact Purchasing has not succeeded initializing yet. Consider waiting longer or
- // retrying initiailization.
- Debug.Log("BuyProductID FAIL. Not initialized.");
- }
- }
- // Restore purchases previously made by this customer. Some platforms automatically restore purchases, like Google.
- // Apple currently requires explicit purchase restoration for IAP, conditionally displaying a password prompt.
- //
- // --- IStoreListener
- //
- public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
- {
- // Purchasing has succeeded initializing. Collect our Purchasing references.
- Debug.Log("OnInitialized: PASS");
- // Overall Purchasing system, configured with products for this application.
- m_StoreController = controller;
- // Store specific subsystem, for accessing device-specific store features.
- m_StoreExtensionProvider = extensions;
- BuySubscription();
- }
- public void OnInitializeFailed(InitializationFailureReason error)
- {
- // Purchasing set-up has not succeeded. Check error for reason. Consider sharing this reason with the user.
- Debug.Log("OnInitializeFailed InitializationFailureReason:" + error);
- }
- public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
- {
- if (canBuySubscription)
- {
- if (String.Equals(args.purchasedProduct.definition.id, kProductIDSubscription, StringComparison.Ordinal))
- {
- // TODO: The subscription item has been successfully purchased, grant this to the player.
- print("PAY IS PASSED!");
- lastTimeFromPay = System.DateTime.Now.Day;
- lastTimeEnterInGame = System.DateTime.Now.Day;
- canBuySubscription = false;
- ResultFromSubscribe();
- }
- // Or ... an unknown product has been purchased by this user. Fill in additional products here....
- else
- {
- Debug.Log(string.Format("ProcessPurchase: FAIL. Unrecognized product: '{0}'", args.purchasedProduct.definition.id));
- }
- }
- else
- {
- print("ASASASASASASASASASASASASASASASASAA");
- }
- // Return a flag indicating whether this product has completely been received, or if the application needs
- // to be reminded of this purchase at next app launch. Use PurchaseProcessingResult.Pending when still
- // saving purchased products to the cloud, and when that save is delayed.
- return PurchaseProcessingResult.Complete;
- }
- public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason)
- {
- // A product purchase attempt did not succeed. Check failureReason for more detail. Consider sharing
- // this reason with the user to guide their troubleshooting actions.
- Debug.Log(string.Format("OnPurchaseFailed: FAIL. Product: '{0}', PurchaseFailureReason: {1}", product.definition.storeSpecificId, failureReason));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement