Répondre aux actions des flows - Kotlin Multiplatform
Si vous créez des flows dans l’Adapty Flow & Paywall Builder, il est essentiel de configurer correctement les boutons :
- Ajoutez un bouton dans le builder et assignez-lui une action existante ou créez un identifiant d’action personnalisé.
- Écrivez le code dans votre application pour gérer chaque action assignée.
Ce guide explique comment gérer les actions personnalisées et existantes dans votre code.
Seuls les achats, les restaurations, la fermeture des flows/paywalls et l’ouverture de liens sont gérés automatiquement. Toutes les autres actions de bouton, comme les actions personnalisées, nécessitent une implémentation adaptée dans le code de l’application.
Configurer l’AdaptyUIFlowsEventsObserver
Pour gérer les actions du flow, vous devez implémenter l’interface AdaptyUIFlowsEventsObserver et la configurer avec AdaptyUI.setFlowsEventsObserver(). Cette opération doit être effectuée tôt dans le cycle de vie de votre application, généralement dans votre activité principale ou lors de l’initialisation de l’application.
// In your app initialization
AdaptyUI.setFlowsEventsObserver(MyAdaptyUIFlowsEventsObserver())Toutes les actions des boutons arrivent dans le callback flowViewDidPerformAction(view, action) sous la forme d’une sealed class AdaptyUIAction : CloseAction, AndroidSystemBackAction, OpenUrlAction ou CustomAction.
Overriding flowViewDidPerformAction remplace la gestion par défaut de toutes les actions, pas seulement celle qui vous intéresse. Conservez les branches par défaut pour CloseAction (fermer le flow) et OpenUrlAction (ouvrir l’URL) sauf si vous souhaitez les modifier, comme illustré dans les exemples ci-dessous.
Fermer les flows et les paywalls
Pour ajouter un bouton qui ferme votre flow ou paywall :
- Dans le builder, ajoutez un bouton et assignez-lui l’action Close.
- Dans le code de votre application, implémentez un gestionnaire pour l’action
closequi ferme le flow.
Dans le SDK Kotlin Multiplatform, la CloseAction déclenche par défaut la fermeture du flow ou du paywall. Vous pouvez toutefois remplacer ce comportement dans votre code si nécessaire. Par exemple, la fermeture d’un flow peut déclencher l’ouverture d’un autre.
class MyAdaptyUIFlowsEventsObserver : AdaptyUIFlowsEventsObserver {
override fun flowViewDidPerformAction(view: AdaptyUIFlowView, action: AdaptyUIAction) {
when (action) {
is AdaptyUIAction.CloseAction ->
mainUiScope.launch { view.dismiss() } // default behavior
is AdaptyUIAction.OpenUrlAction ->
AdaptyUI.openWebUrl(action.url, action.openIn) // default behavior
else -> Unit
}
}
}
// Set up the observer
AdaptyUI.setFlowsEventsObserver(MyAdaptyUIFlowsEventsObserver())Si vous utilisez createNativeFlowView, appeler view.dismiss() n’a aucun effet — la vue est intégrée dans votre layout, elle n’est pas présentée via la pile KMP. Retirez la vue de votre layout et appelez dispose() à la place.
Gérer le bouton retour système Android
Appuyer sur le bouton retour système Android (ou utiliser le geste de retour) émet AdaptyUIAction.AndroidSystemBackAction. Par défaut, cette action est ignorée — le flow reste ouvert, et l’utilisateur en sort par un chemin que vous définissez, comme un bouton Close ou une action on_device_back dans le builder. Si vous souhaitez que le bouton retour système ferme le flow, gérez vous-même cette action :
class MyAdaptyUIFlowsEventsObserver : AdaptyUIFlowsEventsObserver {
override fun flowViewDidPerformAction(view: AdaptyUIFlowView, action: AdaptyUIAction) {
when (action) {
is AdaptyUIAction.CloseAction ->
mainUiScope.launch { view.dismiss() } // default behavior
is AdaptyUIAction.AndroidSystemBackAction ->
mainUiScope.launch { view.dismiss() } // not handled by default
is AdaptyUIAction.OpenUrlAction ->
AdaptyUI.openWebUrl(action.url, action.openIn) // default behavior
else -> Unit
}
}
}Ouvrir des URLs depuis les flows et les paywalls
Si vous souhaitez ajouter un groupe de liens (par exemple, les conditions d’utilisation et la restauration des achats), ajoutez un élément Link dans le builder et gérez-le de la même façon que les boutons avec l’action Open URL.
Pour ajouter un bouton qui ouvre un lien depuis votre flow ou paywall (par exemple, Terms of use ou Privacy policy), ajoutez un bouton dans le builder, assignez-lui l’action Open URL et saisissez l’URL à ouvrir.
Par défaut, le SDK ouvre l’URL reçue de manière native — dans un navigateur externe ou intégré à l’application, selon action.openIn — aucun code n’est donc nécessaire. Ne surchargez le gestionnaire que si vous souhaitez une logique personnalisée, par exemple afficher d’abord une boîte de dialogue de confirmation :
class MyAdaptyUIFlowsEventsObserver(
private val uriHandler: UriHandler
) : AdaptyUIFlowsEventsObserver {
override fun flowViewDidPerformAction(view: AdaptyUIFlowView, action: AdaptyUIAction) {
when (action) {
is AdaptyUIAction.OpenUrlAction -> {
// Show confirmation dialog before opening URL
mainUiScope.launch {
val selectedAction = view.showDialog(
title = "Open URL?",
content = action.url,
primaryActionTitle = "Cancel",
secondaryActionTitle = "Open"
).getOrNull()
when (selectedAction) {
AdaptyUIDialogActionType.PRIMARY -> {
// User cancelled
}
AdaptyUIDialogActionType.SECONDARY -> {
// User confirmed - open URL
uriHandler.openUri(action.url)
}
else -> Unit
}
}
}
else -> Unit
}
}
}
// Set up the observer with UriHandler
AdaptyUI.setFlowsEventsObserver(MyAdaptyUIFlowsEventsObserver(uriHandler))Se connecter à l’application
Pour ajouter un bouton permettant aux utilisateurs de se connecter à votre application :
- Dans le builder, ajoutez un bouton et assignez-lui une action Custom avec l’ID « login ».
- Dans le code de votre application, implémentez un gestionnaire pour l’action personnalisée qui identifie votre utilisateur.
class MyAdaptyUIFlowsEventsObserver : AdaptyUIFlowsEventsObserver {
override fun flowViewDidPerformAction(view: AdaptyUIFlowView, action: AdaptyUIAction) {
when (action) {
is AdaptyUIAction.CustomAction -> {
if (action.action == "login") {
// Handle login action - navigate to login screen
// This depends on your app's navigation system
// For example, in Compose Multiplatform:
// navController.navigate("login")
}
}
else -> Unit
}
}
}Gérer les actions personnalisées
Pour ajouter un bouton qui gère d’autres actions :
- Dans le builder, ajoutez un bouton, assignez-lui l’action Custom et attribuez-lui un ID.
- Dans le code de votre application, implémentez un gestionnaire pour l’ID d’action que vous avez créé.
Par exemple, si vous disposez d’un autre ensemble d’offres d’abonnement ou d’achats uniques, vous pouvez ajouter un bouton qui affichera un autre flow ou paywall :
class MyAdaptyUIFlowsEventsObserver : AdaptyUIFlowsEventsObserver {
override fun flowViewDidPerformAction(view: AdaptyUIFlowView, action: AdaptyUIAction) {
when (action) {
is AdaptyUIAction.CustomAction -> {
when (action.action) {
"openNewFlow" -> {
// Display another flow or paywall
}
}
}
else -> Unit
}
}
}
// Set up the observer
AdaptyUI.setFlowsEventsObserver(MyAdaptyUIFlowsEventsObserver())Seuls les achats et les restaurations sont gérés automatiquement. Toutes les autres actions de bouton, comme fermer les paywalls ou ouvrir des liens, nécessitent d’implémenter les réponses appropriées dans le code de l’application.
Si vous créez des paywalls avec le Paywall Builder d’Adapty, il est indispensable de configurer correctement les boutons :
- Dans l’ancien Paywall Builder, ajoutez un bouton et assignez-lui soit une action prédéfinie, soit un identifiant d’action personnalisée.
- Écrivez du code dans votre application pour gérer chaque action que vous avez assignée.
Ce guide explique comment gérer les actions personnalisées et prédéfinies dans votre code.
Configurer l’AdaptyUIPaywallsEventsObserver
Pour gérer les actions de la paywall, vous devez implémenter l’interface AdaptyUIPaywallsEventsObserver et la configurer avec AdaptyUI.setPaywallsEventsObserver(). Cette étape doit être effectuée tôt dans le cycle de vie de votre application, généralement dans votre activité principale ou lors de l’initialisation de l’application.
// In your app initialization
AdaptyUI.setPaywallsEventsObserver(MyAdaptyUIPaywallsEventsObserver())Fermer les paywalls
Pour ajouter un bouton permettant de fermer votre paywall :
- Dans le Paywall Builder, ajoutez un bouton et assignez-lui l’action Close.
- Dans le code de votre application, implémentez un gestionnaire pour l’action
closequi ferme le paywall.
Dans le SDK Kotlin Multiplatform, les actions CloseAction et AndroidSystemBackAction déclenchent la fermeture du paywall par défaut. Vous pouvez toutefois modifier ce comportement dans votre code si nécessaire. Par exemple, la fermeture d’un paywall peut déclencher l’ouverture d’un autre.
class MyAdaptyUIPaywallsEventsObserver : AdaptyUIPaywallsEventsObserver {
override fun paywallViewDidPerformAction(view: AdaptyUIPaywallView, action: AdaptyUIAction) {
when (action) {
AdaptyUIAction.CloseAction, AdaptyUIAction.AndroidSystemBackAction -> view.dismiss()
}
}
}
// Set up the observer
AdaptyUI.setPaywallsEventsObserver(MyAdaptyUIPaywallsEventsObserver())Si vous utilisez createNativePaywallView, appeler view.dismiss() n’a aucun effet — la vue est intégrée dans votre layout, elle n’est pas présentée via la pile KMP. Retirez la vue de votre layout et appelez dispose() sur celle-ci à la place.
Ouvrir des URLs depuis les paywalls
Si vous souhaitez ajouter un groupe de liens (par exemple, les conditions d’utilisation et la restauration des achats), ajoutez un élément Link dans le Paywall Builder et gérez-le de la même façon que les boutons avec l’action Open URL.
Pour ajouter un bouton qui ouvre un lien depuis votre paywall (par exemple, Terms of use ou Privacy policy) :
- Dans le Paywall Builder, ajoutez un bouton, assignez-lui l’action Open URL et saisissez l’URL à ouvrir.
- Dans le code de votre application, implémentez un gestionnaire pour l’action
openUrlqui ouvre l’URL reçue dans un navigateur.
Dans le SDK Kotlin Multiplatform, OpenUrlAction fournit l’URL à ouvrir. Vous pouvez implémenter une logique personnalisée pour gérer l’ouverture des URL, par exemple en affichant une boîte de dialogue de confirmation ou en utilisant la méthode de gestion des URL préférée de votre application.
class MyAdaptyUIPaywallsEventsObserver(
private val uriHandler: UriHandler
) : AdaptyUIPaywallsEventsObserver {
override fun paywallViewDidPerformAction(view: AdaptyUIPaywallView, action: AdaptyUIAction) {
when (action) {
is AdaptyUIAction.OpenUrlAction -> {
// Show confirmation dialog before opening URL
mainUiScope.launch {
val selectedAction = view.showDialog(
title = "Open URL?",
content = action.url,
primaryActionTitle = "Cancel",
secondaryActionTitle = "Open"
).getOrNull()
when (selectedAction) {
AdaptyUIDialogActionType.PRIMARY -> {
// User cancelled
}
AdaptyUIDialogActionType.SECONDARY -> {
// User confirmed - open URL
uriHandler.openUri(action.url)
}
else -> Unit
}
}
}
}
}
}
// Set up the observer with UriHandler
AdaptyUI.setPaywallsEventsObserver(MyAdaptyUIPaywallsEventsObserver(uriHandler))Se connecter à l’application
Pour ajouter un bouton permettant aux utilisateurs de se connecter à votre application :
- Dans le Paywall Builder, ajoutez un bouton et assignez-lui une action Custom avec l’ID « login ».
- Dans le code de votre application, implémentez un gestionnaire pour cette action personnalisée qui identifie votre utilisateur.
class MyAdaptyUIObserver : AdaptyUIObserver {
override fun paywallViewDidPerformAction(view: AdaptyUIView, action: AdaptyUIAction) {
when (action) {
is AdaptyUIAction.CustomAction -> {
if (action.action == "login") {
// Handle login action - navigate to login screen
// This depends on your app's navigation system
// For example, in Compose Multiplatform:
// navController.navigate("login")
}
}
}
}
}Gérer les actions personnalisées
Pour ajouter un bouton qui gère d’autres actions :
- Dans le Paywall Builder, ajoutez un bouton, assignez-lui l’action Custom, et donnez-lui un identifiant.
- Dans le code de votre application, implémentez un gestionnaire pour l’identifiant d’action que vous avez créé.
Par exemple, si vous avez un autre ensemble d’offres d’abonnement ou d’achats uniques, vous pouvez ajouter un bouton qui affichera un autre paywall :
class MyAdaptyUIPaywallsEventsObserver : AdaptyUIPaywallsEventsObserver {
override fun paywallViewDidPerformAction(view: AdaptyUIPaywallView, action: AdaptyUIAction) {
when (action) {
is AdaptyUIAction.CustomAction -> {
when (action.action) {
"login" -> {
// Handle login action - navigate to login screen
// This depends on your app's navigation system
// For example, in Compose Multiplatform:
// navController.navigate("login")
}
}
}
}
}
}
// Set up the observer
AdaptyUI.setPaywallsEventsObserver(MyAdaptyUIPaywallsEventsObserver())