ProcessPurchase not working 4.12.2

In android build in testing, when I click on button to buy subscription, I am able to get overlay and successfully buy it in testing but ProcessPurchase is not called/Debug statements inside it are not shown. Please let me know what I am doing wrong? It works if I uninstall and its automatically restores purchase.

public GooglePlayProrationMode upgradeSubscriptionProrationMode = GooglePlayProrationMode.ImmediateAndChargeProratedPrice;
        public GooglePlayProrationMode downgradeSubscriptionProrationMode = GooglePlayProrationMode.ImmediateAndChargeProratedPrice;

        // public Text currentSubscriptionText;
        // public Text deferredSubscriptionChangeText;
        #if UNITY_ANDROID
        GoogleSubscriptionGroup m_SubscriptionGroup;
        #endif
        #if UNITY_IOS
        AppleSubscriptionGroup m_SubscriptionGroup;
        #endif

        public void CatalogInit()
        {
            InitializePurchasing();
        }

        void InitializePurchasing()
        {
            var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());

            //When a subscription change has the DEFERRED proration mode, the subscription is upgraded or downgraded only when the subscription renews.
            //This sets a listener for when the subscription change is requested but hasn't occured yet.
            //We notify the user that the subscription change will take effect at the next renewal cycle.

            #if UNITY_ANDROID
            builder.Configure<IGooglePlayConfiguration>()
                .SetDeferredProrationUpgradeDowngradeSubscriptionListener(NotifyUserOfOnDeferredSubscriptionChange);
            #endif

            // builder.AddProduct(normalSubscriptionId, ProductType.Subscription);
            // builder.AddProduct(vipSubscriptionId, ProductType.Subscription);

            builder.AddProduct(premium1Month, ProductType.Subscription);
            builder.AddProduct(premium6Month, ProductType.Subscription);
            builder.AddProduct(premium12Month, ProductType.Subscription);

            builder.AddProduct(premiumPlus1Month, ProductType.Subscription);
            builder.AddProduct(premiumPlus6Month, ProductType.Subscription);
            builder.AddProduct(premiumPlus12Month, ProductType.Subscription);

            UnityPurchasing.Initialize(this, builder);
        }

        void NotifyUserOfOnDeferredSubscriptionChange(Product product)
        {
            var msg = $"Subscription change to {product.definition.id} is deferred until the next renewal cycle.";
            Debug.Log(msg);
        }

        public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
        {
            Debug.Log("In-App Purchasing successfully initialized");
            #if UNITY_ANDROID
                m_SubscriptionGroup = new GoogleSubscriptionGroup(controller, extensions, upgradeSubscriptionProrationMode, downgradeSubscriptionProrationMode,
                    premium1Month,premium6Month,premium12Month,premiumPlus1Month,premiumPlus6Month,premiumPlus12Month);
            #elif UNITY_IOS 
                m_AppleExtensions = extensions.GetExtension<IAppleExtensions>();
                m_AppleExtensions.RegisterPurchaseDeferredListener(NotifyUserOfOnDeferredSubscriptionChange);
                m_SubscriptionGroup = new AppleSubscriptionGroup(controller, extensions, premium, premiumPlus);
            #else
                Debugx.Log("Unsupported Platform");
            #endif

            Debug.Log($"CurrentSubscription {m_SubscriptionGroup.CurrentSubscriptionId()}");
            // UpdateUI(m_SubscriptionGroup.CurrentSubscriptionId());
        }

        public void BuyNormalSubscription()
        {
            m_SubscriptionGroup.BuySubscription(premium1Month);
        }

        public void BuyVipSubscription()
        {
            m_SubscriptionGroup.BuySubscription(premiumPlus1Month);
        }




        public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
        {
            var product = args.purchasedProduct;

            Debug.Log($"Actually buying Processing Purchase: {product.definition.id}");
            // Debug.Log($"Reciept : {product.transactionID}");

            return PurchaseProcessingResult.Complete;
        }

        public void OnInitializeFailed(InitializationFailureReason error)
        {
            OnInitializeFailed(error, null);
        }

        public void OnInitializeFailed(InitializationFailureReason error, string message)
        {
            var errorMessage = $"Purchasing failed to initialize. Reason: {error}.";

            if (message != null)
            {
                errorMessage += $" More details: {message}";
            }

            Debug.Log(errorMessage);
        }

        public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason)
        {
            Debug.Log($"Purchase failed - Product: '{product.definition.id}', PurchaseFailureReason: {failureReason}");
        }

        public void OnPurchaseFailed(Product product, PurchaseFailureDescription failureDescription)
        {
            Debug.Log($"Purchase failed - Product: '{product.definition.id}'," +
                $" Purchase failure reason: {failureDescription.reason}," +
                $" Purchase failure details: {failureDescription.message}");
        }

I’m also having an issue in IAP 4.12.2 with an Android build, where ProcessPurchase is not being called, and I’m also getting this in console:

Purchase not correctly processed for product “product_name”. Add an active IAPButton to process this purchase, or add an IAPListener to receive any unhandled purchase events.

My PurchaseHandler.cs implements both the IStoreListener and IDetailedStoreListener interfaces, and the method exists in the class. UGS and IAP are initialized when I am getting the products and their prices. I am testing in the Unity Editor 2022.3.38f1, set to build for Android.

Adding an IAP listener in the scene works around the issue, and the purchase is fulfilled correctly and the method in my class is called (even though I did not configure the IAP Listener at all).

@pbamel I don’t think this issue is resolved. My “solution” is really a workaround, but the interface should be getting called without the IAPListener in the scene.

I think it was related to me not calling the function to show confirmation/ dialog box correctly. ProcessPurchase was being called correctly. I figured it out in the end.

Ok, it sounds like we have different issues then.