Xamarin.InAppBilling(2.2.0)调用Android BuyProduct()但有时不调用回调 - 如何诊断/修复根本原因?

Dev*_*Ltd 8 android in-app-purchase xamarin.android xamarin google-play-services

在过去的几周里,我们在Android上遇到了许多失败的应用程序内购买失败(iOS一直很好).

我们使用Xamarin.InAppBilling组件(版本2.2.0)已经绝对好几个月,但最近我们可以看到我们正在调用行(A)但是通常的IAP回调没有被调用,这意味着......

  • Google未收到购买请求 - 我们可以对此进行排除,他们会收取费用.

  • 谷歌没有回复 - 我们最可能的情况

  • Xamarin.InAppBilling中的一个错误 - 不太可能,因为它一直在工作.

  • 我们没有正确注册回调 - 不太可能,因为我们已经记录了每个回调的第一行...

        _serviceConnection.BillingHandler.OnUserCanceled += BillingHandler_OnProductCanceled;
        _serviceConnection.BillingHandler.OnProductPurchased += BillingHandler_OnProductPurchased;
        _serviceConnection.BillingHandler.OnGetProductsError += BillingHandler_OnGetProductsError;
        _serviceConnection.BillingHandler.OnPurchaseConsumed += BillingHandler_OnPurchaseConsumed;
        _serviceConnection.BillingHandler.OnPurchaseConsumedError += BillingHandler_OnPurchaseConsumedError;
        _serviceConnection.BillingHandler.OnProductPurchasedError += BillingHandler_OnProductPurchasedError;
        _serviceConnection.BillingHandler.OnPurchaseFailedValidation += BillingHandler_OnPurchaseFailedValidation;
        _serviceConnection.BillingHandler.OnInvalidOwnedItemsBundleReturned += BillingHandler_OnInvalidOwnedItemsBundleReturned;
    
    Run Code Online (Sandbox Code Playgroud)

这是调用购买代码的摘录......

        Device.BeginInvokeOnMainThread (async () => {

            var products = await _serviceConnection.BillingHandler.QueryInventoryAsync (new List<String> { consumableSku }, ItemType.Product);

            if (products != null && products.Count == 1) {

                var product = products [0];

                logger.Log ("FeatureService purchaseConsumableFromGooglePlay product:"+product.ToString()+ " payload:" + this.developerPayload);

                // (A)
                _serviceConnection.BillingHandler.BuyProduct (product, this.developerPayload);

            } else {
                this.iapConsumableEvent.Purchased = false;
                this.Publish<IapConsumableEvent> (this.iapConsumableEvent);
            }
        });

        logger.Log ("FeatureService purchaseConsumableFromGooglePlay completed");
Run Code Online (Sandbox Code Playgroud)

大多数情况下会调用BillingHandler回调,但是当它不起作用时,似乎不会调用那些回调.

我们在Android 7和8上看过这个(所以它是Android 8的问题).

我们不确定从哪里开始,有任何关于进一步调试的建议表示赞赏.

Dev*_*Ltd 4

好的,

事实证明这是谷歌的一个问题

感谢您对 Google Play 开发者支持的回复!

我们的团队最近进行了一些更改,应该可以解决此问题(您已经确认了这一点)。

另一方面,我们确实鼓励开发人员使用我们新的 Play Billing 库 ( https://developer.android.com/google/play/billing/billing_library.html ),它可以优雅地处理大多数用例,并且是一个很好的示例与它集成的方法是我们的​​开源示例: https://github.com/googlesamples/android-play-billing/tree/master/TrivialDrive_v2 感谢您对此修复的耐心,我希望这会有所帮助!如果您还有任何疑问,请告诉我。我很乐意提供帮助。