Multi-device support for non-renewing subscription - ios

I'm working on a news app. All news items are fetched from my website. To make a bit of a profit out of it and keep the website running, I implemented some ads. Now, I'd like the user to be able to turn off all ads in the app for a few bucks. I want to provide this option on a yearly basis. So, this year there will be a button in my app, reading something like "No ads in 2013". After paying, the app will be ad free for the rest of the year. In 2014, ads start popping up again and the user can buy the product "No ads in 2014", for the same amount.
I figured a non-renewing subscription would be the way to go here. A few things I haven't figured out yet:
Is it possible to automatically change the name of the in app purchase over time such that it reads "No ads in 2013" in this year and "No ads in 2014" next year, "No ads in 2015" after that, and so on?
Apple states that it is the responsibility of the developer to implement multi-device support. Ok, fair enough, but I haven't found a way to identify a user yet. Users don't need to be logged in to use my app and as far as I know, there is no way to get hold of the user's iTunes login name. How can I transfer the product to a user's new iPhone for example?

After much thought my conclusion is that there is no way to achieve this without bothering the user to log in in some sort of way.
The alternative I came up with is this:
I just create a regular non-consumable in app purchase, with the year embedded in its identifier. This way, in code I can check the identifier against the current year and determine if the user should buy the product with identifier "year + 1".
As non consumable purchases are linked to the user's iTunes account, they are automatically transferred to other devices like a new phone.
Only thing I must not forget is to create a new product for every year to come.

Related

How to implement InApp Purchase iOS for this Pay per view type of app?

I am working on an app that serves new movies every week and users have to buy a movie to be able to watch it. Once an user purchases a movie they can watch it any number of times. We have our own user registration and login system. I want to know do i have to create an In App Product on the iTunes Connect For every movie? We don't want to restore purchases to the different users using same apple id as well, will Apple allow that? I am really confused guys, I'd really appreciate some ideas.

3 Month free only on first installation

I need to implement a system where when the user install my app for the first time, he has 3 month of free use.
After three month the app has to show in-app purchase options.
I need to avoid that if the user remove and reinstall app, he can again use three month of free use.
I thought to use InApp purchase (a free, Non-Consumable item) to achieve my goal.
Using 'Non-Consumable' I have that 'SKPaymentTransaction *originalTransaction' contains the date of original transaction, so I can know If 3 month are expired or not and if the user reinstall or install the app in other devices, he can restore the remaining days using the same iTunes account.
Unfortunatly Apple reject the app using this reasons:
"
11.7: Apps that use IAP to purchase items must assign the correct Purchasability type
11.7
We found that the Purchasability Type for one or more of your In App Purchase products was inappropriately set, which is not in compliance with the App Store Review Guidelines.
'3 mese' is set to Non-Consumable. However, based on product functionality, it would be more appropriate to use the Non-Renewable Subscription In App Purchase type because the service offered by your application requires the user to make an advance payment to access the content or receive the service.
"
They suggest me to use Non-Renewable Subscription, but I dont have free price in Non-Renewable Subscription, so its useless for me.
In wich way I can achive my goal ?
Should I use KeyChain to store some identifier ?
But in this way the user will have 3 month in each device and I will not able to identifier uniquely on my server and, in addition, formatting the iphone he will have another 3 months of free use
Maybe in the app could I force the user to create an account on my server (or unsing parse.com for example) to have 3 month free ? Anyway the user could create several fake accounts except if I ask for personal data as phone number...but I think that Apple could reject the App if I ask personal data
What is the best choice be adopted in these cases?
For this I would firstly, create a back-end system. Possibly using Parse.com. Then I would register the users UDID when they sign up to the app. This way its the device that they have registered not just the app. Then create a code that will allow them to access the app but perform a check in the database on parse to see whether or not they are allowed the free content. If not, then show the payment options.

Apple App Store - bypass listed purchase price?

Is there a way to offer a purchase free of charge for in-app purchases? I'd like to give a free download as a promotional item and not charge the normal price that is listed in iTunes.
You have to code for this in your app. In my app all purchases are registered on parse.com and sync'd between user's devices. I can add a purchase to the class on parse.com for a user and then they get the IAP for free when the data sync's to their device.
Apple don't have any mechanism for this like they do with app purchases unfortunately. The best way I've found is a custom URL scheme, so you can generated a code/string of your custom URL type ://myApp/123456promoCodeFooBar12999 etc, then your app, in response can connect to your server and check this code off against your database (confirming that it has not been used before, and can't be used again on a diff device) before unlocking the feature. This circumvents needing to get UUID's off people etc (which you can't do in code anymore to check against anyway), you just need an email address, send link, user clicks in it, your app opens and away you go :)
edit addition 28 Feb 2014..
an alternate approach might be to submit an separate paid version of the application in which all upgrades are unlocked because they are paid for upfront at purchase time. You may choose to keep this off the iTunes shelf but occasionally put it up, perhaps at a prohibitively high price, $1000 etc, because you can get the normal promo codes off Apple for this one to give to journalists etc, just explain what you are doing to them in your cover letter and I'm sure they'll be more than happy to play ball

iOS App rejected due to wrong purchase type

I am stuck with one of the in-app purchase rejection issue in my app and need some help on this.
What this in-app for?
In our app we have options for user to become premium user. A user can become premium user to enjoy some benefits and it is tied to time. There are two in-app products which defines them
One month premium service.
One year premium service.
Since these are time based service, user expects these service should be made available for that user once he/she purchase the product for the specified time, from all his/her other devices. In order to track whether the user is premium service user or not, once the purchase is done, the app writes a entry in server about premium service. So when user uses other device and logs in, he/she can enjoy the premium service without any issues. For this reason I created the above mentioned products as "consumable", thinking that it is controlled by our server there will be no issues. But apple came back with rejection and asked me to change the products to "non-renewing subscription".
Here is what apple says about this
We found that the Purchasability Type for one or more of your In App Purchase products was inappropriately set, which is not in compliance with the App Store Review Guidelines.
"Premium account service for 1 month and 1 year" IAPs are set to Consumable.
However, based on product functionality, it would be more appropriate to use the Non-Renewable Subscription In App Purchase type because the service offered by your application requires the user to make an advance payment to access the content or receive the service.
The Purchasability type cannot be changed once an In App Purchase product has been created. Therefore, you will need to create a new In App Purchase product with the correct Purchasability Type. To create a new In App Purchase in iTunes Connect, go to Manage Your In App Purchases, select your app, and click "Create New". The current product will show in iTunes Connect as "Rejected".
Non-Renewable Subscription content must be made available to all iOS devices owned by a single user, as indicated in Guideline 11.6 of the App Store Review Guidelines:
11.6 Content subscriptions using IAP must last a minimum of 7 days and be available to the user from all of their iOS devices
If you choose to use user registration to meet this requirement, please keep in mind that it is not appropriate to require user registration. Such user registration must be made optional. It would be appropriate to make it clear to the user that only by registering will they be able to access the content from all of their iOS devices; and to provide them a way to register later, if they wish to access the content on their other iOS devices at a future time.
For more information about Purchasability Type, please to refer to the iTunes Connect Developer Guide.
Now I have created new in-app products which are non-renewing. But this works the same way as I mentioned earlier, i.e. the server keeps track of whether user is premium user or not, expiry date. When user goes to other device and does login, the app comes to know whether user is premium or not and based on that app works.
But I have couple of questions on this,
Should I need to provide the "Restore" button in the app? If so what is the purpose and how it works?
Since the user can access this service only after doing login to the app (it is different from app store account). Will these two logins make any issue?
Please share your valuable inputs.
It is highly unlikely that the user will end up in a situation where they won't be able to use your app unless they restore their purchases, however it is still possible. Imagine your server goes down for a day and during that day some user purchases a subscription, gets a new iPhone, installs your app on the new device and then wipes their old iPhone. I can think of a couple of other, equally unlikely, but still possible situations (Apple receipt validation server going down, etc) in which the purchase receipt will get lost in transit. It's best to provide the button, and if Apple thinks that you need it in your app, you will have a hard time convincing them otherwise.
If by "two logins" you mean user having to log in to your system and then log in to the App Store to purchase the subscription, that should not be a problem.
I recommend you make the changes Apple requested to the Purchasability Type and then re-submit. If you need to clarify a lack of a restore button put it in the notes for the reviewer

iOS In App non-renewed subscription bought multiple times

I'm trying to implement the in app purchase mechanism for my app and have a hard time to figure out the right way.
My app provides a service which can be used for as many items the users wants. He can add more over the time as he wish. The service is a yearly service.
From what i understood in the documentations it should be a non-renewing subscription.
The issue is that let's say a user bought the service for item A.
After a week a wants to add a second item to the service,item B. Then when he buys it ios pops up a window and says he already bought it and asks if he wants to renew.
This window isn't correct ! he hadn't bought the service for item B but for item A. This would confuse my users very much and i really need to avoid this.
I've looked and found also no solution to switch subscriptions, for example between a product called "Manage 1 item" to product called "Manage 2 items" which could have been a solution.
Another solution would be to create multiple in app products with the exact name and description and manage which one to buy from within the app. Would that be ok with apple ?
How should i handle in app purchase for my application needs ?
Thank you,
Tom
First of all, have you read iOS In App guide? This should be first stop for you. Secondly, you cannot have two In App products with the same id, so I don't get why adding second product would prompt user about already purchased product? Could you clarify that? In general, if I buy your product, you should keep data about my purchase and i.e. block this feature, so I it will be enabled once again only when I cancel subscription/my subscription expired.
Not sure about non-renewing, but it seems quite fit for situation, I guess. You can always consider buying consumable and store somewhere information how long you enable some features. Plus, when user buys a subscription he/she cannot get money back (except few scenarios, like mistake), so once you decide you don't need it, you cancel it. This way you can detect in receipt if product expired or not, but user cannot just swap in middle time from one product to another.

Resources