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.
// 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 purchasePurchasely.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) }}
// 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);
}];
}];
Purchasely.setConfirmPurchaseHandler { activity, processToPayment ->//if there is no activity then there is nothing to displayif (activity ==null) return@setConfirmPurchaseHandler//call your method to display your view //and return boolean result to processToPaymentpresentTermsAndConditions(activity) { userAcceptedTerms ->// Don't forget to notify the SDK by calling `processToPayment`processToPayment(userAcceptedTerms) }}
Purchasely.setConfirmPurchaseHandler((activity, listener) -> {//if there is no activity then there is nothing to displayif (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
Purchasely.setPurchaseCompletionCallback(() => {//Present your own screen before purchaseconsole.log('Received callback from user tapped on purchase button');//Call this method to continue to payment flow when you close your screenPurchasely.processToPayment(true);});
Purchasely.setConfirmPurchaseHandler(onPurchaseTapped => {//Present your own screen before purchase//Call this method to continue to payment flow when you close your screenPurchasely.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.