Purchasely
4.4
4.4
  • Welcome page
  • General
    • Presentation
    • Release notes
  • Quick start
    • Console Configuration
    • SDK Implementation
    • Testing
    • Sample
  • Basic configuration
    • Console Configuration
      • Creating a new application
      • Creating your Products
        • App Store
        • Play Store
        • Huawei App Gallery
        • Amazon App Store
        • Products & Plans
      • Design your Paywalls
      • Design your Paywalls-Latest
        • Carousel
        • Carousel Flow
        • Features List
        • Features List & Plan Picker with 2 & 3 columns
        • Feature list overlay
        • Plan picker horizontal
        • Plan picker with 2 and 3 Column
    • SDK installation
      • iOS SDK
      • Android SDK
      • React Native SDK
      • Cordova SDK
      • Flutter SDK
      • Unity SDK
    • SDK configurations
      • Paywall observer mode
      • Full mode
      • StoreKit 2
      • Appendices
        • Start the SDK
        • Set User Id
        • Notify when the app is ready
        • Present paywalls
        • Unlock content / service
        • Close SDK (Android only)
    • Stripe
    • Purchasely with RevenueCat
  • S2S notifications
    • Server-to-server notifications ?
    • Apple App Store
    • Google Play Store
    • Huawei App Gallery
  • Analytics
    • Dashboards
      • Introduction
      • Live
      • Subscriptions
      • Cohorts
      • Trials
      • Events
    • Events
      • Webhook events
        • Subscription events
        • Subscription events attributes
      • SDK events
        • UI events
        • UI attributes
  • Integrations
    • Webhook
      • Receiving and understanding messages
      • Managing entitlements
      • Detailed sequence diagrams
    • Airship
    • Amplitude
    • AppsFlyer
    • Adjust
    • Piano analytics(ex AT Internet)
    • Batch
    • Branch
    • Braze
    • Clevertap
    • Customer.io
    • Firebase
    • Iterable
    • Mixpanel
    • MoEngage
    • OneSignal
    • Segment
    • Brevo(ex Sendinblue)
  • Advanced Features
    • Asynchronous paywalls
    • NEW: Promotional offers
    • Anonymous user
    • Associating content
    • Audiences
    • Customising UI
      • Errors & alerts
      • Controllers (iOS) / Fragments (Android)
    • Deeplinks automations
    • Disable placements
    • Displaying users subscriptions
    • Localization
    • Lottie animations
    • Non-subscription products
    • Paywall action interceptor
    • Promoting your products
      • Self-promotion
      • Promoting In-App Purchases
    • Purchase manually
    • Subscription status
    • Use your own paywall
  • Others
    • Frequently Asked Questions
    • Migration guides
      • Migrate to Purchasely
      • Webhook
        • Migrate to Webhook v3.0
      • SDK
        • Migrate to SDK v3.0
          • v2.2.0
          • v2.1.3
        • Migrate to SDK v3.1
        • Migrate to SDK v3.2
        • Migrate to SDK v4.0.0
  • TESTING
    • Testing Cycle Durations
Powered by GitBook

© Purchasely 2020-2023

On this page
  • What Placements should you create ?
  • How to define placements in the Purchasely console
  • How to implement a Placement in your app

Was this helpful?

Edit on GitHub
  1. Basic configuration
  2. SDK configurations
  3. Appendices

Present paywalls

PreviousNotify when the app is readyNextUnlock content / service

Last updated 1 year ago

Was this helpful?

Paywalls are displayed by calling a Placement.

A Placement represents a specific location in your user journey inside your app (e.g. Onboarding, Settings, Home page, Article). A placement is linked to a paywall and a single paywall can be used for different Placements. You can create as many Placements as you want, and this is the only thing that ties the app developer to the marketer.

Once the placements are defined and called from the app, you can change the displayed paywall remotely without any developer action.

What Placements should you create ?

Let's take the example of the New Yorker app who has many triggers to display paywalls.

For this specific case the New Yorker should create 4 Placements:

Once these Placements created the displayed paywalls for each Placement can be changed remotely, instantly and independently.

How to define placements in the Purchasely console

First of all you will find in the main menu a new entry dedicated to manage your Placements.

Once you are on the Placements page you will be able to create as much Placement as you want to fit your app and user journey. For example let's say that in your user journey you display a paywall right at the end of a new user onboarding. Want you want to do is Create a new Placement dedicated to that situation and name it Onboarding.

Clic on the top right corner of the Placements page on "New placement".

Then you will have to fill different text fields.

  • NAME : the name is only used in the Purchasely console

  • ID : the id is what the developer will need to call in the app

  • DESCRIPTION : the description is only used in the Purchasely console and is meant to help for collaborative work.

  • PAYWALL : the paywall is the paywall that will be displayed when the Placement will be called in the app. This is where the magic is, you will be able to change the displayed Paywall for that Placement whenever you want without any further developer action.

Once it's created you can manage all your Placements at the same place and edit them whenever you see fit.

How to implement a Placement in your app

Once the placement has been define in the Purchasely Console you have to call it in your app.

You can do it using an almost identical method than the one you already used for a presentationControllerwith an id.

let placementId = "ONBOARDING"
paywallCtrl = Purchasely.presentationController(for: placementId, contentId: contentId, loaded: { _, _, _ in
            }, completion: completion)
UIViewController *paywallCtrl = [Purchasely presentationControllerFor:@"my_placement_id"
						            contentId:@"my_content_id"
                                                            completion:^(enum PLYProductViewControllerResult result, PLYPlan * _Nullable plan) {
}];
Purchasely.presentationViewForPlacement(
    context = context,
    placementId = placementId,
    contentId = contentId,
    onClose = { }
) { result, plan ->
    Log.d("Purchasely", "Result is $result with plan $plan")
}
String placementId = "onboarding";
String contentId = "my_content_id"; // or null

Purchasely.presentationViewForPlacement(context, placementId, contentId, null, null);
await Purchasely.presentPresentationForPlacement({
    placementVendorId: 'onboarding',
    contentId: 'my_content_id',
    isFullscreen: true,
});
Purchasely.presentPresentationForPlacement('onboarding');
await Purchasely.presentPresentationForPlacement('onboarding');
private PurchaselyRuntime.Purchasely _purchasely;

_purchasely.PresentPresentationForPlacement("placementId",
			OnPresentationResult,
			OnPresentationContentLoaded,
			OnPresentationContentClosed,
			"contentId");

The callback PLYProductViewControllerResult(iOS) / ProductViewResultListener (Android) is optional, you can set to null if you do not need it.

You can be alerted if the purchase was made by listening to the or by implementing the optional completion block

Notifications