Основан на com.android.billingclient:billing:1.2.2, упаковывает весь процесс оплаты.
Внимание: с 2 августа 2021 года все новые приложения должны использовать версию 3 или более позднюю версию Billing Library. До 1 ноября 2021 года для всех обновлений существующих приложений необходимо использовать версию 3 или выше.
BillingEasy-0.1.2 — новый дизайн агрегатора покупок, поддерживает покупки Huawei и Google.
ADEasy — рекомендуемая универсальная рекламная агрегатная платформа SDK с автоматической интеграцией фреймворка.
DYFStoreKit и DYFStore — дружественные ссылки на агрегатор покупок IOS.
//Project
allprojects {
repositories {
...
maven { url 'https://raw.githubusercontent.com/TJHello/publicLib/master'}
}
}
//app
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'com.TJHello:GoogleBilling:3.0.0.1-a06'
}
private lateinit var googleBillingUtil: GoogleBillingUtil
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
GoogleBillingUtil.isDebug(true)
GoogleBillingUtil.setSkus(arrayOf("inappSku"), arrayOf("subsSku"))
googleBillingUtil = GoogleBillingUtil.getInstance()
.addOnGoogleBillingListener(this,OnGoogleBillingListener())
.build(this)
}
/**
* Использованы особенности JAVA8, можно выборочно реализовать нужные методы.
*/
private inner class OnGoogleBillingListener : GoogleBillingUtil.OnGoogleBillingListener(){
//внутренний сервис инициализирован успешно
override fun onSetupSuccess() {
}
}
override fun onDestroy() {
super.onDestroy()
googleBillingUtil.onDestroy(this)
}
public void queryInventoryInApp() //запрос списка покупок
public void queryInventorySubs() //запрос списка подписок
public void purchaseInApp(Activity activity,String skuId) //запуск покупки
public void purchaseSubs(Activity activity,String skuId) //запуск подписки
public List<Purchase> queryPurchasesInApp(Activity activity)//получение действительных заказов на покупку
public List<Purchase> queryPurchasesSubs(Activity activity)//получение действительных подписок
public void queryPurchaseHistoryAsyncInApp(Activity activity)//запрос истории покупок
public void queryPurchaseHistoryAsyncSubs(Activity activity)//запрос истории подписок
Код ответа | Значение | Описание |
---|---|---|
BILLING_RESPONSE_RESULT_OK | 0 | Успех |
BILLING_RESPONSE_RESULT_USER_CANCELED | 1 | Пользователь нажал кнопку «Назад» или отменил диалог |
BILLING_RESPONSE_RESULT_SERVICE_UNAVAILABLE | 2 | Соединение с сетью прервано |
BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE | 3 | Запрошенный тип не поддерживается Billing API версии (проблема с платёжной средой) |
| 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 | Не удалось потратить деньги, так как товар ещё не принадлежит пользователю.
Возможные причины: используется эмулятор, устаревшая версия «три в одном», приложение не настроено (подключено к сервису Google, имеет разрешения на оплату), VPN-регион не поддерживается.
Решение: а) Сначала проверьте среду. Загрузите из магазина приложение с покупками внутри приложения и посмотрите, можно ли совершить покупку. б) Если покупка прошла успешно, попробуйте снова протестировать своё приложение, чтобы убедиться, что платёжная среда работает правильно.
Это проблема базовой конфигурации, возможны следующие причины: версия не соответствует онлайн-версии, используется тестовый аккаунт (скорее всего), подпись не совпадает.
Причина в том, что у приложения нет разрешения на всплывающие окна от Google Play Store. Многие мобильные устройства, особенно Xiaomi, имеют управление разрешениями для всплывающих окон, и если они не разрешены, никаких подсказок не будет, и они будут заблокированы. (Эта проблема больше не существует в новой версии GP Store.)
Это связано с тем, что вы неправильно используете метод, помните, что purchaseInApp — это покупка, а purchaseSubs — подписка. То же самое относится и к запросу. Кроме того, при запросе ошибка, скорее всего, связана с тем, что вы передали пустую строку вместо пустого массива при настройке SKUS.
При настройке SKUS параметры для покупки внутри приложения и подписки были перепутаны, должно быть: первый — покупка внутри приложения, второй — подписка.
Или товар ещё не был успешно опубликован, необходимо подождать некоторое время (очень вероятно, новые товары не отвечают ни на какие запросы или покупки, пока Google не обработает их).
Перейдите на com.android.billingclient:billing, откажитесь от использования кода, связанного с AIDL.
Также необходимо отказаться от использования v3 проверочных интерфейсов в бэкэнде. Подробности см. в официальной документации Google.
// Установка идентификаторов покупки внутри приложения (inAppSKUS) и подписки (subsSKUS), используемых для автоматического запроса и т. д.
public static void setSkus(@Nullable String[] inAppSKUS,@Nullable String[] subsSKUS);
// Получение синглтона, используемого глобально.
public static GoogleBillingUtil getInstance();
// Инициализация сервиса, создание соединения, используется глобально.
public GoogleBillingUtil build;
// Создание соединения, уже включено в build, используется для специального пользовательского переподключения.
public boolean startConnection(Activity activity);
// Запрос информации о товаре для покупки внутри приложения (цена и т.д.).
public void queryInventoryInApp(Activity activity);
// Запрос информации о подписке (цена и т.д.).
public void queryInventorySubs(Activity activity);
// Покупка внутри приложения.
public void purchaseInApp(Activity activity, String skuId);
// Подписка.
public void purchaseSubs(Activity activity,String skuId);
// Потратить товар через purchaseToken.
public void consumeAsync(Activity activity,String purchaseToken);
// Потратить товар по массиву sku.
public void consumeAsyncInApp(Activity activity,@NonNull String... sku);
// Потратить товар по списку sku.
public void consumeAsyncInApp(Activity activity,@NonNull List<String> skuList);
// Получить купленные товары.
public List<Purchase> queryPurchasesInApp(Activity activity);
// Получить товары по подписке.
public List<Purchase> queryPurchasesSubs(Activity activity);
// Асинхронный сетевой запрос всех заказов на покупку внутри приложения — независимо от того, истек ли срок действия, отменён и т. д.
public void queryPurchaseHistoryAsyncInApp(Activity activity);
// Асинхронный сетевой запрос всей истории подписки — независимо от того, истёк ли срок действия, отменена и т. д.
public void queryPurchaseHistoryAsyncSubs(Activity activity);
// Количество активных подписок.
public int getPurchasesSizeSubs(Activity activity);
// Позиция товара по sku для покупки внутри приложения.
public int getInAppPositionBySku(String sku);
// Позиция товара по sku для подписки.
public int getSubsPositionBySku(String sku);
// Sku по позиции для подписки.
public String getSubsSkuByPosition(int position);
// Sku по позиции для покупки внутри приложения.
public String getInAppSkuByPosition(int position);
// Тип товара по sku.
public String getSkuType(String sku);
// Готов ли сервис покупки внутри приложения?
public static boolean isReady();
// Автоматическое потребление товаров для покупки внутри приложения?
public static void setIsAutoConsumeAsync(boolean isAutoConsumeAsync);
// Отключить соединение с сервисом Google (не рекомендуется использовать часто).
public static void endConnection();
// Добавить слушателя.
public GoogleBillingUtil addOnGoogleBillingListener(Activity activity,OnGoogleBillingListener onGoogleBillingListener);
// Удалить слушателя.
public void removeOnGoogleBillingListener(OnGoogleBillingListener onGoogleBillingListener);
// Удалить всех слушателей с определённой страницы.
public void removeOnGoogleBillingListener(Activity activity); // Удалить внутренние прослушиватели покупок, чтобы предотвратить утечку памяти — вызвать в методе `onDestroy` класса `Activity`.
public void onDestroy(Activity activity) {
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )