Как реализовать Android в приложении BillingClient в Xamarin. Андроид асинхронно - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь реализовать ниже Java-код в C # со ссылкой на Android Документация

List<String> skuList = new ArrayList<> ();
skuList.add("premium_upgrade");
skuList.add("gas");
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(SkuType.INAPP);
billingClient.querySkuDetailsAsync(params.build(),
    new SkuDetailsResponseListener() {
        @Override
        public void onSkuDetailsResponse(BillingResult billingResult,
                List<SkuDetails> skuDetailsList) {
            // Process the result.
        }
    });

У меня здесь 2 вопроса. Я подумал, что я буду запускать этот код в отдельном потоке, а не в потоке пользовательского интерфейса, как показано ниже, чтобы мой пользовательский интерфейс реагировал на сетевое соединение. это правильный подход? QuerySkuDetailsAsync называется async, но не реализуется как async. как это должно работать и как обрабатывать в c #, потому что он будет запускать и забывать, но слушатель обрабатывает ответ.

public async Task<List<InAppBillingProduct>> GetProductsAsync(List<string> ProductIds)
        {
 var getSkuDetailsTask = Task.Factory.StartNew(() =>
            {

                var prms = SkuDetailsParams.NewBuilder();
                var type =   BillingClient.SkuType.Inapp;
                prms.SetSkusList(ProductIds).SetType(type);

                BillingClient.QuerySkuDetailsAsync(prms.Build(), new SkuDetailsResponseListener());

                return InAppBillingProducts;
            });
     return await getSkuDetailsTask;
        }

2-й вопрос о том, как обращаться со слушателем, как показано ниже. Как мне вернуть значение из слушателя. Мне нужен список возврата объекта InAppBillingProduct.

 public class SkuDetailsResponseListener : Java.Lang.Object, ISkuDetailsResponseListener
    {
        public void OnSkuDetailsResponse(BillingResult billingResult, IList<SkuDetails> skus)
        {
             if (billingResult.ResponseCode == BillingResponseCode.Ok)
            {
                   // get list of Products here and return
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...