Obtener paywalls y productos para paywalls de Remote Config en iOS SDK

Antes de mostrar Remote Config y paywalls personalizados, necesitas obtener la información sobre ellos. Ten en cuenta que este tema hace referencia a Remote Config y paywalls personalizados. Para obtener orientación sobre cómo obtener flows o paywalls personalizados en el Flow Builder o Paywall Builder, consulta las guías sobre cómo obtener flows y paywalls en tu app .

¿Quieres ver un ejemplo real de cómo se integra el SDK de Adapty en una app móvil? Echa un vistazo a nuestras apps de ejemplo, que muestran la configuración completa, incluyendo la visualización de paywalls, la realización de compras y otras funcionalidades básicas.

Antes de empezar a obtener flows y productos en tu aplicación móvil (haz clic para expandir)
  1. Crea tus productos en el Adapty Dashboard.

  2. Crea un flow o paywall e incorpora los productos en él en el Adapty Dashboard.

  3. Crea placements e incorpora tu flow o paywall en el placement en el Adapty Dashboard.

  4. Instala el SDK de Adapty en tu aplicación móvil.

Obtener información del flow

En Adapty, un producto es una combinación de productos tanto de App Store como de Google Play. Estos productos multiplataforma se integran en flows y paywalls, lo que te permite mostrarlos en placements específicos de tu app móvil.

Para mostrar los productos, necesitas obtener un AdaptyFlow de uno de tus placements mediante el método getFlow.

No uses IDs de producto hardcodeados. El único ID que debes hardcodear es el ID del placement. Los flows se configuran de forma remota, por lo que el número de productos y las ofertas disponibles pueden cambiar en cualquier momento. Tu app debe gestionar estos cambios de forma dinámica: si un flow devuelve dos productos hoy y tres mañana, muéstralos todos sin necesidad de cambiar el código.

ParámetroPresenciaDescripción
placementIdobligatorioEl identificador del Placement. Es el valor que especificaste al crear un placement en tu Adapty Dashboard.
fetchPolicypor defecto: .reloadRevalidatingCacheData

Por defecto, el SDK intentará cargar los datos desde el servidor y devolverá los datos en caché en caso de fallo. Recomendamos esta opción porque garantiza que tus usuarios siempre reciban los datos más actualizados.

Sin embargo, si crees que tus usuarios tienen una conexión a internet inestable, considera usar .returnCacheDataElseLoad para devolver los datos en caché si existen. En este caso, puede que los usuarios no obtengan los datos absolutamente más recientes, pero experimentarán tiempos de carga más rápidos, independientemente de lo inestable que sea su conexión. La caché se actualiza con regularidad, por lo que es seguro usarla durante la sesión para evitar peticiones de red.

Ten en cuenta que la caché permanece intacta al reiniciar la app y solo se borra cuando se reinstala la app o mediante una limpieza manual.

El SDK de Adapty almacena los flows y paywalls en dos capas: la caché de actualización periódica descrita anteriormente y los paywalls de respaldo. También usamos CDN para obtener flows y paywalls más rápido, y un servidor de respaldo independiente en caso de que el CDN no esté disponible.

loadTimeoutpor defecto: 5 seg

Este valor limita el tiempo de espera de este método. Si se alcanza el tiempo límite, se devolverán los datos en caché o el fallback local.

Ten en cuenta que en casos excepcionales este método puede exceder ligeramente el tiempo de espera especificado en loadTimeout, ya que la operación puede incluir diferentes peticiones internamente.

En la versión 4, el parámetro locale ha pasado de getFlow a getFlowConfiguration (que solo se usa al renderizar con AdaptyUI). Para los paywalls personalizados, todas las configuraciones regionales disponibles se devuelven juntas en flow.remoteConfigs — elige la que coincida con el idioma del dispositivo del usuario o con la configuración de tu app.

¡No escribas los IDs de productos en el código! Como los flows se configuran de forma remota, los productos disponibles, el número de productos y las ofertas especiales (como los períodos de prueba gratuitos) pueden cambiar con el tiempo. Asegúrate de que tu código gestione estos escenarios.

Por ejemplo, si inicialmente obtienes 2 productos, tu app debería mostrar esos 2 productos. Sin embargo, si más adelante obtienes 3 productos, tu app debería mostrar los 3 sin necesidad de cambios en el código. Lo único que tienes que escribir directamente en el código es el ID del placement.

Parámetros de respuesta:

ParámetroDescripción
FlowUn objeto AdaptyFlow que contiene el placement, los identificadores (id, variationId), el nombre, un array remoteConfigs (una entrada por cada locale configurado) y un flag hasViewConfiguration. Para obtener los productos del flow, llama a getPaywallProducts(flow:).

Obtener productos

Una vez que tienes el flow, puedes consultar el array de productos asociado a él:

Parámetros de respuesta:

ParámetroDescripción
ProductsLista de objetos AdaptyPaywallProduct con: identificador de producto, nombre del producto, precio, moneda, duración de la suscripción y otras propiedades.
Al implementar tu propio diseño de paywall, probablemente necesitarás acceder a estas propiedades del objeto AdaptyPaywallProduct. A continuación se muestran las propiedades más utilizadas, pero consulta el documento enlazado para obtener información completa sobre todas las propiedades disponibles.
PropiedadDescripción
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TitlePara mostrar el título del producto, usa product.localizedTitle. Ten en cuenta que la localización se basa en el país de la store seleccionado por el usuario, no en el idioma del dispositivo.
PricePara mostrar el precio localizado, usa product.localizedPrice. Esta localización se basa en la configuración regional del dispositivo. También puedes acceder al precio como número con product.price. El valor se devuelve en la moneda local. Para obtener el símbolo de la moneda, usa product.currencySymbol.
Subscription PeriodPara mostrar el período (p. ej., semana, mes, año, etc.), usa product.localizedSubscriptionPeriod. Esta localización se basa en la configuración regional del dispositivo. Para obtener el período de suscripción de forma programática, usa product.subscriptionPeriod. Desde ahí puedes acceder al enum unit para conocer la duración (es decir, día, semana, mes, año o desconocido). El valor numberOfUnits te devuelve el número de unidades del período. Por ejemplo, en una suscripción trimestral verás .month en la propiedad unit y 3 en numberOfUnits.
Introductory OfferPara mostrar una etiqueta u otro indicador de que una suscripción incluye una oferta introductoria, consulta la propiedad product.subscriptionOffer. Este objeto contiene las siguientes propiedades útiles:
offerType: un enum con los valores introductory, promotional y winBack. Las pruebas gratuitas y las suscripciones con descuento inicial serán del tipo introductory.
price: el precio con descuento como número. En las pruebas gratuitas, el valor será 0.
localizedPrice: el precio del descuento formateado según la configuración regional del usuario.
localizedNumberOfPeriods: una cadena localizada según la configuración regional del dispositivo que describe la duración de la oferta. Por ejemplo, una prueba de tres días mostrará 3 days en este campo.
subscriptionPeriod: alternativamente, puedes obtener los detalles individuales del período de la oferta con esta propiedad. Funciona del mismo modo que se describe en la sección anterior.
localizedSubscriptionPeriod: el período de suscripción del descuento formateado según la configuración regional del usuario.

En la versión 4, todos los productos devueltos por getPaywallProducts(flow:) ya incluyen información sobre la elegibilidad de ofertas. La llamada separada getPaywallProductsWithoutDeterminingOffer de la versión 3 ha sido eliminada.

Acelera la carga de flows con el flow de audiencia predeterminada

Normalmente, los flows se cargan casi de forma instantánea, por lo que no necesitas preocuparte por optimizar este proceso. Sin embargo, si tienes muchas audiencias y placements, y tus usuarios tienen una conexión a internet lenta, cargar un flow puede tardar más de lo esperado. En esos casos, puede que quieras mostrar un flow predeterminado para garantizar una experiencia de usuario fluida en lugar de no mostrar nada. Para solucionar esto, puedes usar el método getFlowForDefaultAudience, que obtiene el flow del placement especificado para la audiencia All Users. Sin embargo, es fundamental entender que el enfoque recomendado es obtener el flow con el método getFlow, tal como se detalla en la sección Obtener información del flow anterior.

Por qué recomendamos usar getFlow

El método getFlowForDefaultAudience tiene algunos inconvenientes importantes:

  • Posibles problemas de compatibilidad con versiones anteriores: Si necesitas mostrar flows distintos según la versión de la app (la actual y las futuras), puedes encontrarte con dificultades. Tendrás que diseñar flows compatibles con la versión actual (legacy) o asumir que los usuarios con esa versión podrían tener problemas al no renderizarse los flows.
  • Pérdida de targeting: Todos los usuarios verán el mismo flow diseñado para la audiencia All Users, lo que significa que pierdes la personalización del targeting (incluida la segmentación por países, atribución de marketing o atributos personalizados propios). Si estás dispuesto a aceptar estas desventajas a cambio de una carga más rápida del flow, usa el método getFlowForDefaultAudience de la siguiente manera. De lo contrario, utiliza el método getFlow descrito anteriormente.
ParámetroPresenciaDescripción
placementIdobligatorioEl identificador del Placement. Es el valor que especificaste al crear un placement en tu Adapty Dashboard.
fetchPolicypor defecto: .reloadRevalidatingCacheData

Por defecto, el SDK intentará cargar los datos desde el servidor y devolverá los datos en caché en caso de fallo. Recomendamos esta opción porque garantiza que tus usuarios siempre reciban los datos más actualizados.

Sin embargo, si crees que tus usuarios tienen una conexión a internet inestable, considera usar .returnCacheDataElseLoad para devolver los datos en caché si existen. En este caso, es posible que los usuarios no obtengan los datos absolutamente más recientes, pero experimentarán tiempos de carga más rápidos, independientemente de la calidad de su conexión. La caché se actualiza con regularidad, por lo que es seguro usarla durante la sesión para evitar peticiones de red.

Ten en cuenta que la caché permanece intacta al reiniciar la app y solo se borra cuando se reinstala la app o mediante una limpieza manual.

Antes de mostrar el Remote Config y los paywalls personalizados, necesitas obtener la información sobre ellos. Ten en cuenta que este tema se refiere a Remote Config y paywalls personalizados. Para obtener orientación sobre cómo recuperar paywalls configurados con Paywall Builder, consulta las guías sobre cómo obtener paywalls de Paywall Builder en tu app .

¿Quieres ver un ejemplo real de cómo se integra el SDK de Adapty en una app móvil? Echa un vistazo a nuestras apps de ejemplo, que muestran la configuración completa, incluyendo la visualización de paywalls, la realización de compras y otras funcionalidades básicas.

Antes de empezar a obtener paywalls y productos en tu app (haz clic para expandir)
  1. Crea tus productos en el Adapty Dashboard.

  2. Crea un paywall e incorpora los productos a tu paywall en el Adapty Dashboard.

  3. Crea placements e incorpora tu paywall al placement en el Adapty Dashboard.

  4. Instala el SDK de Adapty en tu app.

Obtener información del paywall

En Adapty, un producto es una combinación de productos tanto de App Store como de Google Play. Estos productos multiplataforma se integran en paywalls, lo que te permite mostrarlos en placements específicos de tu aplicación móvil.

Para mostrar los productos, necesitas obtener un Paywall desde uno de tus placements con el método getPaywall.

No escribas los IDs de productos en el código. El único ID que debes incluir directamente en el código es el del placement. Los paywalls se configuran de forma remota, por lo que el número de productos y las ofertas disponibles pueden cambiar en cualquier momento. Tu app debe gestionar estos cambios dinámicamente: si hoy un paywall devuelve dos productos y mañana tres, muéstralos todos sin necesidad de modificar el código.

ParámetroPresenciaDescripción
placementIdobligatorioEl identificador del Placement. Es el valor que especificaste al crear un placement en tu Adapty Dashboard.
locale

opcional

por defecto: en

El identificador de la localización del paywall. Se espera que este parámetro sea un código de idioma compuesto por una o más subetiquetas separadas por el carácter menos (-). La primera subetiqueta corresponde al idioma y la segunda a la región.

Ejemplo: en significa inglés, pt-br representa el portugués de Brasil.

Consulta Localizaciones y códigos de idioma para más información sobre los códigos de idioma y cómo recomendamos usarlos.

fetchPolicypor defecto: .reloadRevalidatingCacheData

Por defecto, el SDK intentará cargar los datos desde el servidor y devolverá los datos en caché en caso de fallo. Recomendamos esta opción porque garantiza que tus usuarios siempre reciban los datos más actualizados.

Sin embargo, si crees que tus usuarios tienen una conexión a internet inestable, considera usar .returnCacheDataElseLoad para devolver los datos en caché si existen. En este caso, puede que los usuarios no obtengan los datos más recientes, pero experimentarán tiempos de carga más rápidos independientemente de lo irregular que sea su conexión. La caché se actualiza con regularidad, por lo que es seguro usarla durante la sesión para evitar solicitudes de red.

Ten en cuenta que la caché permanece intacta al reiniciar la app y solo se borra cuando se reinstala la app o mediante una limpieza manual.

El SDK de Adapty almacena los paywalls en dos capas: la caché de actualización periódica descrita anteriormente y los paywalls de respaldo. También usamos CDN para obtener los paywalls más rápido y un servidor de respaldo independiente en caso de que el CDN no sea accesible. Este sistema está diseñado para garantizar que siempre obtengas la versión más reciente de tus paywalls, asegurando la fiabilidad incluso cuando la conexión a internet es limitada.

loadTimeoutpor defecto: 5 seg

Este valor limita el tiempo de espera para este método. Si se alcanza el timeout, se devolverán los datos en caché o el fallback local.

Ten en cuenta que en casos excepcionales este método puede superar ligeramente el tiempo especificado en loadTimeout, ya que la operación puede comprender varias solicitudes internamente.

¡No uses IDs de producto codificados directamente en el código! Como los paywalls se configuran de forma remota, los productos disponibles, su cantidad y las ofertas especiales (como pruebas gratuitas) pueden cambiar con el tiempo. Asegúrate de que tu código gestione estos escenarios.

Por ejemplo, si al principio obtienes 2 productos, tu app debería mostrar esos 2 productos. Sin embargo, si más adelante obtienes 3 productos, tu app debería mostrar los 3 sin necesidad de modificar el código. Lo único que debes codificar directamente es el ID del placement.

Parámetros de respuesta:

ParámetroDescripción
PaywallUn objeto AdaptyPaywall con: una lista de IDs de productos, el identificador del paywall, Remote Config y varias otras propiedades.

Obtener productos

Una vez que tienes el paywall, puedes consultar el array de productos que le corresponde:

Parámetros de respuesta:

ParámetroDescripción
ProductsLista de objetos AdaptyPaywallProduct con: identificador del producto, nombre del producto, precio, moneda, duración de la suscripción y otras propiedades.
Al implementar tu propio diseño de paywall, es probable que necesites acceso a estas propiedades del objeto AdaptyPaywallProduct. A continuación se ilustran las propiedades más utilizadas, pero consulta el documento enlazado para ver todos los detalles de todas las propiedades disponibles.
PropiedadDescripción
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TitlePara mostrar el título del producto, usa product.localizedTitle. Ten en cuenta que la localización se basa en el país de la store seleccionado por el usuario, no en el idioma del dispositivo.
PricePara mostrar el precio en formato localizado, usa product.localizedPrice. Esta localización se basa en la configuración regional del dispositivo. También puedes acceder al precio como número con product.price. El valor se devolverá en la moneda local. Para obtener el símbolo de moneda correspondiente, usa product.currencySymbol.
Subscription PeriodPara mostrar el período (p. ej., semana, mes, año, etc.), usa product.localizedSubscriptionPeriod. Esta localización se basa en el idioma del dispositivo. Para obtener el período de suscripción de forma programática, usa product.subscriptionPeriod. Desde ahí puedes acceder al enum unit para conocer la unidad de tiempo (es decir, día, semana, mes, año o desconocido). El valor numberOfUnits te dará el número de unidades del período. Por ejemplo, para una suscripción trimestral verías .month en la propiedad unit y 3 en numberOfUnits.
Introductory OfferPara mostrar una insignia u otro indicador de que una suscripción incluye una oferta introductoria, consulta la propiedad product.subscriptionOffer. Este objeto contiene las siguientes propiedades útiles:
offerType: un enum con los valores introductory, promotional y winBack. Las pruebas gratuitas y las suscripciones con descuento inicial serán del tipo introductory.
price: el precio con descuento como número. Para las pruebas gratuitas, busca 0 aquí.
localizedPrice: el precio del descuento formateado según la configuración regional del usuario.
localizedNumberOfPeriods: una cadena localizada según el idioma del dispositivo que describe la duración de la oferta. Por ejemplo, una oferta de prueba de tres días muestra 3 days en este campo.
subscriptionPeriod: como alternativa, puedes obtener los detalles individuales del período de la oferta con esta propiedad. Funciona de la misma forma que se describe en la sección anterior.
localizedSubscriptionPeriod: el período de suscripción del descuento formateado según la configuración regional del usuario.

Comprobar la elegibilidad de la oferta introductoria en iOS

De forma predeterminada, el método getPaywallProducts comprueba la elegibilidad para las ofertas introductorias, promocionales y de recuperación. Si necesitas mostrar los productos antes de que el SDK determine la elegibilidad de las ofertas, usa el método getPaywallProductsWithoutDeterminingOffer en su lugar.

Tras mostrar los productos iniciales, asegúrate de llamar al método getPaywallProducts habitual para actualizar los productos con información precisa sobre la elegibilidad de las ofertas.

Acelera la carga del paywall con el paywall de audiencia predeterminada

Normalmente, los paywalls se obtienen casi al instante, por lo que no necesitas preocuparte por optimizar este proceso. Sin embargo, cuando tienes muchas audiencias y paywalls, y tus usuarios tienen una conexión a internet débil, la carga de un paywall puede tardar más de lo deseado. En esas situaciones, puede que quieras mostrar un paywall predeterminado para garantizar una experiencia fluida en lugar de no mostrar ningún paywall. Para resolver esto, puedes usar el método getPaywallForDefaultAudience, que obtiene el paywall del placement especificado para la audiencia All Users. Sin embargo, es fundamental entender que el enfoque recomendado es obtener el paywall con el método getPaywall, tal como se detalla en la sección Obtener información del paywall anterior.

Por qué recomendamos usar getPaywall

El método getPaywallForDefaultAudience tiene varios inconvenientes importantes:

  • Posibles problemas de compatibilidad con versiones anteriores: Si necesitas mostrar diferentes paywalls para distintas versiones de la app (la actual y futuras), es posible que encuentres dificultades. Tendrás que diseñar paywalls compatibles con la versión actual (heredada) o asumir que los usuarios con esa versión podrían tener problemas al no poder renderizar los paywalls.
  • Pérdida de targeting: Todos los usuarios verán el mismo paywall diseñado para la audiencia All Users, lo que significa que pierdes la personalización del targeting (incluyendo criterios como país, atribución de marketing o atributos personalizados propios). Si estás dispuesto a aceptar estas desventajas para beneficiarte de una carga más rápida del paywall, usa el método getPaywallForDefaultAudience de la siguiente manera. De lo contrario, utiliza getPaywall descrito anteriormente.

El método getPaywallForDefaultAudience está disponible a partir de la versión 2.11.2 del SDK de iOS.

ParámetroPresenciaDescripción
placementIdobligatorioEl identificador del Placement. Es el valor que especificaste al crear un placement en tu Adapty Dashboard.
locale

opcional

por defecto: en

El identificador de la localización del paywall. Se espera que este parámetro sea un código de idioma compuesto por una o más subetiquetas separadas por el carácter menos (-). La primera subetiqueta corresponde al idioma y la segunda a la región.

Ejemplo: en significa inglés, pt-br representa el portugués de Brasil.

Consulta Localizaciones y códigos de idioma para más información sobre los códigos de idioma y cómo recomendamos usarlos.

fetchPolicypor defecto: .reloadRevalidatingCacheData

Por defecto, el SDK intentará cargar los datos desde el servidor y devolverá los datos en caché en caso de fallo. Recomendamos esta opción porque garantiza que tus usuarios siempre reciban los datos más actualizados.

Sin embargo, si crees que tus usuarios tienen una conexión a internet inestable, considera usar .returnCacheDataElseLoad para devolver los datos en caché si existen. En este caso, los usuarios puede que no obtengan los datos más recientes, pero experimentarán tiempos de carga más rápidos, independientemente de lo irregular que sea su conexión. La caché se actualiza con regularidad, por lo que es seguro usarla durante la sesión para evitar peticiones de red.

Ten en cuenta que la caché permanece intacta al reiniciar la app y solo se borra cuando se reinstala la app o mediante una limpieza manual.