How to program auto-renewing in app purchase to satisfy Apple guidelines? - ios

I have 2 auto-renewing in-app subscriptions being reviewed by Apple, but I keep getting rejected. Note that this is not related to IAP product (which apparently have not yet been reviewed) but instead to how I present the information in the UI. I can never get Apple to say expressly how to overcome the rejection. I appealed it once and it was again rejected, although I did put the requested information in the metadata and in the binary. I changed the flow of the app so that I present the information as soon as the user chooses the subscription and before I send the purchase request to the StoreKit. Apple apparently thinks that I am "adding to" the StoreKit modal alert, but I am not. I am presenting the information in a UIAlertController alert BEFORE the user requests to Buy or Restore. All of the buy and restore code is thoroughly tested, but I am stuck at this UI rejection.
Here is the rejection notes from itunes connect:
Guideline 3.1.2 - Business - Payments - Subscriptions
We continue to find that your app and its metadata did not fully meet
the terms and conditions for auto-renewing subscriptions, as specified
in Schedule 2, Section 3.8(b).
Your app's binary did not include:
– Information about the auto-renewable nature of the subscription –
Links to the privacy policy and terms of use
While your app displays subscription information in a modal alert,
this information must be clearly listed within the app itself before
the user initiates the in-app purchase. Displaying this information in
a modal alert is not sufficient.
Your app's metadata did not include:
– The length of the subscription – A privacy policy in the Privacy
Policy URL field of iTunes Connect
For your convenience, we've included Schedule 2, section 3.8(b) below.
You clearly and conspicuously disclose to users the following
information regarding Your auto-renewing subscription:
– Title of publication or service
– Length of subscription (time period and/or content/services provided
during each subscription period)
– Price of subscription, and price per unit if appropriate
– Payment will be charged to iTunes Account at confirmation of
purchase
– Subscription automatically renews unless auto-renew is turned off at
least 24-hours before the end of the current period
– Account will be charged for renewal within 24-hours prior to the end
of the current period, and identify the cost of the renewal
– Subscriptions may be managed by the user and auto-renewal may be
turned off by going to the user's Account Settings after purchase
– Links to Your Privacy Policy and Terms of Use
– Any unused portion of a free trial period, if offered, will be
forfeited when the user purchases a subscription to that publication,
where applicable
Next Steps
To resolve this issue, please revise your app or its metadata to
include the missing information. Adding the above information to the
StoreKit modal alert is not sufficient; the information must also be
listed somewhere within the app itself, and it must be displayed
clearly and conspicuously.
If the above information is in your app, please reply to this message
in Resolution Center to provide details on where to locate it.

You should try to look at what other apps are doing to get an idea of what is required. Here are the things they asking for:
1- Information about the auto-renewable nature of the subscription:
For this you need to include this section from the apple contract in you app. I think they don't want you to use a UIAlertView for this. This might be what they are referring to by 'a modal alert'. This is the text you need to include (exactly or rephrased):
• Payment will be charged to iTunes Account at confirmation of purchase
• Subscription automatically renews unless auto-renew is turned off at
least 24-hours before the end of the current period'
• Account will be charged for renewal within 24-hours prior to the end of the current period, and identify the cost of the renewal
• Subscriptions may be managed by the user and auto-renewal may be turned off by going to the user’s Account Settings after purchase
• Any unused portion of a free trial period, if offered, will be forfeited when the user purchases a subscription to that publication, where applicable.
Here is an example of how evernote does it:
2- You also need to include links to you privacy policy and terms of use inside the app. You can put these the same place you put the information above
3- You need to include the length of you subscriptions in app description from itunes connect. (e.g monthly and annual subscriptions plans ... )
4- You need to put you privacy policy in the privacy policy URL field:

My app was approved this morning. The two keys that led to approval are: 1) putting all of the requested information into the metadata in the Description field on itunesconnect; and 2) changing the UI to a tableview controller with all of the requested information in a UITextView inside a static cell, with active links to the terms of use and privacy policy. Given my experience, I doubt that the way Evernote did it in a comment on this thread will work in the future (it looks like a UIAlertController modal alert, which has been one of the sticking points in my case - Apple absolutely does not want modal alerts, apparently because the user must click on something to display the required information). In contrast, the solution that worked for me was to have all of the information passively displayed in a tableview, and to have the in app purchase selected by clicking on a row in the tableview.

Evernote have updated their subscription purchase flow slightly since the screenshot above. It's still a very good example of how to do this well without the mandatory "Your iTunes account..." stuff getting in the way of the purchase process.
Note that Evernote now have links to their Privacy Policy and Terms of Service just below the monthly / yearly purchase options.

Related

App Store Information items in App Store Connect

My app keeps rejecting since month they review more then 2 week and reject it now rejected due to this issue i have places all the information already
https://imgur.com/a/RvSpy6m
Guideline 3.1.2 - Business - Payments - Subscriptions
We also still noticed that your app's metadata did not fully meet the terms and conditions for auto-renewing subscriptions, as specified in Schedule 2, section 3.8(b) of the Paid Applications agreement.
App Store Information
We were unable to find the following App Store Information items in App Store Connect.
– Information about the auto-renewable nature of the subscription in your app's description:
• Title of publication or service
• Length of subscription (time period and content or services provided during each subscription period)
• Payment will be charged to iTunes Account at confirmation of purchase
• Subscription automatically renews unless auto-renew is turned off at least 24-hours before the end of the current period
• Account will be charged for renewal within 24-hours prior to the end of the current period, and identify the cost of the renewal
• Subscriptions may be managed by the user and auto-renewal may be turned off by going to the user's Account Settings after purchase
• Any unused portion of a free trial period, if offered, will be forfeited when the user purchases a subscription to that publication, where applicable
– A link to the terms of use in either the app description or EULA field
Next Steps
To resolve this issue, please revise your app's metadata to include this missing information. If the above information is in your app, please reply to this message in Resolution Center to provide details on where to locate it.
You need to add a disclosure in your application or into the description that prevent the user about the subscription.
You can find below a template you need to add.
A [purchase amount and period] purchase will be applied to your iTunes
account [at the end of the trial or intro| on confirmation].
Subscriptions will automatically renew unless canceled within 24-hours
before the end of the current period. You can cancel anytime with your
iTunes account settings. Any unused portion of a free trial will be
forfeited if you purchase a subscription.
For more information, see our [link to ToS] and [link to Privacy
Policy].
Reference to this template: Template

App rejection with auto-renewable purchase - Guideline 3.1.2 - Business - Payments - Subscriptions [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about programming within the scope defined in the help center.
Closed last year.
Improve this question
One of our application is continuously rejected after implementing auto-renewable subscription with below reason. Although we have followed guidelines to implement the screen.
We have also referred posts such
Guideline 3.1.2 - Business - Payments - Subscriptions
We noticed that your app or its metadata did not fully meet the terms
and conditions for auto-renewing subscriptions, as specified in
Schedule 2, section 3.8(b) of the Paid Applications agreement.
Your app's binary did not include:
– The following information about the auto-renewable nature of the
subscription • Title of publication or service • Length of
subscription (time period and content or services provided during each
subscription period) • Price of subscription, and price per unit if
appropriate • Payment will be charged to iTunes Account at
confirmation of purchase • Subscription automatically renews unless
auto-renew is turned off at least 24-hours before the end of the
current period • Account will be charged for renewal within 24-hours
prior to the end of the current period, and identify the cost of the
renewal • Subscriptions may be managed by the user and auto-renewal
may be turned off by going to the user's Account Settings after
purchase • Any unused portion of a free trial period, if offered, will
be forfeited when the user purchases a subscription to that
publication, where applicable – A link to the terms of use – A link to
the privacy policy
Adding the above information to the StoreKit modal alert is not
sufficient; the information must also be displayed within the app
itself, and it must be displayed clearly and conspicuously during the
purchase flow without requiring additional action from the user, such
as opening a link.
Next Steps
To resolve this issue, please revise your app or its metadata to
include the missing information.
Attached screenshots for your reference.
Also, we show the whole set of plans in more option in the top right corner. what else is expected from apple?
Any suggestions are welcome.
We are able to fix this issue by adding these pieces of information on the landing page itself.
I think the problem they have is with the way you are presenting the information as they outlined in their response:
Adding the above information to the StoreKit modal alert is not
sufficient; the information must also be displayed within the app
itself, and it must be displayed clearly and conspicuously during the
purchase flow without requiring additional action from the user, such
as opening a link.
So you should try to present the information in a way that isn't tied to the purchase flow, in addition to being displayed in the purchase flow.
You can go through App Store Review when you add a link to the privacy policy and terms of use from within the app and the app store description.
Also you must put the note about auto-renewable subscription on your paywall OR app store description.
For a detailed guide, check out: https://www.revenuecat.com/blog/apple-will-reject-your-subscription-app-if-you-dont-include-this-disclosure

Apple In-App Purchase: How apple use the applicationusername to Detecting Irregular Activity?

In apple's document, it says developer can use the applicationusername to Detecting Irregular Activity,but i don't know how to use it.The document just says hash a userId,but how can i detect the irrgular activity? Does the apple's server have a server API to notify me ?
Here the link:
https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/RequestPayment.html#//apple_ref/doc/uid/TP40008267-CH4-SW6
Let's day your app uses an account system so each user has an identifier (email, username etc) which we refer as appId here and the app store login as appleId
Scenario:
Say user purchased a subscription with a trial period (txn123) with appId usr123 having appleId appl123
Later she unsubscribed the subscription.
After few months she changed the AppleID for some reason.
Again she wants to purchase the subscription.
She will login into the app using same appId, usr123.
As she already has used trial with that appId, your app will recognise her, and will show buy button to her.
When she will click on the Buy button, Apple UI will show that she is eligible for Trial, and will be charged after 7 days.
If you had passed the applicationUserName field in the payment(payment object) in the both the transaction user makes, apple will recognise that and may take a remedial action (like actually charging the user instead of offering a second trial period).
At this point I am not sure, how Apple is going to inform your app/ecosystem about this irregular activity. I have not tested this scenario myself as yet, will update the answer once I have done so.
Several things may happen:
Apple declines the second purchase because it detects the irregular activity of the same user purchasing the trial period again. But how would Apple know if the user is intentionally trying to make the purchase now after trial has expired. Anyways, apple can say that this user seems to be associated with some other apple id also which has made a purchase in the past, thus not allowing the transaction with the pair.
Apple may actually charge the user, since they are trying to buy after a trial but in this case Apple will be offering a Apple Id user without a trial period in their name.
Apple may allow the transaction with trial period offering and may resolve this through other/offline channel.

Already mentioned the link to the privacy policy and terms of use, but still apple rejected the build

Apple rejected the build and gave this reason.
Additionally, we noticed that your Application Description did not fully meet the terms and conditions for auto-renewing subscriptions, as specified in Schedule 2, Section 3.8(b). Meeting the terms of this agreement is required by the App Store Review Guidelines.
Specifically, your Application Description did not include:
1) the length of the subscription
2) the price of the subscription
3) information about the auto-renewable nature of the subscription
4) links to the privacy policy and terms of use
I already added the link to app store page in privacy policy url.
what is the reason for this.Please help.
I got same issue. The app has passed previously.
We noticed that your app did not fully meet the terms and conditions for auto-renewing subscriptions, as specified in Schedule 2, Section 3.8(b).
So, I added a list of text to fulfill "information about the auto-renewable nature of the subscription":
Payment will be charged to iTunes Account at confirmation of purchase
Subscription automatically renews unless auto-renew is turned off at least 24-hours before the end of the current period
Account will be charged for renewal within 24-hours prior to the end of the current period, and identify the cost of the renewal
Subscriptions may be managed by the user and auto-renewal may be turned off by going to the user's Account Settings after purchase

Does Non-Renewing subscription requires a restore button?

My app got rejected because of restore button on non-renewing in app purchase. Do i have to remove restore button ? If i have to do so then how user will restore his purchases.Please help.
Non-renewing subscriptions are consumable. Therefore they cannot be restored. A restore button therefore makes no sense. You also need some kind of authentication/login system for the user. (See below for detailed explanations.)
Sources:
consumable vs. non-consumable in app purchases
non-renewing subscriptions
Update from WWDC2017: In Session #303 App Store Engineer Pete Hare explains at 3:00 that a non-renewing-subscription can be seen as "a consumable product with an expiry date on it"
There has been some debates in the comments wether non-renewing subscriptions are consumable or not, so I want to say something about it. "Consumable" means that you can consume them multiple times. Like "30 minutes of talking" in a voice-over-IP telephony application. On the other hand, there are non-consumables that you can buy only once. Like when you unlock all levels in a game app. You buy it once, and when you reset the device and redownload the app, you should be able to restore the purchase, so that you don't have to pay twice to unlock all levels. Furthermore, if you don't tap the restore-button in this case but just buy the "unlock all levels" package again, it works, but you will not be charged by apple a second time. That's why it is called non-consumable. It's some kind of metapher. An apple is "consumable". Once it is consumed, it is gone. A chair is non-consumable. You have it as long as you don't destroy it or give it away.
So, it makes sense to regard a non-renewing subscription as non-consumable. If you buy it a second time, you shouldn't pay twice, you should just use the old subscription you already have. If you reset the device, you should be able to restore the subscription once you re-download the app. The restoration is just not done by Apple but by the app itself.
I still regard non-renewing subscriptions as consumable though. I use a simple definition of consumable vs. non-consumable: An in-app-purchase is consumable, when, from the point of view of the StoreKit API, it can be purchased multiple times in the same week by the same user. All consumable IAP-items cannot be restored through the StoreKit. All non-consumable IAP-items can be restored through the StoreKit.
So, the developer is himself responsible for restoring the in-app-purchase of a non-renewing subscription, right? No, sorry. How would the app restore the in-app-purchase of a non-renewing subscription? Suppose I have an iPod and I subscribe to 1 month of listening to the Foo-radio. Now I want to also listen to the Foo-Radio on my iPad. Soo, I install the Foo-App on my iPad and tap the "restore" button. Well... what is the "restore" button supposed to do? How can it know if I already have purchased a "Foo"-subscription or not, and how long it will still be valid? Answer: it can not. This approach does not work.
In order for a non-renewing subscription to work, you have to login the user first, to tie the subscription to some online account. Username/Password, Open-ID, Login via Gmail, Facebook, etc. all would work. Then, when the user purchases an n-r subscription you have to store the fact that he subscribed on some server and link it to his account on the server. You also have to prevent the user from buying the n-r subscription when he is not already logged in. Let's continue with my iPod/iPad-example above. I download the app on my iPad, I login with Facebook, and voila, I can use the "Foo"-subscription now. There is no need for a "restore" button, because the app should check at login-time which subscriptions the user has.
There will be some additional problems to deal with. (1) For example, nothing prevents the user from logging in into 200 devices. Here the problem is not a user with 200 devices, but a university with 1000 students where 180 students share the same account. (2) If the server crashes, some people will probably lose their subscriptions. Problem (1) can potentially lead to decreased income. Problem (2) can lead to angry and unhappy customers.
From Apple: "Non-renewable subscriptions. Subscriptions that don’t involve delivering episodic content. Examples include access to a database of historic photos or a collection of flight maps. It’s your app’s responsibility to make the subscription available on all of the user’s devices and to let users restore the purchase. This product type is often used when your users already have an account on your server that you can use to identify them when restoring content. Expiration and the duration of the subscription are also left to your app (or your server) to implement and enforce." [Italics and bold added] https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Products.html
Apple Reviewer's current-similar response about Non-Renewing Subscriptions "Your app offers Non-Renewing Subscriptions and this purchasability type must have its own restoring function - if you have removed it please re-implement it. Furthermore, your app must also offer a function, such as account creation, such that purchases can be tracked across all of a user's devices. Please implement a login feature as well as a restore mechanism prior to resubmitting your revised binary for review."

Resources