C # Xamarin формирует InAppBilling PurchaseAsync, не возвращающийся после дескриптора playstore

#c# #xamarin #xamarin.forms #in-app-purchase #in-app-billing

#c# #xamarin #xamarin.forms #покупка в приложении #in-app-выставление счетов

Вопрос:

Я использую jamesmontenegro InAppBilling, и у меня небольшая проблема с платежами.

Код работает нормально, но после обработки платежа в Google Play Store приложение не обрабатывает процедуру и не возвращается, если покупка была успешной, что привело к невозможности использования приобретенного товара.

Вот простой код

 public static async Task<bool> PurchaseItem(string productId, string payload)
        {
            var billing = CrossInAppBilling.Current;
            try
            {
                var connected = await billing.ConnectAsync(ItemType.InAppPurchase);
                if (!connected)
                {
                    //we are offline or can't connect, don't try to purchase
                    return false;
                }

                //check purchases
                var purchase = await billing.PurchaseAsync(productId, ItemType.InAppPurchase, payload);

                //possibility that a null came through.
                if (purchase == null)
                {
                    //did not purchase
                    Debug.WriteLine("purchased but not consumed");
                    return true;
                }
                else if (purchase.State == PurchaseState.Purchased)
                {
                    //purchased, we can now consume the item or do it later

                    //If we are on iOS we are done, else try to consume the purchase
                    //Device.RuntimePlatform comes from Xamarin.Forms, you can also use a conditional flag or the DeviceInfo plugin
                    if (Device.RuntimePlatform == Device.iOS)
                        return true;

                    var consumedItem = await CrossInAppBilling.Current.ConsumePurchaseAsync(purchase.ProductId, purchase.PurchaseToken);

                    if (consumedItem != null)
                    {
                        //Consumed!!
                        Debug.WriteLine("purchased and consumed");
                        return true;
                    }
                }
                return false;
            }
 

На самом деле ничего не выполняется после PurchaseAsync вызова, поскольку поток переходит в Google Play Store.
Как только платеж завершен и поток возвращается в приложение, обработать что-либо невозможно.

Есть идеи? Для этого есть обходной путь, но мне просто интересно, не делаю ли я здесь что-то не так?

Комментарии:

1. Как это PurchaseItem называется? В частности, выполняет ли какой-либо код синхронизацию поверх асинхронности в любой момент?

2. @StephenCleary это просто асинхронный вызов, такой как вызов var = async…

3. Код в разделе PurchaseAsync никогда не выполняется на платформе Android?