Синтаксис:
Используется csharp
using System;
using UnityEngine;
using UnityEngine.Purchasing;
using UnityEngine.SceneManagement;
public class Purchaser : MonoBehaviour, IStoreListener
{
private static IStoreController m_StoreController;
private static IExtensionProvider m_StoreExtensionProvider;
private int currentProductIndex;
public GameObject Ads_icon;
[Tooltip ("Не многоразовые товары. Больше подходит для отключения рекламы и т.п.")]
public string[] NC_PRODUCTS;
[Tooltip ("Многоразовые товары. Больше подходит для покупки игровой валюты и т.п.")]
public string[] C_PRODUCTS;
/// Событие, которое запускается при удачной покупке многоразового товара.
public static event OnSuccessConsumable OnPurchaseConsumable;
/// Событие, которое запускается при удачной покупке не многоразового товара.
public static event OnSuccessNonConsumable OnPurchaseNonConsumable;
/// Событие, которое запускается при неудачной покупке какого-либо товара.
public static event OnFailedPurchase PurchaseFailed;
private void Awake ()
{
InitializePurchasing ();
}
/// Проверить, куплен ли товар.
public static bool CheckBuyState (string id)
{
Product product = m_StoreController.products.WithID (id);
if (product.hasReceipt) { return true; }
else { return false; }
}
public void InitializePurchasing ()
{
var builder = ConfigurationBuilder.Instance (StandardPurchasingModule.Instance ());
foreach (string s in C_PRODUCTS) builder.AddProduct (s, ProductType.Consumable);
foreach (string s in NC_PRODUCTS) builder.AddProduct (s, ProductType.NonConsumable);
UnityPurchasing.Initialize (this, builder);
}
private bool IsInitialized ()
{
return m_StoreController != null && m_StoreExtensionProvider != null;
}
public void BuyConsumable (int index)
{
currentProductIndex = index;
BuyProductID (C_PRODUCTS[index]);
}
public void BuyNonConsumable (int index)
{
currentProductIndex = index;
BuyProductID (NC_PRODUCTS[index]);
}
void BuyProductID (string productId)
{
if (IsInitialized ())
{
Product product = m_StoreController.products.WithID (productId);
if (product != null && product.availableToPurchase)
{
Debug.Log (string.Format ("Purchasing product asychronously: '{0}'", product.definition.id));
m_StoreController.InitiatePurchase (product);
}
else
{
Debug.Log ("BuyProductID: FAIL. Not purchasing product, either is not found or is not available for purchase");
OnPurchaseFailed (product, PurchaseFailureReason.ProductUnavailable);
}
}
}
public void OnInitialized (IStoreController controller, IExtensionProvider extensions)
{
Debug.Log ("OnInitialized: PASS");
m_StoreController = controller;
m_StoreExtensionProvider = extensions;
}
public void OnInitializeFailed (InitializationFailureReason error)
{
Debug.Log ("OnInitializeFailed InitializationFailureReason:" + error);
}
public PurchaseProcessingResult ProcessPurchase (PurchaseEventArgs args)
{
if (C_PRODUCTS.Length > 0 && String.Equals (args.purchasedProduct.definition.id, C_PRODUCTS[currentProductIndex], StringComparison.Ordinal))
OnSuccessC (args);
else if (NC_PRODUCTS.Length > 0 && String.Equals (args.purchasedProduct.definition.id, NC_PRODUCTS[currentProductIndex], StringComparison.Ordinal))
OnSuccessNC (args);
else Debug.Log (string.Format ("ProcessPurchase: FAIL. Unrecognized product: '{0}'", args.purchasedProduct.definition.id));
return PurchaseProcessingResult.Complete;
}
public delegate void OnSuccessConsumable (PurchaseEventArgs args);
protected virtual void OnSuccessC (PurchaseEventArgs args)
{
if (OnPurchaseConsumable != null) OnPurchaseConsumable (args);
Debug.Log (C_PRODUCTS[currentProductIndex] + " Buyed!");
}
public delegate void OnSuccessNonConsumable (PurchaseEventArgs args);
protected virtual void OnSuccessNC (PurchaseEventArgs args)
{
if (OnPurchaseNonConsumable != null) OnPurchaseNonConsumable (args);
if (args.purchasedProduct.definition.id == "No_Ads")
{
Ads_icon.SetActive (false);
PlayerPrefs.SetInt ("No_Ads", 1);
}
if (args.purchasedProduct.definition.id == "ZBoy")
{
PlayerPrefs.SetInt ("ZBoy", 1);
SceneManager.LoadScene ("Shop");
}
if (args.purchasedProduct.definition.id == "ZGirl")
{
PlayerPrefs.SetInt ("ZGirl", 1);
SceneManager.LoadScene ("Shop");
}
Debug.Log (NC_PRODUCTS[currentProductIndex] + " Buyed!");
}
public delegate void OnFailedPurchase (Product product, PurchaseFailureReason failureReason);
protected virtual void OnFailedP (Product product, PurchaseFailureReason failureReason)
{
if (PurchaseFailed != null) PurchaseFailed (product, failureReason);
Debug.Log (string.Format ("OnPurchaseFailed: FAIL. Product: '{0}', PurchaseFailureReason: {1}", product.definition.storeSpecificId, failureReason));
}
public void OnPurchaseFailed (Product product, PurchaseFailureReason failureReason)
{
OnFailedP (product, failureReason);
}
}
using UnityEngine;
using UnityEngine.Purchasing;
using UnityEngine.SceneManagement;
public class Purchaser : MonoBehaviour, IStoreListener
{
private static IStoreController m_StoreController;
private static IExtensionProvider m_StoreExtensionProvider;
private int currentProductIndex;
public GameObject Ads_icon;
[Tooltip ("Не многоразовые товары. Больше подходит для отключения рекламы и т.п.")]
public string[] NC_PRODUCTS;
[Tooltip ("Многоразовые товары. Больше подходит для покупки игровой валюты и т.п.")]
public string[] C_PRODUCTS;
/// Событие, которое запускается при удачной покупке многоразового товара.
public static event OnSuccessConsumable OnPurchaseConsumable;
/// Событие, которое запускается при удачной покупке не многоразового товара.
public static event OnSuccessNonConsumable OnPurchaseNonConsumable;
/// Событие, которое запускается при неудачной покупке какого-либо товара.
public static event OnFailedPurchase PurchaseFailed;
private void Awake ()
{
InitializePurchasing ();
}
/// Проверить, куплен ли товар.
public static bool CheckBuyState (string id)
{
Product product = m_StoreController.products.WithID (id);
if (product.hasReceipt) { return true; }
else { return false; }
}
public void InitializePurchasing ()
{
var builder = ConfigurationBuilder.Instance (StandardPurchasingModule.Instance ());
foreach (string s in C_PRODUCTS) builder.AddProduct (s, ProductType.Consumable);
foreach (string s in NC_PRODUCTS) builder.AddProduct (s, ProductType.NonConsumable);
UnityPurchasing.Initialize (this, builder);
}
private bool IsInitialized ()
{
return m_StoreController != null && m_StoreExtensionProvider != null;
}
public void BuyConsumable (int index)
{
currentProductIndex = index;
BuyProductID (C_PRODUCTS[index]);
}
public void BuyNonConsumable (int index)
{
currentProductIndex = index;
BuyProductID (NC_PRODUCTS[index]);
}
void BuyProductID (string productId)
{
if (IsInitialized ())
{
Product product = m_StoreController.products.WithID (productId);
if (product != null && product.availableToPurchase)
{
Debug.Log (string.Format ("Purchasing product asychronously: '{0}'", product.definition.id));
m_StoreController.InitiatePurchase (product);
}
else
{
Debug.Log ("BuyProductID: FAIL. Not purchasing product, either is not found or is not available for purchase");
OnPurchaseFailed (product, PurchaseFailureReason.ProductUnavailable);
}
}
}
public void OnInitialized (IStoreController controller, IExtensionProvider extensions)
{
Debug.Log ("OnInitialized: PASS");
m_StoreController = controller;
m_StoreExtensionProvider = extensions;
}
public void OnInitializeFailed (InitializationFailureReason error)
{
Debug.Log ("OnInitializeFailed InitializationFailureReason:" + error);
}
public PurchaseProcessingResult ProcessPurchase (PurchaseEventArgs args)
{
if (C_PRODUCTS.Length > 0 && String.Equals (args.purchasedProduct.definition.id, C_PRODUCTS[currentProductIndex], StringComparison.Ordinal))
OnSuccessC (args);
else if (NC_PRODUCTS.Length > 0 && String.Equals (args.purchasedProduct.definition.id, NC_PRODUCTS[currentProductIndex], StringComparison.Ordinal))
OnSuccessNC (args);
else Debug.Log (string.Format ("ProcessPurchase: FAIL. Unrecognized product: '{0}'", args.purchasedProduct.definition.id));
return PurchaseProcessingResult.Complete;
}
public delegate void OnSuccessConsumable (PurchaseEventArgs args);
protected virtual void OnSuccessC (PurchaseEventArgs args)
{
if (OnPurchaseConsumable != null) OnPurchaseConsumable (args);
Debug.Log (C_PRODUCTS[currentProductIndex] + " Buyed!");
}
public delegate void OnSuccessNonConsumable (PurchaseEventArgs args);
protected virtual void OnSuccessNC (PurchaseEventArgs args)
{
if (OnPurchaseNonConsumable != null) OnPurchaseNonConsumable (args);
if (args.purchasedProduct.definition.id == "No_Ads")
{
Ads_icon.SetActive (false);
PlayerPrefs.SetInt ("No_Ads", 1);
}
if (args.purchasedProduct.definition.id == "ZBoy")
{
PlayerPrefs.SetInt ("ZBoy", 1);
SceneManager.LoadScene ("Shop");
}
if (args.purchasedProduct.definition.id == "ZGirl")
{
PlayerPrefs.SetInt ("ZGirl", 1);
SceneManager.LoadScene ("Shop");
}
Debug.Log (NC_PRODUCTS[currentProductIndex] + " Buyed!");
}
public delegate void OnFailedPurchase (Product product, PurchaseFailureReason failureReason);
protected virtual void OnFailedP (Product product, PurchaseFailureReason failureReason)
{
if (PurchaseFailed != null) PurchaseFailed (product, failureReason);
Debug.Log (string.Format ("OnPurchaseFailed: FAIL. Product: '{0}', PurchaseFailureReason: {1}", product.definition.storeSpecificId, failureReason));
}
public void OnPurchaseFailed (Product product, PurchaseFailureReason failureReason)
{
OnFailedP (product, failureReason);
}
}
Слышал, что в Play market сами проверяют покупки, не нужны никакие восстановления, вот в чём вопрос: что будет возвращать этот скрипт при автоматическом восстановлении от google?
Случайно не эти строки?
Синтаксис:
Используется csharp
protected virtual void OnSuccessNC (PurchaseEventArgs args)
{
if (OnPurchaseNonConsumable != null) OnPurchaseNonConsumable (args);
if (args.purchasedProduct.definition.id == "No_Ads")
{
Ads_icon.SetActive (false);
PlayerPrefs.SetInt ("No_Ads", 1);
}
if (args.purchasedProduct.definition.id == "ZBoy")
{
PlayerPrefs.SetInt ("ZBoy", 1);
SceneManager.LoadScene ("Shop");
}
if (args.purchasedProduct.definition.id == "ZGirl")
{
PlayerPrefs.SetInt ("ZGirl", 1);
SceneManager.LoadScene ("Shop");
}
Debug.Log (NC_PRODUCTS[currentProductIndex] + " Buyed!");
}
{
if (OnPurchaseNonConsumable != null) OnPurchaseNonConsumable (args);
if (args.purchasedProduct.definition.id == "No_Ads")
{
Ads_icon.SetActive (false);
PlayerPrefs.SetInt ("No_Ads", 1);
}
if (args.purchasedProduct.definition.id == "ZBoy")
{
PlayerPrefs.SetInt ("ZBoy", 1);
SceneManager.LoadScene ("Shop");
}
if (args.purchasedProduct.definition.id == "ZGirl")
{
PlayerPrefs.SetInt ("ZGirl", 1);
SceneManager.LoadScene ("Shop");
}
Debug.Log (NC_PRODUCTS[currentProductIndex] + " Buyed!");
}