views:

126

answers:

4

Apple doesn't offer promotional codes for in-app purchases. What's the best way to let users try the features or content unlocked by in-app purchases for free, while complying with Apple's Developer Guidelines?

The idea is to allow a special set of users (reviewers, key fans, etc.) to access the content or features offered as in-app purchases without paying.

Examples of apps that worked around this limitation would be much appreciated.

A: 

Something like shareware? An app, that has a subset of features enabled until in-app purchase? Apple allows it now.

As example. We've a puzzle game, that has 12 difficulty levels. 4 or 5 of them are available for free and others are unlocked after in-app purchase.

Alexander Babaev
I clarified the question. In the case of your app, how do you allow reviewers to access the 4 or 5 paid levels without paying?
hgpc
It's not possible to allow somebody to play without paying, using in-app purchase. For reviewers sometimes it's more apropriate to create an ad-hoc version. Regarding 4-5 levels without paying — it's rather straightforward usage of in-app purchase feature.
Alexander Babaev
+1  A: 

You could submit a version of your application that has all features unlocked by default.

Submitted apps have a publish date that you can set when you submit (and I believe you can change this on the fly as well) you could simply prevent the app from being published in the App store but still be able to give promotional codes for it.

Eric Schweichler
If the app is published wouldn't anybody be able to download it?
hgpc
No, you can set a publish date, even if your app is approved it won't go live in the app store before the date you set. This is useful when trying to coordinate marketing campaigns. https://itunesconnect.apple.com/docs/iTunesConnect_DeveloperGuide.pdf Check under "Add New Application" - Availability date.
Eric Schweichler
Interesting. This would work for the first version of the app, though. Once it's up, then it wouldn't be possible to do it anymore, would it?
hgpc
There's nothing to prevent you from submitting a new update, again with a publish date in the future.
Eric Schweichler
A: 

You can let them try, say Level 1, of a game and log that in NSUserDefaults.

This way you can let them use premium features for some n number of times before asking them to pay for it.

Though, a smart user will delete the app and reinstall it -- basically getting rid of the NSUserDefaults. Not sure how to avoid that.

Mihir Mathuria
I clarified the question. That said, to avoid the reinstall problem you can log the device UDID and check it against a web service.
hgpc
A: 

I'm working on this now.

What I'm doing is I generate a random code/guid and store that on my webService's DB. Then give that code to who ever you want. They enter that code and it calls the web service passing the code, and device UDID. The webService returns another code indicating if that promocode was valid. If valid then the app will add that purchase to NSUserDefaults or Core Data (however you keep track of purchases).

If you don't have a server up and running (say the content is already in the app bundle) and you don't want a server would require you making an algorithm to generate keys that your app validates. However this is far less robust. Using a web service allows you to prevent 1 working key from being distributed between all users, as you can tie 1 promo code to 1 device.

jamone
Isn't allowing users to enter a promo code in the app against Apple's iPhone Developer Agreement (clause 3-3-3, in particular)? Have you seen any app doing this already?
hgpc
I just looked. Your right. I may try having the device download a short list of approved UDIDs and check if it's on it. I realize this isn't approved easier but may be able to slip under the radar.
jamone