Shared publicly  - 
Update 2: +Trevor Johns informed me that the Market/Checkout implemented a variety of changes on Dec 22 that fixed a lot of issues. I can confirm that I have not had any new issues since Dec 22. However, a lot of my older orders are still unreported or are missing developer payloads.

Update 1: +Trevor Johns of the Market Developer relations team has contacted me... will keep this post updated with the results of our findings.

Don't Use Android Market In App Billing. Seriously.

Whether you are a consumer, or a developer, you do not want to purchase or use Android Market In App Billing. Why? Because there's a 3-4% reported failure rate. [1]

The way in app billing works:
1) User makes a purchase.
2) Android Market purchase begins.
3) The purchase completes, and the user is returned to the application
4) The purchase is reported to the application. [2]

Seems simple enough. The problem though is that step 4 never happens: the application never gets a report of the purchase succeeding. However, the credit card has been charged. Furthermore, you can't initiate another attempt to purchase, because the Android Market will prevent duplicate purchases. [3] To add insult to injury, the consumer does not even have the usual luxury of a 15 minute refund window, because it is not possible to refund in app purchases.

If your app is afflicted by this bug on a user's phone, it is forever broken. Even if your app requests a list of all in app purchases from the market, there is no response from the Market, and the user will not be able to access their purchases for that app.

The end result is that the user gets robbed, and the developer gets a 1 star rating and has to manually fix the user's purchase or refund it. [4]

This is not an issue just occurring with my apps. Other developers, such as +François Simond aka Supercurio, Chainfire, and +Adriano Maia aka NotifyMyAndroid, have run into this as well.

I have reached out to the Android Market team several times about this (and this is a feat in itself, I dare you to try to find a support contact that actually connects you to a live person). So, now, I write this, shamelessly leveraging my follower count, to push this issue some more and warn developers and users about the repercussions of using a broken billing system.

So, as an open invitation to the Android Market team, I will happily provide you order numbers for broken purchases. I'd love to see this get fixed, as outside of this, the Market works great. But a serious issue such as this, should not go ignored for so long. Given that +Android is taking 30% off the top of our sales, there should be some accountability and support here.

PS, Another in app purchasing bug: A managed purchase gets "cancelled" during the purchase process. The user then tries to purchase again, but can't because another purchase is in progress. This happened to me... while trying to purchase my own app.

[1] This statistic comes from my sales of ROM Manager and DeskSMS. Considering this is the reported failure rate, it can conceivably be higher. I have disabled ROM Manager's in app purchases (and use a normal paid applications instead) simply because the failure rate at that volume of sales is significant.

[2] A signed payload for the ACTION_PURCHASE_STATE_CHANGED broadcast reports the purchase that was made. This same broadcast is also supposed to occur on RESTORE_TRANSACTIONS, and also fails in that instance. 500 error in logcat from "Vending".

[3] Duplicate purchases are not allowed with "managed" in app purchases.

[4] I ended up having to create a redemption/activation code system to me to fix these broken purchases and provide the user what they paid for.
Stephen Hales (Teamhalesquad)'s profile photoBram de Kruijff's profile photoMarco Zietzling's profile photoPavel Alexeev's profile photo
Good luck Koush! Thanks for all you've done for Android.
Have you talked to +Reto Meier about this? I was following the Market bug related to this issue and was thinking to implement this on one of my applications. I never actually did 'cause the problem seems unsolved and +Google doesn't seem to care.
I've just run into this issue for the first time on my app, though I don't move large numbers. It was an unmanaged purchase and I was able to refund, after which the user bought it again and it went through right away. +Chris Pruett just mentioned an issue like that during the Android developer office hours, so maybe comment on +Reto Meier 's post as well.
Hope that this helps the big G realise it needs solving, effects too many people to be ignored IMHO!
Interesting. I haven't seen this behavior yet with unmanaged purchases in Tha Icon Ultimate. Granted, it has only had about 900 transactions. Still, no users have complained of being charged without getting their product.
Yeah, this happened to my wife a couple weeks ago. Took uninstalling and reinstalling the app before the in-app purchase was finally recognized three hours later.
Let's watch the Ripples Grow
yes...another thing is if you have several android devices under the 1 account if u do an in app purchase in device A then that app that you purchase via in app will not be recognise as being having purchased in the market in device B
+Fernando De Leon I've not had a problem with that ever. I have one managed and two unmanaged in-app products. Of course the unmanaged ones will not transfter over, but the managed one does it without a hitch.
+Jens Zalzala i bought AirSync as an in app purchase frmo doubleTwist. I went to my tablet and I couldnt see AirSync as being purchased it. So for me to get AirSync on my tablet i had to purchased it again?!! that to me is a serious bug.
I have never personally fallen foul of this but am happy to help by spreading the word! also +Google UK +Android tags may help get the word out. If everyone adds it to their comments they will have no choice but to notice it in their feeds!
+Fernando De Leon That is up to the app developer. If you have seen this problem, they are probably using unmanaged purchases.

I use App Engine to keep track of in-app currency bought with unmanaged purchases. For Tha Icon Ultimate, purchases are synced across devices without relying on the Market to do the work.
Hello! I am the developer of +NotifyMyAndroid .

I sign bellow of what +Koushik Dutta wrote, and I will go further and add that the same happens even on the regular Market purchases (non in-app).

The symptoms:

- User buys the app on the phone
- The transaction times out for unknown reasons
- Later on the transaction gets cancelled by the Market with the message "Order canceled due to internal error in Market."

However, at this point:

- The customer creditcard was billed and the transaction was never refunded.
- The user can't be refunded either by in-app or by me, since the transaction appears as Cancelled on the Market interface.
- And since I use the Market API for licensing, the customer can't re-buy or use the application, because the Market does not allows it.

Most of the time the customer has to contact Google or wait until the Market clears the error so they can buy the app again. Which is ugly and translates in a loss of potential buyers.

Thank you +Koushik Dutta for stepping up and bring this issue to the public.
Interesting especially considering it was mentioned in the android developer hangout yesterday.
+Fernando De Leon To elaborate on what +Jon F Hancock said, there are two types of in-app purchases. One of them is unmanaged and will not transfer to any other device by itself and will also be lost if you uninstall and re-install the app. Why have those? Gold pieces, for example. If you buy 10 gold pieces, you might want to buy 10 more at some point.
Managed purchases are kept track of in the Android Market and should be available on all your devices and recovered when you re-install an app. I'm not sure why AirSync chose to go the other way. I certainly would have expected it to be available on all my devices.
+Jon F Hancock +Jens Zalzala to an end user then this is a bad policy and should not be allowed, I am not sure why AirSync chose this but then users are at a lost not knowing if the dev has managed or unmanaged setup in their in-app purchasing process.
thanks for letting me know though but from that time i wont be doing in-app purchase
this has happened to me a couple times already when trying to bill app purchases to my Cellular Provider..Annoying to say the least.
j stern
Google do something
+Jens Zalzala It's worth noting that in our case, most of the errors were ours; our application doesn't fit the sample code pattern very well (we have periods where the app was not able to accept Market messages), and that's where most of our failures come from. Now that that's fixed, we still have some reports of failures, but it's unclear if these are users who are still using the old version or not, and if they have upgraded, whether the bug is in our code or not.
jepp Google should step in and fix it -.- but the market is still a buggy beast :P every 3.-4th buy or download just won't start and cannot be made to until the phones is rebooted :P and there are other issues that still make it an unfinished product so far -.- sometimes feels like beta
While in-app purchases are non-refundable, credit card transactional complaints to your credit card company are surely possible and will almost surely end up with them finding in your favor if something like this happens. Your credit card company will revert the charges and the problem will be solved. the vendor might get hit with a fee for the refunded payment though.
+Gabriel Walsh Developers can refund in-app purchases. I've done it. The example listed above seems odd. My guess would be that the purchase was cancelled, but the customer probably just needed to wait a day for the cancellation to show.
I'd love to see that stats for GoogleTV in app purchases. The market only seems to work about 1 in 4 times on GoogleTV.
Luckily this hasn't happened with any of my Stair Dismount purchases
+Luke Driscoll Do you remember it being slightly better right after the upgrade? I feel like the whole thing is grinding to a halt.
+Trevor Johns ähmmm right… this kind of one-way support does not really work that well :P
and the page you mentioned does not even have link to report billing issues which makes it even more stupid
a simple Forum (like for any other Google Product) with a LOT of GoogleSided participation would be nice (2-3 PRpeople would be nice)
If one has an issue. till now it was harder to get an outside person with nearly !no! insight at Google than a car engineer at Volkswagen or Mercedes
Yeah, do whatever you want. Just keep in mind that some things are creepy.
I'm hitting the share button:-)
+Trevor Johns, seriously. It's not personal. It's just creepy. But I'd love to know why you picked it.
If Google has a soft underbelly, customer service is it. While they do every thing they can to leverage technology and stay lean, things break down very badly when a human is required. At that point their service either disappears or becomes heavy handed. I have a feeling that this aspect will ultimately define the limit to Google's growth.
"PS, Another in app purchasing bug: A managed purchase gets "cancelled" during the purchase process. The user then tries to purchase again, but can't because another purchase is in progress. This happened to me... while trying to purchase my own app.

This happens repeatedly even with regular applications in the Market. By time I was done, the app had been purchased three times and refunded hopefully at least twice.
+Cole Mickens I have direct experience of that managed purchase auto-cancellation issue too. +Dan Morrill kindly looked into it, since it happened to him, and the best guess was that it is a consequence of the user's network connection dropping at some crucial moment. There is probably an rather optimistic timeout somewhere server-side.
+Koushik Dutta Is there a pattern to this, as in any specific versions, handsets, app category? I haven't had issues or at least have not noticed any!
+1d love your app hope you get the attention you deserve
This exact thing is what caused Gameloft to get flamed because people perceive them as robbing the customer or building a bad app because the user never gets their stuff or renew their subscription. Broken system is to blame.
I guess the Android team needs a more extensive and diligent quality guru. This is apparent across all Google products and is the Big G's Achilles heel.
+Trevor Johns that's why i keep asking +Google+ for a way to fork thread comments into new threads! that way all this talk about your profile pic would totally rock out there :p
+Trevor Johns As a consumer, I would like to know when might gain the ability to PIN protect app purchases and in-app purchases. I have five kids that have become quite fond of all our Android devices and Google TV as well. But i have no way to prevent someone walking up and buying apps or purchases within apps. My little girl loves the story book app on Google TV but it is so easy for her to click on and buy other books without consent. Is this something we may see addressed in the near future? Thanks!

Aside from that, I have also experienced this same issue as others described. I live right on the edge of our 3G coverage and so I often get a bad signal. I have encountered this same issue during purchase on at least to different devices. I would make a purchase and then it prompted an error and said it was canceled. It would take at least three or four tries before it went through. I had also tried wiping my data for the Market app. It then allowed me to make the purchase.
+Trevor Johns not to snub you but why is G+ turning out to be the new way to get a response from Google product support teams ? I feel someone at google needs to assess the use case for their 'official' support forums versus social media inlets/outlets. The official forums for google products are riddled with users screaming for google employees attention whereas support/feedback concerns on G+ get immediate responses.
I ran into this issue as well, but added code to my app to first check to see if the in-app purchase has already been done before telling the user that they have to purchase. I also generate a local temporary license file that is good for a few weeks with a 2 week grace period. Then the app checks the market again to re-validate the purchase (in case of canceled orders). If the app is uninstalled and re-installed, it does not make them do the in-app purchase again.
+Koushik Dutta If you would like more info on how I did that, just PM me. I'll give you more detail.
Alex Gu
And this is seriously the reason why I never use in-App-billing! You can handle all billing with Market-Apps. (like droots)
Maxx D
It's starting to seem like the only way to get Google to pay attention to any sort of problem is to announce it loud and wide on the internet. Google is big enough and powerful enough to have better service and support than this, particularly for products involving an exchange of money.
+AJ Nash Funny guy. Obviously John was the one, we can read. The point is that a simple G+ post can be read by someone, anyone, and find it's way to MSNBC. The thought of that makes me smile. +Maxx Daymon Agree completely, you get it.
We quite often get get users saying that they've paid for an in app purchase but not received anything. I was always working on the basis that there was some kind of connection error when we add their purchase to our db. I hadn't considered the fact that the purchase was going through, but not reporting back that it did.

How exactly did you work out the 3-4%. Is it from users emailing you?
+Koushik Dutta Is there anything that we need to do if we are experiencing this issue, or is +Trevor Johns taking care of this? I have purchased your app and am having this very problem.
I'm experiencing these problems as well with Vampire's Fall: Only difference is that I estimate the frequence to 10%. The way I handle it: I ping my server every time the user initializes a purchase and every time the user recieves the item. So if the second ping doesen't occur an hour after the first ping, I refund the money with a message why.
I see a related problem more and more frequently too. For unmanaged purchases, the transaction is cancelled with "took too long to deliver" as the reason. People try 10 time to buy it and it fails every time.
+Jon F Hancock I'm seeing something similar with regular purchases. Also this: Order canceled due to internal error in Market. That one seems to always post thrice in a row. Not sure if they're actually trying to buy it three times then giving up, or if the Android Market tries three times.
Thanks for bringing this subject up. I have an app that uses in-app Billing. IMO the whole idea of "Your user will be able to access what they just purchased from you when Market notifies your application of the purchase, *unless it doesn't*" seems pretty non-deterministic for something dealing with a user's money. I hope this gets fixed, and soon.
+Trevor Johns I'm curious about something. To bypass this problem, is it possible to set up a notification handler web service (as described in to be notified of new orders appearing on a Google Merchant account, and store subscription information? My app currently relies on in-app notifications from Market to send a subscription notification to the server. Soon after, it requests a list of current subscriptions from the server, then the user can make use of the item they purchased. If we could bypass the in-app notification part of the process, it might be a good workaround. Thanks.
+Trevor Johns That's true, the order ID comes in the notification an Android application gets from Market once your purchase state changes. My hope was that I could perhaps bypass that part, and have Checkout notify a web service with the same information instead, but it doesn't sound like that will work. In any case, I appreciate the response.
I tried to implement in-app purchase on my app to.
I always get a failure with the reason "Took too long to deliver".
It drove me nuts until I found this thread. Now I know it's not
my fault, but I'm suprised Google hasnt already fixed this.
A few months later....
What is the situation today?
That is the case here. I have not seen any instances of this in the last 3 months or more.
I guess it is safe(r) to use now.
Hi, I just saw this today. My experience with my app last year (Phresheez, a ski tracking app) exactly mirrors yours, except mine used unmanaged purchases. This year, the non-delivery rate seems to be about 30-50% rather than 5% which is a fatal problem. I see that they have a new in-app API which claims that it reduces the non-delivery rate, but I'm not eager to spend a bunch of time implementing it only to find that it's just back to the unacceptable 5% rate. It's astounding that there is so little about this when googling, because this is a HUGE problem for both customers and developers alike. It's basically Google ripping people off and blaming it on the developer.
Will you help people like me who have to rebuy touch recovery? Maybe provide us a code to install it?
Add a comment...