The ability to know what the weather is like while planning your day is a feature of My Day To-Do Pro and as of the last update it’s also a part of the Lite version. Unlike the Pro version it’s an auto-renewing subscription based in-app purchase (IAP) in the Lite version. What means is that when a user purchases it, the user only pays for the subscription duration after which the user will be automatically charged for the next period. Adding an auto-renewing subscription based IAP proved to be somewhat challenging in terms of the app store review i.e. the app update was rejected by the App Review team thrice because of missing information about the IAP. Therefore in this post I will share my experiences and knowledge of adding auto-renewing IAP in hopes to save someone else the time that I had to spend on this problem.

In-App purchase

This year I started adding IAPs to My Day To-Do Lite which lead to learning about different types of IAPs for iOS, namely consumable, non-consumable, non-renewing subscription and auto-renewing subscription. If you want more details on the different types of IAPs, the official apple docs are the best place for it.

My first IAP: A non-consumable

I think before we move on to the details of adding my first IAP, I suppose it makes sense for me to provide some context into how I learned to write the code for my IAPs. Well, I followed a few online tutorials for it, i.e.
  1. In-App purchases Getting started by Ray Wanderlich
  2. In-app purchases in iOS with Swift 3
  3. and of course the Apple Docs
Once armed with the knowledge of how to write the code for IAPs I successfully added my first  non-consumable IAP to My Day To-Do Lite. The only mistake I made during this process was that I forgot to add all the missing meta data to my IAP and to actually submit the IAP for review.

Like the blog? Subscribe for updates

If you look at the screenshot above you will see that one of my IAP has missing metadata and in my case I simply did not add a screenshot of what the IAP would look like for the App review process. The next thing is to make sure you do not forget to select your IAP in your app build’s iTunesConnect page when submitting the version for review. Anyway once I addressed these minor things my IAP was reviewed, approved and released, I felt great and I was all set to add my next IAP, I mean I have done it once so how hard could be be, right?

My second IAP: An auto-renewing subscription

I wanted the users of the Lite version to have the ability to see what the weather is like around them  while planning their day, so I thought about adding it as an auto-renewable subscription. However what I did not know at the time was the app review nightmare that I would soon find myself in. Ok maybe nightmare is a little extreme but my point is that for iOS there’s a lot more that just writing the code to adding an auto-renewing subscription based IAP. My update was rejected three times and these are some of the reasons for it

Missing a restore all IAP button

This one is pretty straightforward and it makes sense that if there’s more than one IAP in your app, the user must have the convenience of restoring previously purchased IAPs. This was an implementation issue and hence it did not take me very long to fix it, however I did realise that to easily facilitate transactions via SKPaymentQueue, this line SKPaymentQueue.default().add(self) must only be declared once within your IAP class that’s the payment queue delegate. Refer to this Stackoverflow answer for more details.

Like the blog? Subscribe for updates

Missing Privacy policy and Terms of service

This is what the review message said
To be in compliance with the 3.1.2 guideline, your app binary should include the following information within a settings tab or the unlock feature page already present within your app:
– A link to the terms of use
– The length of the subscription
Furthermore, the app store description should include:
– Information about the auto-renewable nature of the subscription
 – A link to the terms of use
 – The length of the subscription
Privacy policy was the obvious one as I when I tried to save my app in iTunesConnect I got an error message that if I had an auto-renewing subscription based IAP in my app, the privacy policy url field should not be empty.
However in review feedback mentioned that I need to have a privacy policy as well which was not a concern as I already had a privacy policy, the feedback also said I needed to have a terms of use page. The app store review team were good to include a screenshot of the settings tab of My Day To-Do where I should have added more info about the auto-renewable nature of the IAP.  Now this was new to me but I did add a terms of use to the My Day To-Do site and resubmitted my update for review.

Second app review rejection

I thought I had added everything I was asked to add after the first review rejection, however it seems that I had to add some more info, based on what I heard from the review team.
Thank you for your resubmission. Upon further review, we noticed that your app’s binary and 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 

Your app’s metadata did not include:

– Information about the auto-renewable nature of the subscription

To resolve this issue, please revise your app and its metadata to include the following missing information. 

– 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
– Any unused portion of a free trial period, if offered, will be forfeited when the user purchases a subscription to that publication, where applicable

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.
What was clear to me is that Apple really wants the end-users to know what they are getting into before purchasing an IAP that periodically charges their credit card i.e. auto-renewing subscription. However I thought before re-submitting the update for review I may as well do some research and see how others have handled such an issue and that is when I came across this very useful post on apple developer forums. In that post, the reply by “ramesh_aran” on 18th April 2017 at 8:42am mentions that he needed to add
  1. Subsription title.
  2. Subscription duration
  3. Subsription Price.
  4. And also the Auto-Renew information.
Following that I changed my IAP purchase dialog and added all the necessary info to it and resubmitted a build for review.

Third app review rejection

This was the response from the third review rejection,
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). 

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

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.
This was really confusing for me as I thought, hmm did we just move a step back? I thought I had added all the information to both the app as well as the app store description for the app. However without paying proper attention to
 
If the above information is in your app, please reply to this message in Resolution Center to provide details on where to locate it.
 
I sent a reply to app review team with screenshots of the Daily Weather IAP purchase page of My Day To-Do Lite looked like. These were the attached screenshots,

 

 

Like the blog? Subscribe for updates

I thought that I have provided more than enough info to the users as to what the IAP is, in fact I fear that I may have provided far too much information and it may stop people from buying this IAP. Anyway in my reply, I told to the review team “I have added the necessary info in this part of the app, so please advise as to where should I be adding this? “

The next thing I know is that my app’s status is changed from rejected to in review and their response to my message was

Thank you for your response and providing additional information about your app. We will now proceed with the review.

So they basically wanted to know how can they find that info in my app and so yes during the fourth review the update was approved and it’s now live on the App Store. Phew!!!! So I solved this problem by adding all the disclaimer info to the IAP purchase page of my app. These review rejections were getting a little frustrating for both my intern and I at My Day To-Do as recently we have had a spike in downloads for the Lite version from China and it was important for us to get this update to our Chinese users.

This was a bit of a major update for My Day To-Do Lite as it added
  1. The ability to see your local weather while planning your day
  2. Simplified and Chinese localisations for our Chinese users
  3. Firebase analytics, so we can track how our users use our app

Summary

Adding your first auto-renewing subscription based IAP may just be harder than any other type of IAP as there are a lot of other non-coding tasks i.e. policies etc that you must conform to. However I do think that once you are familiar with it all, it’s fairly straight forward and NO, the iOS review team at Apple does not enjoy rejecting app updates but their goal is simply to maintain certain standards and make sure that you empower people with all the information they need before they make a purchase. So then if people choose not to read what’s presented to them, it’s not the developer’s or Apple’s problem.

Here’s a checklist for adding an auto-renewing subscription IAP to, make sure you have

  1. A valid privacy policy url – in my case it was the app website
  2. A valid terms of use url – here’s one for My Day To-Do Lite
  3. A clear description of the price and the duration of the subscription
  4. Last but not least, something that clearly explains to users the auto-renewable nature of the subscription, how will they be charged and how they can cancel their subscription. If you need more details on this read the section titled “Second app review rejection” of this post.

Do keep in mind that the information mentioned on points 3 and 4 should be in your app as well as your app’s App Store description.

Anyway all said and done, the update for My Day To-Do Lite is finally out and I couldn’t be happier as it was an important milestone for the business.

As usual, if you find any of my posts useful, support us by  buying or even trying one of our products and leave us a review on the app store.

‎My Day To-Do - Smart Task List
‎My Day To-Do - Smart Task List

‎Snap! I was there
‎Snap! I was there
Developer: Bhuman Soni
Price: $3.99
Numbers Game: Calculation Master
Numbers Game: Calculation Master
‎Simple 'N' Easy Task List
‎Simple 'N' Easy Task List
‎Captain's Personal Log
‎Captain's Personal Log
Developer: Bhuman Soni
Price: $4.99
My Simple Notes
My Simple Notes
Developer: Bhuman Soni
Price: Free

Leave a Reply

Your email address will not be published. Required fields are marked *