If the rollout of an updated Play Store yesterday with some tweaked interface elements and an order history page was exciting, just wait until you see what else was hidden inside the latest version. I don't think there's any point in teasing, this might be the one we've all been waiting for. The Play Store is finally going to enable a method to offer discounted purchases. There are still a lot of unknowns, but it's real, and it's probably coming very soon.

Disclaimer: Teardowns are speculative and based on incomplete evidence. There is always a chance that details may change, or entire features may be cancelled. As with all rumors nothing is 100% until it's officially announced. It's also possible that the guesses made here are just flat out wrong.

Play Store Discount Vouchers

Before everybody gets their hopes up, there are just a few details that cause me to have reservations about how this feature will work. Right now, it looks like the Play Store is going to allow "gifting" of paid apps and other content. It's easy to want to believe this because we've been waiting 6 years for this very feature. For as long as the Play Store has supported paid apps, people have complained that there's no way to purchase apps for other people. Developers want this so they can give out free premium apps as rewards to their beta testers and to reviewers and bloggers. Websites like ours want to be able to run contests with apps as the prizes. Even families want this for an easy way to hand out games to kids. It's basically the #1 most requested feature for the Play Store, ever.

I've spent most of the night combing over the code and I think I have a pretty good picture of what Google has in mind. Unfortunately, there are a few details that simply can't be sorted out just from looking at just one side of the equation, so we'll probably have to wait for an official rollout before all of the questions can be answered. Some of these details come from the strings (shown below) and layouts, and quite a bit comes from the code.

Here's what I know so far. The Play Store refers to the concept as "vouchers," and uses this term in the names of the strings, layouts, and all of the associated source code. Strangely, the word "reward" is used in the few customer-facing strings. More on that in a bit...

<string name="content_description_selected_voucher_entry">Selected</string>
<string name="voucher_available_warning_message">You have a reward that applies to this item.</string>
<string name="voucher_section_none_selected">Choose a reward</string>
<string name="voucher_section_has_selected">Choose or remove reward</string>

Vouchers must be attached to a user account to be used, and they impart a discount to specific products. When a voucher applies to something on the Play Store, a short message will appear on the item page to let users know that special pricing is available. If more than one voucher applies to a product, users have the option to pick a voucher during checkout, or to use none at all. And as you might expect, the discount is always visible throughout the checkout process. A hard-coded error message reads, "Multiple applied vouchers is not supported," which clearly indicates that stacking multiple vouchers on a single product isn't an option.

<string name="cart_discounted_price">(%1$s)</string>
<string name="cart_original_price">Original %1$s</string>

There are two custom views used to display vouchers in the interface: light_purchase_cart_voucher_entry and selected_voucher_container.

  • light_purchase_cart_voucher_entry shows the title of the voucher and a checkmark to indicate if it's currently selected. This appears to belong as a line item during the checkout process.
  • selected_voucher_container is a bit larger, and contains the same checkmark and title as its simpler counterpart. It also adds the original and discounted prices. This view appears to be used in a couple of spots, particularly in a list to make comparing vouchers as easy as possible.

Things get a little foggier from here. To begin with, despite my best efforts to find a definitive answer, it's not clear if these vouchers will actually work with apps. It's possible that these discount vouchers are only intended for books, music, and movies. At least it's reassuring that there's nothing in the code that clearly prohibits apps from taking part in this program, so let's keep our fingers crossed.

It's clear that vouchers are tied to specific accounts and only work with specific products; but I can't tell if a voucher can apply to a range of products (e.g. all books by Douglas Adams), or if it's limited to a single item (e.g. Last Chance To See). There's also not enough information to determine if vouchers are transferable between accounts, or even how they come to be attached to an account in the first place. It may be that the recipient must be chosen when the voucher is created, or there might be redeemable codes that can be handed out at any time.

All of the accounting is handled on the server-side, so there's no way to tell what types of discounts can be applied. We may see fixed prices for select customers (e.g. $3.99 for a certain book, regardless of price fluctuations), flat discounts (e.g. $3 off the current price), and flexible discounts (e.g. 75% off the current price).

There are a few really big questions that can't be answered from the code:

  • Will this work with apps? We're all really hoping it does.
  • Who can create these vouchers? This feature could be for everybody, just for content owners (i.e. book publisher, studios, app developers), Google's partners, or maybe even just for Google alone.

As I mentioned before, the most curious issue is the use of the word "reward" in the text rather than calling it a discount, coupon, or voucher. The choice in phrasing may change prior to launch, but it's certainly enough to raise suspicions about the end goal. It was suggested that this could be related to the Google Opinion Rewards app due to the name. Perhaps surveys would reward people with specific discounted or free content rather than small quantities of credit. Alternatively, Google may be offering this to partners to use for promotions and events.

Whatever the final details turn out to be, it would be a shame to bring such a heavily demanded feature so close to existence, only to cut it short of going all the way.

As for readiness, I can pretty confidently say that the code is complete and ready to go. Google may be rolling out this version of the Play Store to commence real world testing with select users, or this could be the final version and an announcement may be due out at any time. I was even a bit worried that I wouldn't get this article out before Google made this news public. Whatever is coming, you can probably expect it soon.

Enterprise-Level App Purchases

There is not as much to this feature, but it's pretty obvious what it is from a single string. Google is gearing up to allow for corporate accounts to make app purchases on behalf of their employees. The string below represents a simple message that appears if a user views an app that their employer has already purchased for them. Beyond that, there aren't any useful details. It's not clear if apps are transferable between employees or how the administrator manages the process. On the plus side, it's abundantly clear exactly what this feature is, and it's pretty obvious how it will be used.

<string name="enterprise_admin_purchased_app">Your admin has purchased licenses for this app.</string>

A new enterprise-specific icon was also added. Expect to see this popping up in the near future.

ic_enterprise.png

The code related to this message has no obvious direct connection to the voucher system discussed above, but it's mighty coincidental that this happens to turn up in the same version.

Changing Permission Buckets

This isn't really a big deal, but it's worth noting for those who are interested. As many will recall, Google changed the appearance of the app install dialog back in July. Instead of a complete list of permissions, there is now an abridged list of "buckets" that bundle similar permissions for easier reading. The categories have remained mostly the same since the release, but a few tweaks were made with this version. Now, the buckets for "Contacts/Calendar" and "Camera/Microphone" have been broken up into their constituent components.

old:
<string name="permission_bucket_contacts_calendar_title">Contacts/Calendar</string>
<string name="permission_bucket_contacts_calendar_description">Uses one or more of: calendar, contact information</string>
new:
<string name="permission_bucket_calendar_title">Calendar</string>
<string name="permission_bucket_calendar_description">Uses calendar information</string>
<string name="permission_bucket_contacts_title">Contacts</string>
<string name="permission_bucket_contacts_description">Uses contact information</string>

old:
<string name="permission_bucket_camera_mic_title">Camera/Microphone</string>
<string name="permission_bucket_camera_mic_description">Uses one or more of: camera(s), microphone(s)</string>
new:
<string name="permission_bucket_camera_title">Camera</string>
<string name="permission_bucket_camera_description">"Uses the device's camera(s)"</string>
<string name="permission_bucket_mic_title">Microphone</string>
<string name="permission_bucket_mic_description">"Uses the device's microphone(s)"</string>

Wrap-Up

Alright, everybody, cross your fingers and say a prayer to the digital gods. "We want app gifting. We want app gifting. We want app gifting." Now take a swig of grape soda and munch some Cheez-Its.

Seriously though, this is a feature that is long overdue, and it would allow everybody to get rid of so many silly workarounds like serial numbers, 3rd-party authorization servers, or just handing out completely unprotected apks. Come on Google, let's see this thing through.