If I decrease the price of an in-app (iOS) auto renewal subscription would the existing subscriber continue to use service at discounted rate? Or would their auto renewal subscription get cancelled?
Quoting Apple docs : Link Here
When their subscription renewal date approaches, customers are notified if the price of an auto-renewable subscription has increased. After their subscriptions expire, they are opted-out of the subscription and must manually renew their subscription at the increased price.
If the price of an auto-renewable subscription decreases during the subscription period, customers are not notified and the subscription automatically renews at the lower price.
So it seems that if price goes down, the subscription is renewed at the reduced price, without notification.
Apple's docs ( https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Subscriptions.html#//apple_ref/doc/uid/TP40008267-CH7-SW6 ) cover the case of a price increase. Since it does not explicitly cover the price decrease case, I would assume that the users will continue at the new, lower rate.
From "Expiration and Renewal" on that link:
Note: Increasing the price of a subscription doesn’t disable automatic renewal for all customers, only for those customers whose subscription expires in the next ten days. If this change is a mistake, changing it back to the original price means no additional users are affected. If this change is intentional, keeping the new higher price causes automatic renewal to be disabled for the rest of your users in turn as they enter the ten-day renewal window.
This is a (very) late response to the question but if anyone is looking for the updated docs and/or how to Manage pricing for auto-renewable subscriptions, here is the link for it.
Decreasing price is simple, auto renewal takes places as it would normally do.
Increasing however is a tad complicated than the prior, I'll just quote from the above link:
If you choose to increase the price of your auto-renewable
subscription, you have the option to preserve prices for existing
subscribers.
If you increase the price of a subscription without preserving prices,
all existing subscribers must consent to the new price before their
next renewal date. If they do not consent to the new price or take no
action, their subscription expires at the end of their current billing
cycle.
After your price increase goes into effect, Apple will automatically
inform existing subscribers through email and push notifications, and
attempt to obtain consent to the higher price. The timing of these
notifications depends on the length of the subscription, and there is
a minimum required notice. If a price increase occurs within the
minimum required notice period, subscribers will renew at their
existing price for one more billing period, and will be notified
before the end of their next billing period.
Related
We have "try for free" button in our app. I'd like to figure out how to know that trial is available.
I'm a little bit doubt about following text from documentation:
New and resubscribing customers are eligible to pay one discounted price or free trial per subscription group.
What is "resubscribing"? Can customers who has subscription in the past have trial again?
Is it possible to use StoreKit to figure out that trial is available now?
Is it correct to check introductoryPrice property of the SKProduct: https://developer.apple.com/documentation/storekit/skproduct/2936878-introductoryprice?
I also had an idea to ask backend for all the subscription history for current user and show "try for free" if user didn't have trial yet. But as I said I'm not sure about that "resubscribing".
The correct way to check for trial eligibility is to validate the receipt file as outlined by Apple below. Since most would consider this a non-critical validation, there isn't much harm in doing it client-side instead of off a server to save a network call. The worst harm a fake receipt could do is change the text of your button.
Determine Eligibility
To determine if a user is eligible for an introductory price, check
their receipt: Validate the receipt as described in Validating
Receipts With the App Store. In the receipt, check the values of the
Subscription Trial Period and the Subscription Introductory Price
Period for all in-app purchase transactions. If either of these fields
are true for a given subscription, the user is not eligible for an
introductory price on that subscription product or any other products
within the same subscription group. You typically check the user's
eligibility from your server. It's best to determine eligibility
early—for example, on the first launch of the app, if possible.
Based on the receipt, you will find that new and returning customers
are eligible for introductory price or free trial discounts as
follows: New subscribers are always eligible. Lapsed subscribers who
renew are eligible if they haven't previously received an introductory
price for the given product (or any product within the same
subscription group).
To answer your specific questions:
Can customers who has subscription in the past have trial again?
No. This is enforced by Apple for any products in the same subscription group. For example if user starts a trial for "Monthly Product", cancels, then later buys "Yearly Product" they won't be eligible for a free trial.
Is it possible to use StoreKit to figure out that trial is available
now? Is it correct to check introductoryPrice property of the
SKProduct?
No. The SKProduct will always show the same introductory price.
I would like to offer three subscription options in my app:
Monthly recurring
Yearly recurring
Lifetime
I can setup the monthly and yearly subscriptions as auto-renewable products, and put them in the same group so that upgrades and downgrades are handled nicely. However, the lifetime subscription has to be a regular non-consumable product since the maximum duration for a renewing product is one year.
What can I do to handle users moving from a monthly or yearly subscription to the lifetime subscription? I can't offer any partial refund/credit for remaining time, and most importantly I can't cancel their existing subscription on their behalf. Am I limited to some informational messaging ("Please make sure you cancel your existing subscription") with a link to the Manage Subscriptions settings? Or is there more I can do?
As far as I know you have no possibility to cancel his subscription for him. So before a user can buy the lifetime IAP you have to check if he has an active subscription and if so you need to prompt him to cancel it. Otherwise he would end up with lifetime and a subscription.
I am writing a non-renewable subscription module for my new application. It includes 1 month, 3 month and 6 month subscription period. I do not understand, how to set expiry date using icloud. Any help would be appreciated?
For Apple, there is no "within the validity period" for non-renewing subscriptions. The duration of the period, fortunately or unfortunately, is left up to the developer.
Subscription validity/expiry date is up to the developer.
It seems common for developers to use their own server to track the expiry period of a non-renewing subscription.
"So if When you use iCloud for restoration you should have to manage expiry date on your own server..."
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.
https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Products.html
Hope it help you.
I have an iOS app with different auto-renewal subscription possibilities, and I want to offer it's user the chance to earn a free month when they invite friends to the app.
I know how to handle the scenario where I'd give a free month to a user that's not already subscribed, but I'm wondering how to handle a user that's in the middle of a year-long paid subscription and should receive a free month..
EDIT
Make sure to read budiDino reply below, it seems this is now possible (Full disclosure, I haven't tried it myself but I did glance over the references linked).
OLD ANSWER
Ok, after some digging and asking around on Apple's forums I can confirm it's not possible.
The only way to achieve this is to give users a free month outside of Apple's subscription process...meaning users should turn off auto renewal to enjoy those free months.
Whether this is good or bad for your app depends, but it required that the user manually turns off auto-renewal while using the earner out of charge time, and then turn it on to get back into the normal auto-renewal flow handled by Apple.
You can maintain a value like additionalMonths on your server side.
So once his subscription period gets over, you can check for the value of additionalMonths and accordingly provide him subscription for those number of months.
1. Promotional Offers
This option allows you to add a free or discounted price for a period that you specify and it will be executed before the next payment cycle. You can use this feature starting with iOS 12.2.
Apple Documentation:
You can provide lapsed or current subscribers a limited-time offer of a discounted or free period of service for auto-renewable subscriptions on macOS, iOS, and tvOS.
Some useful links:
Implementing Promotional Offers in Your App
Set up promotional offers for auto-renewable subscriptions
Subscription Offers Best Practices video - WWDC 2019.
2. Offer Codes
Apple Documentation:
Offer codes can help you acquire, retain, and win back subscribers by providing a subscription at a discount or for free for a limited time.
Read more
3. "Extend a Subscription Renewal Date" endpoint:
Potentially simpler alternative that is not really suggested to use for this use-case. It has certain limitations though:
you can move the renewal date for a customer’s subscription up to 90 days into the future for each extension
you can extend the renewal date twice within a year (365 days) per customer
The following types of subscriptions aren’t eligible for renewal date extensions:
Subscriptions in a free offer period
Inactive subscriptions in a billing retry state
Subscriptions in a grace period state, with an expiration date in the past
Subscriptions that have already received two renewal date extensions within the last 365 days
Read more
I'm launching an app that I would like to offer for free each month up to a certain usage level. If the user exceeds the threshold, the app would charge them a monthly subscription. However, I don't want the subscription to automatically renew each month. Rather, I would like the usage level to reset the following month, and if the user does not exceed the threshold, the app is free for that month.
Any creative ideas about how to make this happen?
Yes, look at Apple Overview of In-App Purchase:
Non-renewing subscriptions are a mechanism for creating products with a limited duration. Non-renewing subscriptions differ from auto-renewable subscriptions in a few key ways:
The term of the subscription is not declared when you create the product in iTunes Connect; your application is responsible for providing this information to the user. In most cases, you would include the term of the subscription in the description of your product.
Non-renewing subscriptions may be purchased multiple times (like a consumable product) and are not automatically renewed by the App Store. You are responsible for implementing the renewal process inside your application. Specifically, your application must recognize when the subscription has expired and prompt the user to purchase the product again.
You are required to deliver non-renewing subscriptions to all devices owned by the user. Non-renewing subscriptions are not automatically synchronized to all devices by Store Kit; you must implement this infrastructure yourself. For example, most subscriptions are provided by an external server; your server would need to implement a mechanism to identify users and associate subscription purchases with the user who purchased them.
You can track the user usage and ask him to buy your Non-renewing subscriptions* if the usage exceeds the threshold. Then at the end of the subscription you can check it again and ask him to pay again for the next month.
I would consider using renewable subscriptions for users that know that their usage will
always exceed the threshold.