Danial Goodwin Danial Goodwin

Over the course of a few days this week, for my side project, I implemented Android in-app billing v2 in Kotlin. It took about 5 hours to read through everything and implement it, but it should have taken less than an hour with the right sample code and walk-through.

This is that walk-through that I would have wanted to just quickly implement subscription services in my app.

Google, in general, has good documentation for their in-app billing, but their code sample was more helpful for me, even though it wasn't updated for the latest version of the library. There was a major version update with breaking changes that couldn't be copy-pasted into a current app.

There are about ten main pages of documentation for in-app billing, but to simply get started and running, you will only need one doc page and one sample code page:

  • https://developer.android.com/google/play/billing/billing_overview
  • https://github.com/googlesamples/android-play-billing/blob/master/TrivialDrive_v2/shared-module/src/main/java/com/example/billingmodule/billing/BillingManager.java


I can just provide the highlights and updated code that will actually work...

  • Product IDs must be unique and can NOT be reused. Product IDs must start with a lowercase letter or a number and must be composed of only lowercase letters (a-z), numbers (0-9), underscores (_), and periods (.). The product ID 'android.test' is unavailable for use, along with all product IDs that start with 'android.test'.
  • Subscriptions can NOT be unpublished
  • Subscription prices must be within a certain price range, US currently USD .99 - 400.00: https://support.google.com/googleplay/android-developer/table/3541286
  • The easiest way to test your purchase flow is to have testers defined in the Google Play Console > Settings > Developer account > Account details > License Testing > 'Gmail accounts with testing access'


  • Add implementation 'com.android.billingclient:billing:2.0.0' in your app's build.gradle file
  • Add <uses-permission android:name="com.android.vending.BILLING" /> in your app's AndroidManifest.xml file
  • Copy+paste this gist, then change the SKUs for your usage: https://gist.github.com/danialgoodwin/5bc709b19b776e707a827772401aaf96 (shown below)

From "0" to "it works on my machine" :p