Доброго времени суток, уважаемый читатель. В статье я хочу рассказать о том, как сделать встроенные покупки и подписки при помощи новой версии библиотеки для биллинга от Google. Статья является гибридом перевода официальной документации с моими комментариями (Официальная документация на английском) .
Все примеры будут рассматриваться на языке Java (я работаю именно на нем, не Kotlin).
Преподготовка
Перед тем как приступать к непосредственному написанию кода необходимо подготовить всё в вашей Google Play Console . В том числе продумать какие у вас будут одноразовые покупки, есть ли нужда в подписках или в многоразовых покупках.
Детально описывать не буду, но дам ссылки на английские версии инструкций. Напишите в комментариях, если нужно разобраться эту тему подробнее в отдельной статье. Найти инструменты для создания всего этого можно в Google Play Console -> « Ваше приложение » -> Страница приложения -> Контент для продажи .
- Инструкция для добавления одноразовых продуктов
- Инструкция для создания вознаграждений
- Инструкция для создания подписок
По итогу у вам должен получиться список идентификаторов для всего этого. Например, в своём приложении я используются месячную подписку, годовую и одноразовый платёж для получения премиум-функций, которые не доступны обычным пользователям (у меня будут соответственно следующие идентификаторы monthly , annual и one_time ).
Новости Android 4: Внутриигровые покупки Google Play Billing Library Version 3.
Шаги по добавлению Google Play Billing Library в ваш проект
Дальнейшее описание работы с библиотекой я буду переплетать со своим проектом в качестве примера. Как я уже сказал ранее у меня есть базовая версия приложения и премиум, премиум-версию можно получить оформив ежемесячную подписку, годовую (12 месячных с небольшой скидкой) и одноразовый платёж (рассчитывал приблизительно как стоимость 5 годовых подписок).
Задачи, которые мне необходимо решить:
- Подключаться к системе биллинга.
- Получить информацию о встроенных покупках (например, чтобы отображать стоимость на кнопке покупки).
- Возможность оформить подписки/одноразовый платёж.
- Проверять наличие хотя бы одной из озвученных выше позиций в активном состоянии.
Для простоты удобства работы с системой биллинга я вынес её в отдельный класс GooglePlay , который наследует у меня интерфейс, позволяющий выполнять описанные выше задачи. Вы можете сделать по своему и без интерфейса (но он полезен, если у вас есть версия для других магазинов, например, Amazon, у них своя библиотека биллинга).
Ссылка на класс для работы с системой биллинга я храню в производном от класса Application классе приложения (App). Таким образом я могу получить доступ к классу GooglePlay из любой активности, что мне и нужно. Возможно, моё решение не самое оптимальное, но какое есть.
Всё, что вам нужно знать, что лучше выделить отдельный класс для работы с библиотекой и, если вам не нравится оставлять ссылку в классе приложения, то создавайте новый экземпляр этого класса там, где вам надо.
Добавление/обновление gradle зависимостей библиотеки
Первое, что нужно сделать — добавить зависимость в ваш файл build.gradle , которая автоматически будет подтягивать библиотеку со всеми необходимыми классами.
Хочу отметить, что в проектах обычно два файла build.gradle . Один — файл всего проекта, второй — файл настроек для модуля. Если вы опытный разработчик, то сами поймете в какой вам лучше добавлять эту зависимость. Но в стандартном случае нужно добавлять в build.gradle модуля . Определить его можно по названию Module в скобочках.
build.gradle модуля
Вот что нужно добавить, в секцию dependencies :
dependencies .
implementation ‘com.android.billingclient:billing:2.0.3’
>
После чего нужно принять и обновить изменения в файле, чтобы указанная библиотека загрузилась в проект. На этом шаге могут возникать ошибки конфликта с другими библиотеками, которые решают в отдельном порядке. Если вы не используете проблемные библиотеки из неизвестных источников, то скорее всего всё пройдет гладко.
Задача №1. Создаём подключение к Google Play
Первым делом к нашему классу GooglePlay имплиментируем интерфейс PurchasesUpdatedListener , чтобы потом указывать его в качестве слушателя.
Код, инициализирующий подключение к Google Play я вынес в метод init(Context context) со следующим кодом, вынеся BillingClient billingClient в область видимости всего класса, он нам потребуется:
BillingClient — по сути основной класс, который позволяет выполнять различные методы, его мы и инициализируем, указывая в качестве слушателя GooglePlay (с реализацией интерфейса PurchasesUpdatedListener )
Вызов функции startConnection инициализирует подключение к Google Play, он асинхронный, а значит выполнится не в момент вызова, а скорее всего немного позже, поэтому в качестве параметра указываем ещё одного слушателя, который скажем нам, когда подключение закончилось и закончилось ли оно успешно и когда подключение разорвалось.
Соответственно в функции onBillingSetupFinished вы можете уже начинать какие-то действия по работе с библиотекой. Я, например, если подключение успешное — запускаю функцию, которая проверяет наличие премиум-версии у пользователя или её отсутствия (подробнее об этом далее).
Задача 2. Запрос на получения информации о встроенных покупках.
Вот как выглядит код из инструкции:
Можно выделить это в отдельный метод, передовая только идентификаторы, и например слушателя (чтобы что-то делать с результатом).
Сам код должен быть без проблем вами понят, в списке мы указываем идентификаторы, информация о которых нас интересует. Потом указываем тип покупок, их два SkuType.INAPP или SkuType.SUBS соответственно. В конце вызываем асинхронный метод по запросу информации и когда результаты вернутся будет вызван метод onSkuDetailsResponse , с которым мы уже можем работать.
Допустим у меня есть активность в которой размещены три кнопки для вызова методов покупки, но я хочу прямо на кнопках отображать стоимость, я вызывают метод и передаю в него SkuDetailsResponseListener() объявленный в активности и когда результаты прибудут, задержка на самом деле у меня всегда очень маленькая, то к тексту кнопок я добавляю стоимость в той валюте, которая вернулась. SkuDetails — класс, содержащий в себе информацию о каждой покупке.
Вот вам пример того, как обрабатывать информацию в методе SkuDetailsResponseListener():
Здесь, в начале проверяется, что запрос прошёл успешно и информация о каких-то покупках вернулась, потом в цикле получается информация о каждой покупке и что-то с ней делается по необходимости.
Важно сохранить эти самые SkuDetails для каждой покупки, если вы хотите отправлять запросы на выполнение покупки. Метод, который это реализует — требует в качестве одного из параметров SkuDetails покупки, а другого метода его получить или создать я не нашёл, хотя может он и есть.
Задача 3. Выполнение запроса на покупку и подтверждение покупки
Теперь можно рассмотреть процесс самой покупки. Первое, что нужно сделать — отправить запрос из библиотеки, выглядит это очень просто:
// Retrieve a value for «skuDetails» by calling querySkuDetailsAsync().
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetails)
.build();
int responseCode = billingClient.launchBillingFlow(flowParams);
Всего две строчки, создаём параметр запроса, указывая там информацию о покупке, которая нас интересует и вызываем функцию показа окна для оплаты.
Как я говорил выше, удобно сохранять информацию ( SkuDetails ), полученные в задаче 2, чтобы использовать их здесь. Возможно, можно получить их иным способом.
После выполнения этого кода мы увидим окно запроса на оплату.
Источник: dzen.ru
Google выпустил Play Billing Library для упрощения работы со встроенными покупками
Эта библиотека направлена на упрощение процесса оплаты, она включает в себя несколько удобных классов и функций для интеграции с In-app Billing API.
Все разработчики хотят зарабатывать деньги через свои приложения, но не все могут справиться с различными типами оплаты. В 2013 году был выпущен Google Play In-app Billing API v3, который помогал разработчикам со встроенными покупками и подписками в приложениях. Год за годом в API появлялись новые функции — обновление подписки, ее изменение, бесплатные пробные версии, пробные цены, промо-коды и многое другое.
Основываясь на отзывах разработчиков, Google анонсировал запуск Play Billing Library — Developer Preview 1. Эта библиотека направлена на упрощение процесса оплаты, она включает в себя несколько удобных классов и функций для интеграции с In-app Billing API. Библиотека также предоставляет слой абстракции поверх Android Interface Definition Language (AIDL), что упрощает создание интерфейса между вашим приложением и In-app Billing API.
Источник: apptractor.ru
Библиотеки поддержки Google Play: что это такое?
В «Google Play» много библиотек, которые созданы для того, чтобы предоставить разработчикам мобильных приложений для «Андроид» все функции API. Инструменты поддержки оснащены уникальными функциями, которые работают на устаревших версиях операционных систем (ОС). При разработке «Google» добавляет службы для расширения возможностей приложений.
Самые популярные функции API «Google Play»:
- идентификация пользователя;
- географические карты «Google»;
- трекинг;
- отслеживание действий.
Работоспособность библиотек обеспечивается специальными сенсорами. На смартфонах на платформе «Андроид» могут работать разные библиотеки поддержки:
- «Support Library» – важный и очень известный пакет. Позволяет на старых версиях ОС пользоваться возможностями новых версий «Андроид». Для этого библиотека использует классы, которые работают как современные нововведения. Благодаря этому они отлично работают на старых версиях;
- «Glide» – эта библиотека отвечает за загрузку графического контента с качественным API. Благодаря этому пользователь может производить любые действия с изображениями: загружать, менять масштаб, кешировать и пр.;
- «Play Billing Library» – используется для оплаты в приложении. Библиотека пригодится желающим монетизировать программу с помощью покупок и подписок;
- «ThreeTen» – отвечает за дату и время. Имеет ряд преимуществ перед аналогичными инструментами;
- «Timber» – применяется для логирования программ. Поддерживает использование логина в форматированных строках и исключениях;
- «ActivityRecognitionClient» – используется для распознавания действий пользователя. Программа отслеживает ходьбу, поездки на автомобиле, чтение электронных книг и т. п.
Это основные инструменты поддержки «Google Play», с помощью которых можно использовать нововведения обновлённых версий ОС «Андроид» на старых версиях платформы. То есть новые функции будут работать так же, как на новых версиях «Андроид».
Источник: ctroim-vce.ru