In-App purchases are a great way to build an app with upgrades to let your customers decide what they're willing to pay for but the workflow for in-app purchases is broken.
I've just suffered about 20 minutes of frustration thanks to in-app purchases. I bought flighttrack back in 2011 and have been a big fan. For the past year or so I've forwarded every itinerary I get for flights to firstname.lastname@example.org and automagically it appears in my flighttrack account so that as my departure date comes I get status updates on the flight.
I'm running the latest beta of the iOS 6 software and decided it was finally time to start from "app zero" - a fresh install and just add back the apps I use as I need them. Last week I received a flight itinerary and forwarded it to email@example.com as usual. Last night I saw that I had a flighttrack update I hadn't installed so I pulled it down.
This morning when I came to check the details of my mother-in-law's inbound flight from Boston it wasn't there. After a brief pause that made sense - I hadn't logged into tripit since my user data was gone. I dug around but all I could find was a toggle to sync with tripit but for a $4.99 upgrade. Furious (not enough coffee yet either). I pulled out the new iPad and saw that it was also not showing my plans. Even more annoyed.
Stomped around my keyboard on my macbook as I looked online to find out if they'd removed the tripit sync feature. I'd payed $4.99 for this app - why the hell would I pay extra now for what was a core feature. I felt cheated and fired up mail and prepared to email support with a firey complaint.
Just as I typed the first paragraph I had a vague recollection that I might have purchased the upgrade... The Apple store didn't help me discover if I'd bought it - there was no indication. Skimming purchase history but I had no idea when I'd bought it. Looking at the app there was no indication that I might have already purchased the upgrade.
Gmail. Bottomless email. I opened Gmail where my receipts go and searched for FlightTrack and found that in 2011 I'd not only purchased flighttrack but the same receipt period also included the $4.99 upgrade. Tada.
Okay, so I purchased it but how to reinstate the purchase? Our app WalkJogRun had in-app purchases at one point and I remember the customer service nightmare of telling people that the app store doesn't forget that if you purchase something once, it's yours forever but that's a leap of faith I'd asked people to make. I was asking them to do what I was facing now.
I clicked the "details" button in FlightTrack to se the upgrade info. Tentatively I pushed the button marked "Upgrade for $4.99":
"Confirm your in-app purchase". Do you want to buy one FlightTrack Pro Upgrade for $4.99 [Cancel/Buy]".
Wait - I know I bought this but it *seems* like the app store has forgotten me! Use the force.
I clicked buy and see the Apple ID dialog to login. That makes sense. If I've not logged in recently it doesn't want to assume I'm approving a purchase. Login.
"You've already purchased this. Tap OK to download it again for free. [Cancel / OK]"
Phew. But really, that was touch and go for a while. I mean, not life threatening but certainly troublesome to think I'm going to be cheated into paying a second time for something I already purchased. It's made more nerve wracking by the sequence of events if you're logged in and haven't purchased something before:
Click Upgrade > see the confirm your in-app purchase dialog > hit Buy - you're charged and the upgrade happens.
Fixing the flow
Apple provides, as part of the storekit api, a mechanism for checking for user purchases designed to be triggered when the app opens so puchases are automatically re-instated on any devices you add but many developers don't make this happen. It's sad because it's such an easy thing to test - purchase your upgrade, delete the app and then reinstall it. Confirm that your storekit calls to reinstate purchases are being called and the purchases are reinstated correctly.
I would like to see Apple add options though to the API for alternative workflows. Instead of Buy and Cancel before you login, prompt the user to login before showing the confirmation dialog. Once a user logs in, the visitor would either see "you've already purchased this..." or "Confirm your in-app purchase..." It's a minor tweak but as it stands, iOS devs are getting customer service requests, some of which they can mitigate but a less scary checkout would certainly help!
Anyway, go download FlightTrack. It's a great app and worth paying $9.99 out of the box for but if you're in doubt, get the $4.99 version and manually add a flight you're taking to see what you think.