Optimizar la obtención de flows y paywalls en el SDK de Kotlin Multiplatform

Una obtención fiable de un flow o paywall en Kotlin Multiplatform hace tres cosas: renderiza rápido, devuelve la variante dirigida a la audiencia y tiene un respaldo elegante cuando la red es lenta. Las reglas que se explican a continuación cubren los patrones de tiempo, caché y respaldo para lograrlo.

Tip

Se asume que Adapty.activate() y Adapty.identify() ya se han completado. Consulta Orden de llamadas en el SDK de Kotlin Multiplatform.

Reglas y advertencias

Haz estoNo hagas estoPor qué
Obtén el placement que estás a punto de mostrar.Precarga todos los placements de forma concurrente al iniciar la app.La precarga masiva bloquea el hilo principal y provoca una pantalla en negro durante el pico.
Llama a getFlow después de que la atribución haya tenido tiempo de resolverse — por ejemplo, 1–2 segundos después de activate o tras que se dispare setOnProfileUpdatedListener.Llama a getFlow al iniciar la app.La atribución aún no ha llegado. El flow se resuelve contra la audiencia predeterminada y omite silenciosamente los segmentos y la personalización de ASA.
Establece un loadTimeout y configura un paywall de respaldo para cada placement.Esperes indefinidamente a que getFlow responda.Sin un timeout, los usuarios con mala conectividad ven una pantalla en blanco hasta que la red responde — o cierran la app.

Consulta Obtener paywalls y productos para la referencia de los parámetros fetchPolicy y loadTimeout, y Placements para elegir el placement adecuado.

Mostrar el contenido multimedia de la primera pantalla desde el bundle de la app

Un flow descarga sus imágenes y vídeos desde Adapty. Para mostrar el contenido multimedia de la primera pantalla de forma inmediata, sírvelo desde el bundle de la app. Es una buena forma de reutilizar recursos que ya incluyes en la app, como los visuales de un onboarding nativo existente.

  1. En el Flow & Paywall Builder, establece un ID de medio personalizado en la imagen o el vídeo. El archivo que subas ahí será el de respaldo.
  2. Añade el archivo a los recursos de tu app, en commonMain/composeResources/files/.
  3. Al crear la vista del flow, pasa el archivo incluido en el bundle para ese ID en 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
}

Los archivos incluidos aumentan el tamaño de descarga de tu app, así que incluye solo los recursos multimedia que el usuario ve primero.

Los archivos multimedia que no incluyas en el bundle seguirán apareciendo de inmediato: el layout del flow incluye una copia en baja resolución de cada imagen, incluido el fotograma estático de los vídeos, y la muestra hasta que se cargue el archivo completo.

Para la referencia completa de customAssets, consulta Personalizar assets.

Ajuste para conectividad deficiente

Para mercados con conectividad consistentemente deficiente (zonas rurales, transporte, regiones afectadas por enrutamiento):

  • Establece fetchPolicy = AdaptyPaywallFetchPolicy.ReturnCacheDataElseLoad en cada fetch excepto el primero.
  • Configura un paywall de respaldo para cada placement en el Adapty Dashboard.
  • Establece loadTimeout entre 3 y 5 segundos y acepta el respaldo cuando se agote el tiempo.
  • No bloquees la visualización del flow esperando Adapty.getProfile(). Llama a getFlow de forma independiente para que un perfil lento no bloquee la UI.