Optimiser la récupération des flows et paywalls dans le SDK Kotlin Multiplatform

Une récupération fiable de flow ou de paywall sur Kotlin Multiplatform repose sur trois éléments : un affichage rapide, le renvoi de la variante ciblée par l’audience, et un repli élégant en cas de réseau lent. Les règles ci-dessous couvrent le timing, la mise en cache et les patterns de secours pour y parvenir.

Tip

Ces règles supposent que Adapty.activate() et Adapty.identify() ont déjà été résolus. Voir Ordre d’appel dans le SDK Kotlin Multiplatform.

Règles et pièges

À faireÀ ne pas fairePourquoi
Récupérez uniquement le placement que vous êtes sur le point d’afficher.Prérécupérez tous les placements simultanément au lancement.La prérécupération en masse bloque le thread principal et provoque un écran noir pendant la rafale.
Appelez getFlow après que l’attribution a eu le temps de se résoudre — par exemple, 1 à 2 secondes après activate ou après le déclenchement de setOnProfileUpdatedListener.Appelez getFlow au lancement de l’application.L’attribution n’est pas encore arrivée. Le flow se résout par rapport à l’audience par défaut et contourne silencieusement les segments et la personnalisation ASA.
Définissez un loadTimeout et configurez un paywall de secours pour chaque placement.Attendez getFlow indéfiniment.Sans timeout, les utilisateurs avec une mauvaise connexion voient un écran vide jusqu’à la résolution réseau — ou ferment l’application.

Consultez Récupérer les paywalls et les produits pour la référence des paramètres fetchPolicy et loadTimeout, et Placements pour choisir le bon placement.

Afficher les médias du premier écran depuis le bundle de l’application

Un flow télécharge ses images et vidéos depuis Adapty. Pour afficher instantanément les médias du premier écran, servez-les depuis le bundle de l’application. C’est un bon moyen de réutiliser des médias déjà intégrés, comme les visuels d’un onboarding natif existant.

  1. Dans le Flow & Paywall Builder, définissez un identifiant de média personnalisé sur l’image ou la vidéo. Le fichier que vous importez là-bas reste le fichier de secours.
  2. Ajoutez le fichier à vos ressources d’application, dans commonMain/composeResources/files/.
  3. Lorsque vous créez la vue du flow, passez le fichier intégré pour cet identifiant dans customAssets :
// "welcome_video" is the custom media ID set in the Flow & Paywall Builder
val bundledAssets: Map<String, AdaptyCustomAsset> = mapOf(
    "welcome_video" to AdaptyCustomAsset.localVideoResource(
        path = Res.getUri("files/videos/welcome.mp4")
    ),
)

AdaptyUI.createFlowView(
    flow = flow,
    customAssets = bundledAssets,
).onSuccess { view ->
    view.present()
}.onError { error ->
    // handle the error
}

Les fichiers intégrés augmentent la taille de téléchargement de votre application, ne bundlez donc que les médias vus en premier par les utilisateurs.

Les médias que vous n’intégrez pas apparaissent quand même immédiatement : la mise en page du flow inclut une petite copie basse résolution de chaque image, y compris l’image fixe d’une vidéo, et l’affiche jusqu’au chargement du fichier complet.

Pour la référence complète de customAssets, consultez Personnaliser les assets.

Optimiser pour une mauvaise connectivité

Pour les marchés où la connectivité est régulièrement mauvaise (zones rurales, transports en commun, régions affectées par le routage) :

  • Définissez fetchPolicy = AdaptyPaywallFetchPolicy.ReturnCacheDataElseLoad sur chaque fetch, sauf le tout premier.
  • Configurez un paywall de secours pour chaque placement dans l’Adapty Dashboard.
  • Définissez loadTimeout entre 3 et 5 secondes et acceptez le paywall de secours à l’expiration du délai.
  • Ne bloquez pas l’affichage du flow sur Adapty.getProfile(). Appelez getFlow indépendamment pour qu’un profil lent ne bloque pas l’interface.