1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/tjbaobao-GoogleBuillingUtil

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

GoogleBuillingUtil

На основе com.android.billingclient:billing:1.2 происходит упаковка всего процесса оплаты.

Рекомендую к использованию мою универсальную рекламную быстро интегрируемую платформу ADEasy: https://blog.csdn.net/u013640004/article/details/105416193.

Эта версия подходит только для использования в одном activity, иначе необходимо решить проблему с очисткой слушателей. Рекомендуется попробовать использовать последнюю версию: GoogleBilling1.2.2.13 .

    1. Все интерфейсы объединены в OnGoogleBillingListener, теперь достаточно установить один слушатель, чтобы выборочно отслеживать все события.
    1. Логика оптимизирована, структура стала более чёткой, решены проблемы с логикой установки и очистки слушателей, которые были в старой версии.
    1. Добавлен метод онлайн-запроса заказов, который позволяет получить все исторические заказы (но следует учитывать, что на данный момент невозможно определить их действительность).

QQ группа для общения: 425219113 (для обсуждения языков программирования).

=============Использование============

  • Скачайте GoogleBuillingUtil.

  • Подключитесь к API.

  1. AndroidStudio:

==========build.gradle(Module)==========

android {
    dependencies {
        implementation 'com.android.billingclient:billing:1.2.2'
        //Если используется isGooglePlayServicesAvailable метод, то необходимо импортировать этот пакет, но можно отказаться от этого метода.
        implementation "com.google.android.gms:play-services-location:16.0.0"
    }
}
  1. Eclipse: В моём блоге есть извлечённый billing:1.0.jar, который можно скачать и использовать, не забудьте добавить информацию об активности, адрес блога см. в описании версии ниже.
  • Установите разрешение на оплату.
//В aar уже есть разрешения, приложение может игнорировать их, но другие способы интеграции требуют наличия этого разрешения.
<uses-permission
        android:name="com.android.vending.BILLING"
        android:required="false"/>
  • Настройте идентификаторы товаров (обязательно).
//Вызвать перед GoogleBillingUtil.build(). Необходимо вызвать только один раз.
GoogleBillingUtil.setSkus(new String[]{"Идентификатор товара для покупки"},new String[]{"Идентификатор подписки на товар"})//Если нет, передайте null или new String[], а не new String[]{}
  • Пример кода.
private GoogleBillingUtil googleBillingUtil = null;
private MyOnPurchaseFinishedListener mOnPurchaseFinishedListener = new MyOnPurchaseFinishedListener();//Слушатель для завершения покупки
private MyOnQueryFinishedListener mOnQueryFinishedListener = new MyOnQueryFinishedListener();//Слушатель завершения запроса
private MyOnStartSetupFinishedListener mOnStartSetupFinishedListener = new MyOnStartSetupFinishedListener ();//Слушатель результата запуска
private MyOnConsumeResponseListener mOnConsumeResponseListener = new MyOnConsumeResponseListener();//Слушатель ответа на потребление
  1. Создайте пример, необходимо настроить обратные вызовы перед build, обратные вызовы можно настроить по мере необходимости.
@Override
protected void onCreate(...) {
    super.onCreate(...);
        GoogleBillingUtil.setIsAutoConsumeAsync(false);//Рекомендуется отключить автоматическое потребление при наличии проверки на стороне сервера, вместо этого реализовать логику потребления самостоятельно.
    googleBillingUtil = GoogleBillingUtil.getInstance()
                .setOnPurchaseFinishedListener(mOnPurchaseFinishedListener)//Обратите внимание, что установка слушателя является необязательной и зависит от ваших потребностей.
                .setOnQueryFinishedListener(mOnQueryFinishedListener)
                .setOnStartSetupFinishedListener(mOnStartSetupFinishedListener)
                .setOnConsumeResponseListener(mOnConsumeResponseListener )
                .build(context);
}
  1. Запустите покупку внутри приложения или подписку.
public void queryInventoryInApp() 查询 список товаров для покупки
public void queryInventorySubs() 查询 список подписок на товары
public void purchaseInApp(Activity activity,String skuId) Покупка внутри приложения
public void purchaseSubs(Activity activity,String skuId) Подписка
  1. Очистите слушателя.
//Если следующая или предыдущая страница не использует googleBuillingUtil.getInstance(), необходимо вызвать cleanListener() перед finish или startActivity, чтобы очистить интерфейс.
//Можно попробовать так
@Override
    public void onBackPressed() {
        GoogleBillingUtil.cleanListener();
        super.onBackPressed();
    }
//Нажмите кнопку возврата
public void onBackClick()
    {
        GoogleBillingUtil.cleanListener();
        this.finish();
    }


//Если вы используете googleBuilingUtil только один раз, вы можете выбрать использование endConnection() для разрыва соединения с сервисом Google, а затем повторно подключиться при следующем использовании.

  1. Интерфейс объяснения.
//Обратный вызов интерфейса запроса товаров
private class MyOnQueryFinishedListener implements GoogleBillingUtil.OnQueryFinishedListener
{
  @Override
  public void onQuerySuccess(String skuType,List<SkuDetails> list) {
      //Запрос выполнен успешно, возвращён список товаров,
      //skuDetails.getPrice() получает цену (текст)
      //skuDetails.getType() получает тип sub или inapp, поскольку результаты запросов sub и inapp проходят здесь, поэтому необходимо проверить.
      //googleBillingUtil.getSubsPositionBySku(skuDetails.getSku()) получает текущий номер позиции subs sku
      //googleBillingUtil.getInAppPositionBySku(skuDetails.getSku()) получает текущую позицию inapp suk
  }
  @Override
  public void onQueryFail(int responseCode) {
      //Ошибка запроса
  }

  @Override
  public void onQueryError() {
      //Ошибки запроса
  }}
//Обратный звонок после инициализации сервиса
private class MyOnStartSetupFinishedListener реализует GoogleBillingUtil.OnStartSetupFinishedListener
{
//...;
}
//Обратный звонок при покупке товара
private class MyOnPurchaseFinishedListener реализует GoogleBillingUtil.OnPurchaseFinishedListener
{
     @Override
        public void ```
onPurchaseSuccess(List<Purchase> list) {
    // Внутренний закуп или подписка успешны, можно получить sku через purchase.getSku() и определить, какой это товар
}

@Override
public void onPurchaseFail(int responseCode) {

}


@Override
public void onPurchError() {

}
Ответный код Значение Описание
BILLING_RESPONSE_RESULT_OK 0 Успех
BILLING_RESPONSE_RESULT_USER_CANCELED 1 Пользователь нажал «Назад» или отменил диалог
BILLING_RESPONSE_RESULT_SERVICE_UNAVAILABLE 2 Сетевое соединение прервано
BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE 3 Запрошенный тип не поддерживается API версии Billing (проблема с платёжной средой)
BILLING_RESPONSE_RESULT_ITEM_UNAVAILABLE 4 Запрос на товар больше не доступен.
BILLING_RESPONSE_RESULT_DEVELOPER_ERROR 5 Параметры, переданные в API, недействительны. Эта ошибка также может указывать на то, что приложение не было должным образом подписано или настроено для покупки в Google Play, или что у приложения нет необходимых разрешений в его манифесте.
BILLING_RESPONSE_RESULT_ERROR 6 Серьёзная ошибка во время операции API
BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED 7 Не удалось купить, потому что товар уже есть
BILLING_RESPONSE_RESULT_ITEM_NOT_OWNED 8 Не удалось потратить, потому что товара ещё нет

1. Сбой инициализации, код ошибки: 3, это проблема с платёжной средой.

Возможные причины: используется эмулятор, устаревшая версия три-в-одном, платёжная среда приложения не настроена (подключение к сервисам Google, разрешения на оплату), VPN не поддерживает регион.

Решение: а. Сначала проверьте среду. Загрузите из магазина приложение с покупками и посмотрите, работает ли оно. б. Если чужое приложение работает, попробуйте снова протестировать своё приложение, чтобы убедиться, что платёжная среда работает нормально.

2. Можно запросить цену, но нельзя купить, появляется сообщение «Товар нельзя купить».

Это проблема базовой конфигурации, возможны следующие причины: версия не соответствует онлайн-версии, используется тестовый аккаунт (скорее всего), подпись не совпадает.

3. Можно запросить цену, но платёжное окно не открывается, код ошибки: 3, ошибка: Error:In-app billing error: Null data in IAB activity result.

Причина в том, что вы не предоставили разрешение на всплывающее окно платёжного окна Google Play Store, многие мобильные телефоны имеют управление всплывающими окнами, особенно Xiaomi, если разрешение не предоставлено, никаких подсказок не будет, и они будут заблокированы. (Эта проблема больше не существует в новой версии магазина Google).

4. Платёж показывает успех, но вызывается обратный вызов onQueryFail, и возвращаемый список товаров равен нулю.

Это связано с тем, что вы неправильно используете метод, помните, что purchaseInApp — это покупка, а purchaseSubs — подписка. То же самое относится и к запросу. Кроме того, при запросе ошибка, скорее всего, связана с тем, что вы передали пустую строку вместо пустого массива при настройке SKUS.

5. Возвращаемый список товаров имеет нулевую длину при запросе.

При настройке SKUs порядок внутренних покупок и подписок был перепутан, он должен быть первым для внутренних покупок, а вторым параметром — для подписок.

Или товар ещё не выпущен, нужно подождать некоторое время (очень вероятно, новые товары не отвечают ни на какие запросы или покупки, независимо от того, как они запрашиваются или покупаются на стороне Google).

6. Мы обнаружили, что ваше приложение использует старую версию Google Play Developer API. Начиная с 1 декабря 2019 года мы больше не будем поддерживать версии 1 и 2 этого API. Пожалуйста, обновите используемый вами API до версии 3 до этой даты. Обратите внимание, что это изменение не связано с отказом от AIDL/платёжной библиотеки.

Обновитесь до com.android.billingclient:billing, откажитесь от использования кода, связанного с AIDL.

Фоновый режим также необходимо обновить до версии v3 проверочного интерфейса. Подробности см. в официальной документации Google.

==================API описание=============

// Инициализация

  1. public static GoogleBillingUtil getInstance() получение одного экземпляра
  2. public GoogleBillingUtil build() Создание экземпляра покупки, подключение к платёжному сервису Google (если не создано и не подключено), и запрос списка информации о товарах. Если по умолчанию автоматически потреблять уже купленные, но не потреблённые товары, можно изменить, установив isAutoConsumeAsync.
  3. public void startConnection() Подключение к платёжному сервису Google (обычно не требуется вызывать вручную, вызывается при сборке)

// Запрос, покупка и потребление 4. public void queryInventoryInApp() запрос списка товаров для внутренней покупки 5. public void queryInventorySubs() запрос списка товаров по подписке 6. public void purchaseInApp(Activity activity, String skuId) инициировать внутреннюю покупку 7. public void purchaseSubs(Activity activity, String skuId) начать подписку 8. public void consumeAsync(String purchaseToken) потреблять товары (обычно не нужно вызывать вручную, автоматически вызывается при покупке)

// История покупок, количество активных подписок 9. public List queryPurchasesInApp() получить список уже купленных товаров 10. public List queryPurchasesSubs() получить список уже подписанных товаров 11. public int getPurchasesSizeSubs() — получение количества активных подписок (-1 — ошибка запроса, 0 — нет активных подписок, >0 — есть активные подписки).

// Удобное средство 12. public int getSubsPositionBySku(String sku) — получение номера товара по подписке по sku. 13. public int getInAppPositionBySku(String sku) — получение номера внутриигрового товара по sku. 14. public String getSubsSkuByPosition(int position) — получение sku товара по подписке по номеру позиции. 15. public String getInAppSkuByPosition(int position) — получение sku внутриигрового товара по номеру позиции. 16. private String getSkuType(String sku) — определение типа товара (inapp — внутриигровой товар, subs — товар по подписке).

// Интерфейс настройки 17. public GoogleBillingUtil setOnPurchaseFinishedListener(OnPurchaseFinishedListener onPurchaseFinishedListener) — установка интерфейса обратного вызова при покупке. 18. public GoogleBillingUtil setOnQueryFinishedListener(OnQueryFinishedListener onQueryFinishedListener) — настройка интерфейса обратного вызова для получения информации о товаре. 19. public GoogleBillingUtil setOnStartSetupFinishedListener(OnStartSetupFinishedListener onStartSetupFinishedListener) — интерфейс обратного вызова после завершения инициализации сервиса.

// Прочее 20. public void setIsAutoConsumeAsync(boolean isAutoConsumeAsync) — установка режима автоматического потребления товаров (использовать с осторожностью). 21. public static void cleanListener() — очистка всех слушателей для предотвращения утечек памяти и других проблем. 22. public static void endConnection() — разрыв соединения с сервисом Google (обычно не рекомендуется вызывать этот метод, лучше оставить соединение открытым).

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

На основе com.android.billingclient:billing:1.2 производится упаковка всего процесса оплаты. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/tjbaobao-GoogleBuillingUtil.git
git@api.gitlife.ru:oschina-mirror/tjbaobao-GoogleBuillingUtil.git
oschina-mirror
tjbaobao-GoogleBuillingUtil
tjbaobao-GoogleBuillingUtil
master