These offers provide the flexibility to create unique promotions to grow and retain your customer base. They can help win back subscribers who have canceled their subscriptions or promote an upgrade to another subscription at a special price. Once the promotional period ends, the subscription automatically renews at the standard price. However, to implement this nice feature you have to generate a signature on your server. Apphud does the dirty job for you, so you don't have to write a code.
To create a new subscription offer go to App Store Connect, then go to your app's subscription product page. Click on the "+" option under "Subscription Prices" and click on "Create Promotional Offer".
You will need to specify Reference Name, which is just a title, and Promotional Offer Product Code, which is actually your offer's identifier.
Then you will need to specify pricing and promotional offer type. Offer types are the same as in introductory offers:
Don't forget to save changes.
As being said above, a special signature must be generated before purchasing subscription offer.
Go to "Users and Access" section, then select "Keys" tab. If you don't have any subscription keys, click on "Generate Subscription Key". You will be prompted to enter its name.
Once created, click on "Download API Key" and keep downloaded file in the safe place.
Subscription Key file name has the following format: SubscriptionKey_[KEY_ID].p8
, where KEY_ID
is your Key Identifier.
Here comes the most difficult and, probably, unneeded part. Apple decided to play the flow safe by adding a signature generating to avoid possible StoreKit jailbreaks in order to get discount. As we said previously, these offers are available only for lapsed customers. But we think that paying users will not try to break the system for a discount.
You will have to create SKPaymentDiscount
object and add it to your SKMutablePayment
.
Let's take a closer look.
Objects with this class are stored in discounts
array of your SKProduct
object. All your subscription offers are instances of SKProductDiscount
. Like introductory offers, you can get duration, price and number of discount periods. This class is mostly used for displaying information to a user.
This object is created using data from your server's signature API method. If we open header file will see a single `init
` method:
public init(identifier: String, keyIdentifier: String, nonce: UUID, signature: String, timestamp: NSNumber)
identifier
is your subscription offer identifier from SKProductDiscount
.keyIdentifier
is your subscription key identifier.nonce
is a unique UUID
value that your server defines. This value is cached for 24 hours. The string representation of the `nonce` used in the signature must be in lowercase.signature
is your base-64 encoded signature string.timestamp
is a timestamp that your server generates in UNIX epoch time format, in milliseconds; the timestamp keeps the offer active for 24 hours.Before generating a signature, you should upload subscription key to your server. You should use it to sign a special string combined from following parameters: appBundleID
, keyIdentifier
, productIdentifier
, offerIdentifier
, applicationUsername
, nonce
, timestamp
. Apple has an example code on Node.js.
More details could be found here.
To make a purchase with a discount you should add the SKPaymentDiscount
object to your payment.
let payment = SKMutablePayment(product: product) payment.paymentDiscount = discount SKPaymentQueue.default().add(payment)
You generated a signature and successfully purchased a subscription offer. That is awesome! But subscription offers won't increase your revenue without additional tools. You should show subscription offer at the right moment. When? For example, when a user cancels a subscription. You can detect this moment using Apple Status Notifications.
With subscription offers you can win back your subscribers. But you will still have to write a lot of code: implement subscription offers and push notifications, track users subscriptions, store App Store receipts and find users by their transaction identifier from Apple's status notification. That's not easy. Adding some flexibility will require much more time.
Attracting new users is much more expensive than keeping current subscribers. That is why it's important to know why your customers lapse, why they cancel trial or paid subscription. Many users cancel subscription, because they don't need the app anymore, and your offer just won't work. In this case, instead of trying to win back such users, you should better ask them, why they lapsed and what's wrong with the app. Maybe your customer didn't see the full power of premium service. Or you should change the way you describe premium features?
For example, you can implement a referral system and give user a discount or additional free trial. This could work, but requires many hours of work.
UPDATE. Since the publication of the article Rules has been significantly improved in Apphud. Now we support scheduled and manual push campaigns, allowing you to run campaigns whenever you want to your custom audience.
Apphud tracks subscriptions, automatically asks lapsed customers and offers a discounts if applicable without writing a code. You can do everything in dashboard. You also don't have to implement offer's purchase screen controller. Screens are created in our dashboard as well.
We call these mechanics of winning back subscribers as Rules. You can find more details about creating the rules here.
Keeping current subscribers and winning them back has become more important in iOS 13, because Apple has simplified the path to the list of active subscriptions. Now they appear at the screen with your apps updates:
You can manage subscriptions much easier in iOS 13.
This means, you will probably lose plenty of subscribers, because now users will more likely don't forget to cancel their subscription. And you will probably need a solution to increase revenue from existing subscribers. Apphud will help you will that. Try it for free.