Purchase interceptor

There are many possible cases where you would like to do something right before the user actually makes the purchase, right after he tapped the "Purchase button".

You might want to:

  • Ask the user to connect or create an account

  • Ask the user to acknowledge and accept the Terms of use

  • Make some specific backend check

  • Check that the content is available in the user geographical zone (media / videos)

Purchasely SDK gives you an opportunity to present or perform something to the user before it actually calls the stores to make the purchase. You can choose to continue the flow or cancel it.

Example of this interceptor usage on The Explorers app
Swift
Objective-C
Kotlin
Java
ReactNative
Cordova
Swift
// The handler gives you:
// - the source controller to display something above
// - a closure to notify the completion to the SDK that will proceed (or not) to the purchase
Purchasely.setConfimPurchaseHandler { [weak self](paywallController, processToPayment) in
// Display the terms of use to your user
self?.presentTermsAndConditions(above: paywallController) { (userAcceptedTerms) in
// Don't forget to notify the SDK by calling `processToPayment`
processToPayment(userAcceptedTerms)
}
}
Objective-C
// The handler gives you:
// - the source controller to display something above
// - a closure to notify the completion to the SDK that will proceed (or not) to the purchase
[Purchasely setConfimPurchaseHandler:^(UIViewController *controller, void (^ processToPayment)(BOOL)) {
// Display the terms of use to your user
[self presentTermsAndConditionsAbove:controller handler:^(BOOL userAcceptedTerms) {
// Don't forget to notify the SDK by calling `processToPayment`
processToPayment(userAcceptedTerms);
}];
}];
Kotlin
Purchasely.setConfirmPurchaseHandler { activity, processToPayment ->
//if there is no activity then there is nothing to display
if (activity == null) return@setConfirmPurchaseHandler
//call your method to display your view
//and return boolean result to processToPayment
presentTermsAndConditions(activity) { userAcceptedTerms ->
// Don't forget to notify the SDK by calling `processToPayment`
processToPayment(userAcceptedTerms)
}
}
Java
Purchasely.setConfirmPurchaseHandler((activity, listener) -> {
//if there is no activity then there is nothing to display
if (activity == null) return;
/* call your method to display your view
and return boolean result to processToPayment
listener.processToPayment(userAcceptedTerms);
*/
presentTermsAndConditions(activity, listener);
});
//You can also use the method for kotlin with Function interface
ReactNative
Purchasely.setPurchaseCompletionCallback(() => {
//Present your own screen before purchase
console.log('Received callback from user tapped on purchase button');
//Call this method to process to payment
Purchasely.processToPayment(true);
});
Cordova
Purchasely.setConfirmPurchaseHandler(onPurchaseTapped => {
//Present your own screen before purchase
//Call this method to process to payment
Purchasely.processToPayment(true);
})

This parameter is set at the SDK level and not at the ViewController / Activity because these can be triggered automatically by a deeplink coming from a push, email, in-app message. If we had tied the handler to the activity you wouldn't have a chance to intercept the user before the purchase.

Setup your handler as soon as possible as you app might get opened by a deeplink linking to a paywall.