In-app purchases on Android: new and upcoming
A closer look at the I/O 2018 announcements
Google I/O 2018 is just behind us, but it brought a lot of news when it comes to in-app purchases, both already available and coming soon. In this article, I will try to summarize all the new announcements (spoiler: there’s a ton of stuff!) and explain what they are and how can you benefit from them.
Play Billing Library 1.1
The Play Billing Library (PBL, in short) was announced in September 2017 and has since started gaining traction, due to its immensely simpler integration process and guarantee of support. Most importantly, it is and will be the only way to get new features going forward!
“When we roll out price changes, that feature will also only be available via the Play Billing Library”
I was curious and I took a look at the source code of the library. The way Google will enforce these “exclusive” features seem to be done at the In-app Billing Service level that lives within Play Services, by checking the package name of the client and its version.
This announcement also implies that C++ support will be provided, and it’s already in the works at the time of this writing.
There is already one feature that is only available if you make use of PBL, and that’s the ability to upgrade/downgrade on the same renewal date. Let’s take a look.
Upgrading/downgrading on the same renewal date
When migrating to a different subscription product, the billing date would change most of the times. With this new capability, the developer controls what happens to the billing cycle. There are three supported modes:
IMMEDIATE_WITH_TIME_PRORATIONThe default behavior. When downgrading, the billing date is changed according to the remaining amount of the last time the user paid. When upgrading, the user is charged immediately and, again, the new billing date is calculated according to the amount that was last paid.
IMMEDIATE_AND_CHARGE_PRORATED_PRICE This is only available when upgrading a subscription, and allows the billing date to remain unchanged and the user to be charged immediately.
IMMEDIATE_WITHOUT_PRORATION This option allows to leave the billing date unchanged, but to let the user be charged at the next billing cycle.
Change existing SKUs price points
This is such a huge deal for so many companies and developers! Before, changing price points was a manual ordeal: one would have to create a new SKU with the new price point, have the app check for users on the old price point, and prompt them to upgrade/downgrade. But “now” (it’s still in Early Access Program, you can apply here) all you need to do is changing the price point, and the Play Store will handle that automatically for you. How awesome is that!
It’s worth noting that this feature will also be a PBL exclusive going forward.
Availability: ✅ 🕓 (rolling out)
Given that subscription management is only available within the Play Store app itself, in many cases you want to redirect your users there. Before, you could only simplify this task by opening the Play Store on your app’s page, but from there the user would have to figure out where to click next.
A small but yet incredibly nice improvement is to being able to link users to the “Manage subscription” page for your app, that now lives within the “Subscriptions” section of the Play Store app. The integration is trivial, just fire this
Intent and you’re done!
One of the most useful insight you can get when a user decides to cancel their subscription is to understand the reason behind it. Again, before developers would have to come up with custom solutions and handle everything manually.
Say hello to the new baked-in cancellation survey! It requires zero efforts on the developer side, because it’s kept within the Play Store cancellation flow. You can analyze the results from your Play Developer Console and determine what’s the best way to act upon that.
Backup payment method
Another improvement that was added to the Play Store app is the ability to set a backup payment method in case the first one failed to allow billing for whatever reason.
This drastically improves the experience for the user and minimizes a disruption for the service you provide to them.
Google Developer Console + Play Developer API
Both the Developer Console and the Play Developer API have seen a bunch of updates as well. I assume you’re all familiar with the console, but you might not be with the API. The Play Developer API is a set of REST APIs that can be use for two macro areas:
- Handling and automating the interaction with the Developer Console when it comes to managing releases, store listings and in-app products listings
- Managing the users’ in-app products (this module was formally known as Purchase Status API)
The latter has been, and still is, particularly important because it’s the only way that we can issue subscription discounts to users: we can use the API to defer their payment for a given amount of time, after which the user will be billed again (unless another deferring is applied, that is).
Let’s see what’s new on these topics. There’s a whole lot of other new additions to the console that spaces beyond in-app products, so if you’re interested, check out this I/O session.
Partial refunds and selective refunds
Availability (console): ✅
Availability (API): ❓
It is now possible to issue a partial refund for a user subscription, as opposed to either refunding the whole paid amount or not refunding at all. Moreover, we can now decide to refund any past subscription, without being limited to the current/last one only: all it takes is to pass the order ID.
Even though it should already be available, the official API reference doesn’t seem to reflect this possibility, so we just need to be patient a little more.
First off, the subscription retention report has been revamped. There’s a pretty thorough cohort analysis, with specific focus on different initiatives (free trial period is mentioned).
The subscription cancellation report has also seen a lot of changes. Besides being better organized, it now also includes results from the Cancellation Survey mentioned earlier, so that you have one place to monitor the current state. There’s even more insights towards the win-back initiatives, like the grace period.
It’ll be interesting to see if the survey results will be exportable and/or accessible via APIs.
Flexible introductory price points
Another greatly welcomed addition is the freedom to specify an introductory price for a product that differs from the regular billing price. This allows for greater flexibility when offering the users a less expensive way of trying your app/service.
It’s extremely refreshing to see so many news on the in-app products side, especially after years of what looked like neglect.
I’m particularly excited for the Play Billing Library being taken seriously and continuing to be developer further. And the ability to issue mandatory price changes is something that should’ve been there a long long time ago, so I’ll take that too with open arms.
Now, if only we could have discount codes for subscriptions as well, it’d be great!