Subscription Management Mode

This guide is for implementing subscription-based access management with Qonversion (Subscription Management mode).

The Subscription Management mode allows you to implement a complete cycle of in-app purchases management: getting offers, making (or restoring) purchases, and handling entitlements.

If you want only to get a single source of truth for revenue analytics and leverage real-time purchase events in integrations, please refer to the Analytics Mode guide.

1. Configure Products & Entitlements

To successfully run subscription-based entitlement management, you need to connect stores' products to Qonversion:

  1. Create and configure in-app products on the App Store Connect and/or Google Play Console sides
    • Please note that your App Store Connect products must be in either Ready to submit or Ready for sale statuses. Otherwise, the Product not found error may occur during Qonversion SDK integration.
    • Do not forget to activate your products for the Google Play console. Otherwise, the SkuDetails error may occur during Qonversion SDK integration.
  2. Create entitlement which should be granted once in-app product is purchased. Learn more about Qonversion entitlements here.
  3. Create product-linker in Qonversion and link it to the previously created entitlement. Learn more about Qonversion products here.

2. Configure Offerings

Based on your business logic, an offering is a group of products you can offer to a user on a given paywall. For example, you can offer one set of products on a paywall immediately after onboarding and another with discounts later if a user has not converted.

Qonversion offerings are not required to use Qonversion's Subscription Management Mode, but they allow you to change products offered to your users without app release.

Learn more about Qonversion Offerings here.

3. Launch SDK

Initialize the SDK:

import Qonversion

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let config = Qonversion.Configuration(projectKey: "projectKey", launchMode: .subscriptionManagement)
    Qonversion.initWithConfig(config)
  	return true
}
#import "Qonversion.h"
  
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    QONConfiguration *configuration = [[QONConfiguration alloc] initWithProjectKey:@"projectKey" launchMode:QONLaunchModeSubscriptionManagement];
    [Qonversion initWithConfig:configuration];
    
    return YES;
}
import com.qonversion.android.sdk.Qonversion;
import com.qonversion.android.sdk.QonversionConfig;
import com.qonversion.android.sdk.Qonversion.dto.QLaunchMode;

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        final QonversionConfig qonversionConfig = new QonversionConfig.Builder(
                this,
                "projectKey",
                QLaunchMode.SubscriptionManagement
        ).build();
        Qonversion.initialize(qonversionConfig);
    }
}
import com.qonversion.android.sdk.Qonversion
import com.qonversion.android.sdk.QonversionConfig
import com.qonversion.android.sdk.Qonversion.dto.QLaunchMode

public class App : Application {
    override fun onCreate() {
        super.onCreate()
        val qonversionConfig = QonversionConfig.Builder(
            this,
            "projectKey",
            QLaunchMode.SubscriptionManagement
        ).build()
        Qonversion.initialize(qonversionConfig)
    }
}
import 'package:qonversion_flutter/qonversion_flutter.dart';

final config = new QonversionConfigBuilder(
  'projectKey',
  QLaunchMode.subscriptionManagement
).build();
Qonversion.initialize(config);
import Qonversion, {
  QonversionConfigBuilder,
  LaunchMode,
} from 'react-native-qonversion';

const config = new QonversionConfigBuilder(
  'projectKey',
  LaunchMode.SUBSCRIPTION_MANAGEMENT
).build();
Qonversion.initialize(config);
using QonversionUnity;

private void Start()
{
    QonversionConfig config = new QonversionConfigBuilder(
            "projectKey",
            LaunchMode.SubscriptionManagement
        ).Build();
    Qonversion.Initialize(config);
}
const config = new Qonversion.ConfigBuilder(
  'projectKey',
  Qonversion.LaunchMode.SUBSCRIPTION_MANAGEMENT,
).build();
Qonversion.initialize(config);

β†’ Get your Qonversion Project Key

4. Set additional user attributes

Optionally, to improve attribution in Adjust, AppsFlyer, Singular, or to match Qonversion revenue events to users in third-party tools, you can share with us such attributes as User Identifier, IDFA (Identifier for Advertisers, iOS 14.5+ only) or ASID (App set ID, Android 12+ only). Please follow this guide to learn more.

5. Get offerings, make purchases, and check the premium status

Once you have added Products, Entitlements and Offerings to Qonversion', initialized the SDK, and added user attributes, it's time to proceed to the main part of the Subscription Management implementation!

  1. Here we will tell you how to correctly display products to your customer using Qonversion SDK's offering method.
  2. By following this guide, you will know how to launch a purchase, after which your user gets premium access with the entitlement you have created above.
  3. Finally, this article will help you to know how to check if your user has already been granted access to your premium features or not.