- Home /
 
OpenIAB - billing plugin. It works only once! need HELP!
My application consists of three levels. Billing plugin is in one of the levels. levels are repeated one after the other. (Android) - The problem is that purchase - operates correctly only when the application is loaded for the first time! How to make that work every time ? When level is loaded...?
 using UnityEngine;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine.UI;
 using OnePF;
 
 public class DemoBilling : MonoBehaviour {
 
     public const string SKU_MIDDLE = "middle_stick";
     public const string SKU_BIG = "big_stick";
 
     public GameObject Play2;
     public GameObject buy2;
     public GameObject Play3;
     public GameObject buy3;
 
     private void OnEnable()
     {
     
         OpenIABEventManager.billingSupportedEvent += OnBillingSupported;
         OpenIABEventManager.billingNotSupportedEvent += OnBillingNotSupported;
         OpenIABEventManager.queryInventorySucceededEvent += OnQueryInventorySucceeded;
         OpenIABEventManager.queryInventoryFailedEvent += OnQueryInventoryFailed;
         OpenIABEventManager.purchaseSucceededEvent += OnPurchaseSucceded;
         OpenIABEventManager.purchaseFailedEvent += OnPurchaseFailed;
         OpenIABEventManager.consumePurchaseSucceededEvent += OnConsumePurchaseSucceeded;
         OpenIABEventManager.consumePurchaseFailedEvent += OnConsumePurchaseFailed;
         OpenIABEventManager.transactionRestoredEvent += OnTransactionRestored;
         OpenIABEventManager.restoreSucceededEvent += OnRestoreSucceeded;
         OpenIABEventManager.restoreFailedEvent += OnRestoreFailed;
     }
 
 
     void Start() {
         
         OpenIAB.mapSku(SKU_MIDDLE, OpenIAB_Android.STORE_GOOGLE, "middle_stick");
         OpenIAB.mapSku(SKU_BIG, OpenIAB_Android.STORE_GOOGLE, "big_stick");
         
         
         var options = new OnePF.Options();
         options.checkInventory = false;
         options.verifyMode = OptionsVerifyMode.VERIFY_EVERYTHING;
         options.storeKeys.Add(OpenIAB_Android.STORE_GOOGLE, "KEY");
         OpenIAB.init(options);
     }
 
     private void OnDisable()
     {
         OpenIABEventManager.billingSupportedEvent -= OnBillingSupported;
         OpenIABEventManager.billingNotSupportedEvent -= OnBillingNotSupported;
         OpenIABEventManager.queryInventorySucceededEvent -= OnQueryInventorySucceeded;
         OpenIABEventManager.queryInventoryFailedEvent -= OnQueryInventoryFailed;
         OpenIABEventManager.purchaseSucceededEvent -= OnPurchaseSucceded;
         OpenIABEventManager.purchaseFailedEvent -= OnPurchaseFailed;
         OpenIABEventManager.consumePurchaseSucceededEvent -= OnConsumePurchaseSucceeded;
         OpenIABEventManager.consumePurchaseFailedEvent -= OnConsumePurchaseFailed;
         OpenIABEventManager.transactionRestoredEvent -= OnTransactionRestored;
         OpenIABEventManager.restoreSucceededEvent -= OnRestoreSucceeded;
         OpenIABEventManager.restoreFailedEvent -= OnRestoreFailed;
     }
 
 
 
     void OnGUI() {
 
         if (Play2.activeSelf == true)
         {
             GUI.Box(new Rect (1, 1, 1, 1), "");
         }
         else if (GUI.Button (new Rect (Screen.width/2 - 50, Screen.height/2 + 5, 100, 50), "Buy blue!"))
         {
             OpenIAB.purchaseProduct(SKU_MIDDLE);
         }
 
 
         if (Play3.activeSelf == true)
         {
             GUI.Box(new Rect (1, 1, 1, 1), "");
         }
         else if (GUI.Button (new Rect (Screen.width/2 - 50, Screen.height/2 + 105, 100, 50), "Buy green!"))
         {
             OpenIAB.purchaseProduct(SKU_BIG);
         }
 
     }
 
     bool VerifyDeveloperPayload(string developerPayload)
     {
         /*
          * TODO: Need
          */
         return true;
     }
 
     private void OnBillingSupported()
     {
         Debug.Log("Billing is supported");
         OpenIAB.queryInventory(new string[] { SKU_MIDDLE, SKU_BIG });
     }
     
     private void OnBillingNotSupported(string error)
     {
         Debug.Log("Billing not supported: " + error);
     }
     
     private void OnQueryInventorySucceeded(Inventory inventory) {
         Debug.Log("Query inventory succeeded: " + inventory);
 
         if (!Play2.activeSelf){
 
                 Play2.SetActive(true);
                 buy2.SetActive(false);
         };
 
         if (!Play3.activeSelf){
             
             Play3.SetActive(true);
             buy3.SetActive(false);
         };
         }
 
     private void OnQueryInventoryFailed(string error)
     {
         Debug.Log("Query inventory failed: " + error);
     }
     
     private void OnPurchaseSucceded(Purchase purchase)
     {
         Debug.Log("Purchase succeded: " + purchase.Sku + "; Payload: " + purchase.DeveloperPayload);
         if (!VerifyDeveloperPayload(purchase.DeveloperPayload))
             return;
 
         switch (purchase.Sku)
         {
         case SKU_MIDDLE:
             if (!Play2.activeSelf){
                 Play2.SetActive (true);
                 buy2.SetActive(false);
                                     }
 
             break;
         case SKU_BIG:
             if (!Play3.activeSelf){
                 Play3.SetActive(true);
                 buy3.SetActive(false);
             }
 
             break;
         
         default:
             Debug.LogWarning("Unknown SKU: " + purchase.Sku);
             break;
         }    
     }
     
     private void OnPurchaseFailed(int errorCode, string error)
     {
     
         Debug.Log("Purchase failed: " + error);
     }
 
     private void OnConsumePurchaseSucceeded(Purchase purchase)
     {
         Debug.Log("Consume purchase succeded: " + purchase.ToString());
             }
     
     private void OnConsumePurchaseFailed(string error)
     {
         Debug.Log("Consume purchase failed: " + error);
     
     }
     
     private void OnTransactionRestored(string sku)
     {
         Debug.Log("Transaction restored: " + sku);
     }
     
     private void OnRestoreSucceeded()
     {
         Debug.Log("Transactions restored successfully");
     }
     
     private void OnRestoreFailed(string error)
     {
         Debug.Log("Transaction restore failed: " + error);
     }
 }
 
 
              Answer by unity_UuAZkmyxo8I1TQ · May 08, 2019 at 06:11 AM
Try to seek advice from the developers https://www.timesolv.com/ they have been dealing with billing software for a long time, I think they understand perfectly how to help you in this case. Most likely you made a small error somewhere in the code that does not start the program cycle
Your answer
 
             Follow this Question
Related Questions
Failed to re-package resources after adding unity in-app purchase service 1 Answer
Application.LoadLevel Strange Problem 2 Answers
How to load a level after 30 seconds? 3 Answers
Application.Loadlevel("Level Name"); not working on android 2 Answers
Game freeze while I click Gui texture loadlevel to change scene 0 Answers