queryinventoryasync возвращает 0 продуктов

Я вызываю queryinventoryasync из компонента биллинга в приложении xamarin для Android, но я всегда получаю 0 возвращенных продуктов, хотя я добавил 4 продукта в приложении в Google Play. Я сделал следующее, чтобы попытаться заставить его работать:

  • Добавлены продукты для продажи через приложение в Google Play и установлены как активные
  • загрузил мой APK для альфа-тестирования
  • создал тестовую учетную запись в Google Play и вошел в систему с этой учетной записью на моем устройстве при тестировании покупок в приложении
  • В мой проект добавлен компонент Xamarin InAppBilling.
  • Установите разрешение приложения для выставления счетов: android: name = "com.android.vending.BILLING"
  • Подключение к биллингу в приложении работает нормально.
  • Я использую для тестирования физическое устройство.
  • Я даже проверяю резервные идентификаторы, и они не работают.

Вот мой код:

    static internal InAppBillingServiceConnection _serviceConnection;

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        _serviceConnection = new InAppBillingServiceConnection(this, APP_KEY);
        _serviceConnection.OnInAppBillingError += ServiceConnection_OnInAppBillingError;

        _serviceConnection.OnConnected += () =>
        {
            GetInventory();
        };

        _serviceConnection.Connect();

        global::Xamarin.Forms.Forms.Init(this, bundle);
        Core.App.ALLOW_ADULT_SWITCH = false;
        LoadApplication(new Core.App());
    }

    //For testing purposes only.
    private async void GetInventory()
    {
        var products = await _serviceConnection.BillingHandler.QueryInventoryAsync(new List<string>
            {
                ReservedTestProductIDs.Purchased
            },
            ItemType.Product);

        if (products == null)
        {
            return;
        }
    }

    private void ServiceConnection_OnInAppBillingError(InAppBillingErrorType error, string message)
    {
        throw new System.Exception(message);
    }

    protected override void OnDestroy()
    {
        if (_serviceConnection != null && _serviceConnection.Connected)
            _serviceConnection.Disconnect();
        _serviceConnection = null;

        base.OnDestroy();
    }

person Sach K    schedule 15.06.2016    source источник


Ответы (3)


Боже, это был кошмар - работать! Вот что я сделал,

1) Пропущен вызов queryinventoryasync и сосредоточен на методе BuyProduct (context.PurchaseId, ItemType.Product, user.EmailAddress); Эта перегрузка позволяет пропустить queryinventoryasync, передав идентификатор продукта напрямую.

2) С этим я начал использовать зарезервированные тестовые идентификаторы Android, и это сработало. Но фактические идентификаторы продукта не работали.

3) Я загрузил новый apk и нажал «Опубликовать» во время альфа-тестирования, кнопка публикации находится в не интуитивно понятном месте. Но, очевидно, если во время альфа-тестирования нажать кнопку «Опубликовать», она будет выпущена только для ваших тестировщиков.

4) Войдите в систему в качестве тестировщика в браузере и нажмите на ссылку согласия в консоли разработчика Google, чтобы зарегистрироваться в качестве тестировщика в Google Play.

5) Отладочная версия приложения не будет работать с внутриигровыми продуктами, вам нужно вручную загрузить версию приложения из googleplay со своего устройства и установить, затем запустить, и вы, наконец, сможете протестировать свои внутриигровые продукты !!!

person Sach K    schedule 23.06.2016

Он также будет работать в режиме отладки с вашими собственными продуктами через несколько часов после утверждения вашего APK в альфа-режиме.

person Daniel Medeiros    schedule 09.09.2016

Убедись в том, что:

  1. Ваш открытый ключ при создании IabHelper правильный
  2. Убедитесь, что имя вашего пакета точно соответствует пакету приложения в Google Play Console. В моем случае у меня возникла эта проблема, потому что в моей отладочной сборке я добавил к имени своего пакета префикс .debug, в результате чего Google Play распознал его как другой пакет, хотя открытый ключ был ключом моего производственного приложения.
person Babken Vardanyan    schedule 30.01.2018