Библиотека для совершения покупок внутри приложений (Android In-App Billing v.3)

265cdf533aaa420f9682ab16da85bc12.pngCheckout («касса», «кассовый аппарат») — это библиотека для совершения покупок внутри приложений на базе Android In-App Billing v. 3. Основная цель — уменьшить время разработчика, затрачиваемое на внедрение платежей в Андроид приложения. Проект был вдохновлён библиотекой Volley, и проектировался для того, чтобы быть максимально простым в использовании, быстрым и гибким.Существует несколько способов подключить библиотеку в проект: Загрузить исходный код из github репозитория и скопировать его в свой проект Для пользователей Maven использовать следующую зависимость: org.solovyev.android checkout x.x.x Для пользователей Gradle использовать следующую зависимость: compile 'org.solovyev.android: checkout: x.x.x@aar' Загрузить нужный архив из репозитория Библиотека требует com.android.vending.BILLING разрешение (permission).Если вы подключили библиотеку как зависимость (например, в Maven или Gradle), то дополнительно делать ничего не надо. В противном случае, нужно добавить следующую строчку в AndroidManifest.xml:

Библиотека содержит 3 основных класса: Billing, Checkout и Inventory.Класс Billing обрабатывает запросы на покупку (см. методы IInAppBillingService.aidl) и управляет подкючением к сервису Google Play. Этот класс лучше всего использовать как синглтон, для того чтобы все запросы выстраивались в одну очередь и использовали один кеш. Например, класс приложения может выглядеть следующим образом:

public class MyApplication extends Application { /** * For better performance billing class should be used as singleton */ @Nonnull private final Billing billing = new Billing (this, new Billing.Configuration () { @Nonnull @Override public String getPublicKey () { return «Your public key, don’t forget to encrypt it somehow»; }

@Nullable @Override public Cache getCache () { return Billing.newCache (); } });

/** * Application wide {@link org.solovyev.android.checkout.Checkout} instance (can be used anywhere in the app). * This instance contains all available products in the app. */ @Nonnull private final Checkout checkout = Checkout.forApplication (billing, Products.create ().add (IN_APP, asList («product»)));

@Nonnull private static MyApplication instance;

public MyApplication () { instance = this; }

@Override public void onCreate () { super.onCreate (); billing.connect (); }

public static MyApplication get () { return instance; }

@Nonnull public Checkout getCheckout () { return checkout; }

//… } Класс Billing можно использовать для выполнения запросов напрямую, но чаще удобнее использовать посредника — класс Checkout. Последний добавляет к каждому запросу тег, по которому запрос может быть отменён, что может быть полезным, например, в Activity. Checkout позволяет загрузить текущее состояние покупок через метод Checkout#loadInventory (). Также Checkout, а точнее его наследник ActivityCheckout, предоставляет доступ к PurchaseFlow, который в свою очередь осуществляет действия, нужные для покупки. Код класса Activity, в котором отображается список покупок, и который позволяет совершать покупки, представлен ниже: public class MyActivity extends Activity { @Nonnull private final ActivityCheckout checkout = Checkout.forActivity (this, MyApplication.get ().getCheckout ());

@Nonnull private Inventory inventory;

@Override protected void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); checkout.start (); // you only need this if this activity starts purchase process checkout.createPurchaseFlow (new PurchaseListener ()); // you only need this if this activity needs information about purchases/SKUs inventory = checkout.loadInventory (); inventory.whenLoaded (new InventoryLoadedListener ()) }

@Override protected void onActivityResult (int requestCode, int resultCode, Intent data) { super.onActivityResult (requestCode, resultCode, data); checkout.onActivityResult (requestCode, resultCode, data); }

@Override protected void onDestroy () { checkout.stop (); super.onDestroy (); }

//… }

Исходный код доступен в моём репозитории на github. Там же вы найдёте исходный код тестового приложения (само приложение может быть установлено из Google Play). Всё под лицензией Apache License, Version 2.0. В библиотеке есть над чем работать (например, не хватает покрытия тестами, и было бы неплохо иметь процедуру миграции из одной популярной библиотеки). Но в целом, ей уже можно пользоваться в продакшене, что я и делаю в своём приложении Say it right!.Вопросы и пожелания приветствуются в комментариях к статье, а также в багтрекере на гитхабе.

© Habrahabr.ru