Unity IAP Demo Not Working on Android

I downloaded the Unity IAP package from Unity services inside the Unity editor. I wrote a script called Purchaser.

I put purchaser in my scene and I made it so when I clicked on a button, it would call, for example, BuyRemoveAds, it would do that action and remove the ads for example.

It works perfectly inside the unity editor, but when I build it to android and click the button, it won’t do anything.

I am expecting a google play iap dialog to appear but get nothing and it goes ends up unsuccessful. I don’t know if this is a bug or not but I need it fixed right away. How do I get it to show the google play iap purchase dialog? Its probably not a scripting issue because the same problem occurs in the Unity IAP Demo. Thank you in advance.

using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Purchasing;

	// Deriving the Purchaser class from IStoreListener enables it to receive messages from Unity Purchasing.
	public class Purchaser : MonoBehaviour, IStoreListener
	{
		

		private static IStoreController m_StoreController;          // The Unity Purchasing system.
		private static IExtensionProvider m_StoreExtensionProvider; // The store-specific Purchasing subsystems.

		// 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 kProductIDConsumable =    "consumable";   
		//public static string kProductIDNonConsumable = "nonconsumable";
		//public static string kProductIDSubscription =  "subscription";

		//public static string REMOVE_ADS =  "key";
		public static string FIREFIGHTER_FRANK =  "key; 
		public static string MANAGER_MIKE =  "key"; 
		public static string TEENAGER_TRENT =  "key"; 
		public static string DRAGON_DRAKE =  "key"; 
		public static string ASTRONAUT_ALEX =  "key"; 
		public static string ROBOT_RICK =  "key"; 
		public static string QUEEN_LIMBERG =  "key"; 
		public static string KING_LIMBERG =  "key"; 

		/*// 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"; */

	private unlockandplayButton unlockandplay;
	private removeadsButton removeads;

		void Start()
		{
			// If we haven't set up the Unity Purchasing reference
			if (m_StoreController == null)
			{
				// Begin to configure our connection to Purchasing
				InitializePurchasing();
			}
		}
	void Awake()
	{
		unlockandplay = GameObject.Find("unlockandplaybutton").GetComponent<unlockandplayButton>();
		removeads = GameObject.Find("removeadsbutton").GetComponent<removeadsButton>();
	}
		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 module = StandardPurchasingModule.Instance();
			var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
		builder.Configure<IGooglePlayConfiguration>().SetPublicKey("Not showing it right now");
		builder.AddProduct("com.squares.fruitsplit.remove_ads", ProductType.NonConsumable);
		builder.AddProduct(FIREFIGHTER_FRANK, ProductType.NonConsumable);
		builder.AddProduct(MANAGER_MIKE, ProductType.NonConsumable);
		builder.AddProduct(TEENAGER_TRENT, ProductType.NonConsumable);
		builder.AddProduct(DRAGON_DRAKE, ProductType.NonConsumable);
		builder.AddProduct(ASTRONAUT_ALEX, ProductType.NonConsumable);
		builder.AddProduct(ROBOT_RICK, ProductType.NonConsumable);
		builder.AddProduct(QUEEN_LIMBERG, ProductType.NonConsumable);
		builder.AddProduct(KING_LIMBERG, ProductType.NonConsumable);

			UnityPurchasing.Initialize(this, builder);
		}

	/*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.
		private bool IsInitialized()
		{
			// Only say we are initialized if both the Purchasing references are set.
			return m_StoreController != null && m_StoreExtensionProvider != null;
		}
		public void BuyRemoveAds()
		{
			// Buy the non-consumable product using its general identifier. Expect a response either 
			// through ProcessPurchase or OnPurchaseFailed asynchronously.
		BuyProductID("com.squares.fruitsplit.remove_ads");
		}
	public void BuyFirefighterFrank()
	{
		// Buy the non-consumable product using its general identifier. Expect a response either 
		// through ProcessPurchase or OnPurchaseFailed asynchronously.
		BuyProductID(FIREFIGHTER_FRANK);
	}
	public void BuyManagerMike()
	{
		// Buy the non-consumable product using its general identifier. Expect a response either 
		// through ProcessPurchase or OnPurchaseFailed asynchronously.
		BuyProductID(MANAGER_MIKE);
	}
	public void BuyTeenagerTrent()
	{
		// Buy the non-consumable product using its general identifier. Expect a response either 
		// through ProcessPurchase or OnPurchaseFailed asynchronously.
		BuyProductID(TEENAGER_TRENT);
	}
	public void BuyDragonDrake()
	{
		// Buy the non-consumable product using its general identifier. Expect a response either 
		// through ProcessPurchase or OnPurchaseFailed asynchronously.
		BuyProductID(DRAGON_DRAKE);
	}
	public void BuyAstronautAlex()
	{
		// Buy the non-consumable product using its general identifier. Expect a response either 
		// through ProcessPurchase or OnPurchaseFailed asynchronously.
		BuyProductID(ASTRONAUT_ALEX);
	}
	public void BuyRobotRick()
	{
		// Buy the non-consumable product using its general identifier. Expect a response either 
		// through ProcessPurchase or OnPurchaseFailed asynchronously.
		BuyProductID(ROBOT_RICK);
	}
	public void BuyQueenLimberg()
	{
		// Buy the non-consumable product using its general identifier. Expect a response either 
		// through ProcessPurchase or OnPurchaseFailed asynchronously.
		BuyProductID(QUEEN_LIMBERG);
	}
	public void BuyKingLimberg()
	{
		// Buy the non-consumable product using its general identifier. Expect a response either 
		// through ProcessPurchase or OnPurchaseFailed asynchronously.
		BuyProductID(KING_LIMBERG);
	}
		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.
		public void RestorePurchases()
		{
			// If Purchasing has not yet been set up ...
			if (!IsInitialized())
			{
				// ... report the situation and stop restoring. Consider either waiting longer, or retrying initialization.
				Debug.Log("RestorePurchases FAIL. Not initialized.");
				return;
			}

			// If we are running on an Apple device ... 
			if (Application.platform == RuntimePlatform.IPhonePlayer || 
				Application.platform == RuntimePlatform.OSXPlayer)
			{
				// ... begin restoring purchases
				Debug.Log("RestorePurchases started ...");

				// Fetch the Apple store-specific subsystem.
				var apple = m_StoreExtensionProvider.GetExtension<IAppleExtensions>();
				// Begin the asynchronous process of restoring purchases. Expect a confirmation response in 
				// the Action<bool> below, and ProcessPurchase if there are previously purchased products to restore.
				apple.RestoreTransactions((result) => {
					// The first phase of restoration. If no more responses are received on ProcessPurchase then 
					// no purchases are available to be restored.
					Debug.Log("RestorePurchases continuing: " + result + ". If no further messages, no purchases available to restore.");
				});
			}
			// Otherwise ...
			else
			{
				// We are not running on an Apple device. No work is necessary to restore purchases.
				Debug.Log("RestorePurchases FAIL. Not supported on this platform. Current = " + Application.platform);
			}
		}


		//  
		// --- 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;
		}


		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) 
		{
			// A consumable product has been purchased by this user.
		if (String.Equals(args.purchasedProduct.definition.id, "com.squares.fruitsplit.remove_ads", StringComparison.Ordinal))
			{
			removeads.removedads();
			}
			// Or ... a non-consumable product has been purchased by this user.
			else if (String.Equals(args.purchasedProduct.definition.id, FIREFIGHTER_FRANK, StringComparison.Ordinal))
			{
			unlockandplay.unlockfirefighter();
			}
			// Or ... a subscription product has been purchased by this user.
			else if (String.Equals(args.purchasedProduct.definition.id, MANAGER_MIKE, StringComparison.Ordinal))
			{
			unlockandplay.unlockmanager();
			}
		else if (String.Equals(args.purchasedProduct.definition.id, TEENAGER_TRENT, StringComparison.Ordinal))
		{
			unlockandplay.unlockteenager();
		}
		else if (String.Equals(args.purchasedProduct.definition.id, DRAGON_DRAKE, StringComparison.Ordinal))
		{
			unlockandplay.unlockdragon();
		}
		else if (String.Equals(args.purchasedProduct.definition.id, ASTRONAUT_ALEX, StringComparison.Ordinal))
		{
			unlockandplay.unlockastronaut();
		}
		else if (String.Equals(args.purchasedProduct.definition.id, ROBOT_RICK, StringComparison.Ordinal))
		{
			unlockandplay.unlockrobot();
		}
		else if (String.Equals(args.purchasedProduct.definition.id, QUEEN_LIMBERG, StringComparison.Ordinal))
		{
			unlockandplay.unlockqueen();
		}
		else if (String.Equals(args.purchasedProduct.definition.id, KING_LIMBERG, StringComparison.Ordinal))
		{
			unlockandplay.unlockking();
		}
			// 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));
			}

			// 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));
		}
	}

@Dollar-Fish have you performed the Google Play Android App setup on the Developer Dashboard? Unity - Manual: Configuring for Google Play Store

And, what do the log files (logcat) say?