Ещё вопросы с внутриигровыми покупками

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Ещё вопросы с внутриигровыми покупками

Сообщение kirya_355 12 мар 2019, 18:18

Нашёл значит скрипт для внутриигровых покупок, немного переделал его и вот что получил
Синтаксис:
Используется 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);
    }
}



Слышал, что в 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!");
    }
kirya_355
UNIт
 
Сообщения: 106
Зарегистрирован: 09 май 2018, 21:40

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 23