Migrar el SDK de Adapty Unity a v. 4.0
El SDK de Adapty Unity 4.0 (beta) introduce los flows y renombra las APIs de paywall en consecuencia. Las nuevas APIs funcionan tanto con el nuevo Flow Builder como con el Paywall Builder existente — no se requieren cambios de configuración en el Adapty Dashboard.
Referencia rápida
| v3 | v4 |
|---|---|
Adapty.GetPaywall(placementId, locale, ...) | Adapty.GetFlow(placementId, ...) |
Adapty.GetPaywallForDefaultAudience(placementId, locale, ...) | Adapty.GetFlowForDefaultAudience(placementId, ...) |
Adapty.GetPaywallProducts(paywall, ...) | Adapty.GetPaywallProducts(flow, ...) |
Adapty.LogShowPaywall(paywall, ...) | Adapty.LogShowFlow(flow, ...) |
AdaptyPaywall | AdaptyFlow |
AdaptyUI.CreatePaywallView(paywall, ...) | AdaptyUI.CreateFlowView(flow, ...) |
AdaptyUICreatePaywallViewParameters | AdaptyUICreateFlowViewParameters |
AdaptyUIPaywallView | AdaptyUIFlowView |
AdaptyUI.PresentPaywallView(view, ...) / DismissPaywallView(view, ...) | AdaptyUI.PresentFlowView(view, ...) / DismissFlowView(view, ...) |
Adapty.SetPaywallsEventsListener(listener) | Adapty.SetFlowsEventsListener(listener) |
AdaptyPaywallsEventsListener | IAdaptyFlowsEventsListener |
AdaptyEventListener | IAdaptyEventListener |
AdaptyOnboardingsEventsListener | IAdaptyOnboardingsEventsListener |
PaywallViewDidPerformAction, PaywallViewDidAppear y otros callbacks PaywallView... | FlowViewDidPerformAction, FlowViewDidAppear y otros callbacks FlowView... |
PaywallViewDidFailRendering | FlowViewDidReceiveError |
Adapty.SetFallbackPaywalls(...) (obsoleto en v3) | eliminado — usa Adapty.SetFallback(fileName, ...) |
Builder.SetIDFACollectionDisabled(...) (obsoleto en v3) | eliminado — usa Builder.SetAppleIDFACollectionDisabled(...) |
paywall.Products (una lista de AdaptyProductReference) | eliminado — usa ProductIdentifiers o VendorProductIds, o llama a GetPaywallProducts(flow) para obtener los productos completos |
AdaptyProductReference | eliminado como tipo público — consulta Modelo de datos |
paywall.RemoteConfigString | eliminado — usa flow.RemoteConfig?.Data |
AdaptyPaywallProduct mantiene su nombre — los productos siguen perteneciendo a un flow, y GetPaywallProducts también mantiene su nombre, ahora tomando un AdaptyFlow. Los métodos GetFlow y GetFlowForDefaultAudience ya no aceptan un parámetro locale. Las APIs de compra y perfil (MakePurchase, RestorePurchases, GetProfile, Identify, UpdateProfile) y los respaldos mediante SetFallback no han cambiado. Los métodos de onboarding siguen funcionando pero están obsoletos — consulta Obsolescencia de la API de Onboarding. Algunos comportamientos predeterminados han cambiado — consulta Cambios en el comportamiento predeterminado.
Instalación
v4.0 es una versión preliminar, así que fija la etiqueta beta exacta. Para instalarla mediante el Unity Package Manager, añade la etiqueta a la URL de Git:
https://github.com/adaptyteam/AdaptySDK-Unity.git?path=/Packages/com.adapty.unity-sdk#4.0.0-beta.1
Si instalas mediante el paquete de Unity, descarga adapty-unity-plugin-4.0.0-beta.1.unitypackage desde la versión 4.0.0-beta.1. Consulta Instalar el SDK de Adapty para la configuración completa.
Con v4 llegan dos cambios en la configuración de compilación:
- Las dependencias de iOS cambian a Swift Package Manager. El SDK nativo de Adapty para iOS 4.0 se declara como un paquete remoto de Swift en lugar de un pod de CocoaPods. Actualiza el External Dependency Manager a la versión 1.2.188 o posterior — las versiones anteriores no son compatibles con las dependencias de Swift Package Manager. Los pasos de CocoaPods (
iOS Resolver -> Install Cocoapods, abrirUnity-iPhone.xcworkspace) ya no aplican. - El destino de despliegue de iOS debe ser 15.0 o posterior. Un nuevo validador de compilación en el Unity Editor detiene la compilación para iOS si el destino es inferior.
Las versiones nativas del SDK de Adapty se actualizan a la 4.x en ambas plataformas y se resuelven automáticamente; no se necesitan cambios adicionales en la compilación.
Recuperar flows
GetPaywall → GetFlow
El tipo devuelto cambia de AdaptyPaywall a AdaptyFlow, y el parámetro locale se elimina — cuando renderizas un flow, el idioma se resuelve automáticamente; para paywalls personalizados, todos los idiomas se devuelven en flow.RemoteConfigs:
- Adapty.GetPaywall("YOUR_PLACEMENT_ID", "en", (paywall, error) => {
+ Adapty.GetFlow("YOUR_PLACEMENT_ID", (flow, error) => {
if (error != null) {
// handle the error
return;
}
- // use the paywall
+ // use the flow
});
GetPaywallForDefaultAudience se renombra de la misma manera:
- Adapty.GetPaywallForDefaultAudience("YOUR_PLACEMENT_ID", "en", (paywall, error) => { /* ... */ });
+ Adapty.GetFlowForDefaultAudience("YOUR_PLACEMENT_ID", (flow, error) => { /* ... */ });
GetPaywallProducts(paywall) → GetPaywallProducts(flow)
GetPaywallProducts mantiene su nombre pero ahora acepta un AdaptyFlow:
- Adapty.GetPaywallProducts(paywall, (products, error) => {
+ Adapty.GetPaywallProducts(flow, (products, error) => {
if (error != null) {
// handle the error
return;
}
// use the products
});
Modelo de datos
GetFlow devuelve un AdaptyFlow en lugar de un AdaptyPaywall, y la forma del objeto ha cambiado:
Propiedad de AdaptyPaywall en v3 | Propiedad de AdaptyFlow en v4 | Acción |
|---|---|---|
RemoteConfig (única, nullable) | RemoteConfigs (lista) | Un flow lleva un Remote Config por idioma configurado. Lee el que corresponda al usuario desde flow.RemoteConfigs. El atajo flow.RemoteConfig devuelve la primera entrada. |
| (nuevo) | Paywalls (lista de AdaptyFlowPaywall) | Cada entrada es una variación de paywall en el flow, con su propio Name, VariationId y ProductIdentifiers. Los métodos de web paywall reciben un AdaptyFlowPaywall; consulta Métodos de web paywall. |
ProductIdentifiers, VendorProductIds | se conservan | En AdaptyFlow, estos agregan los productos de todas las variaciones de paywall. Cada variación también expone sus propios ProductIdentifiers y VendorProductIds. Para obtener productos, sigue llamando a GetPaywallProducts(flow). |
HasViewConfiguration | eliminado | Elimina cualquier comprobación de HasViewConfiguration de tu código — CreateFlowView devuelve un error en su lugar (consulta Mostrar flows). |
Products (lista de AdaptyProductReference) | eliminado | AdaptyProductReference ya no es público, y con él desaparecen los valores PromotionalOfferId, WinBackOfferId y AndroidOfferId que contenía. Usa ProductIdentifiers — una lista de AdaptyProductIdentifier con VendorProductId y el campo exclusivo de Android BasePlanId (el AndroidBasePlanId de v3) — o llama a GetPaywallProducts(flow) cuando necesites objetos AdaptyPaywallProduct completos con precios y ofertas. |
RemoteConfigString | eliminado | Lee el string directamente desde el Remote Config: flow.RemoteConfig?.Data, o la entrada correspondiente en flow.RemoteConfigs. |
| (nuevo) | FlowVersionId (nullable) | El identificador de versión del flow, o null cuando no está disponible. |
AdaptyPaywallProduct gana un campo nuevo: FlowProductId, el identificador del producto dentro del flow, que es null para los productos que no pertenecen a un flow.
Métodos de paywall web
OpenWebPaywall y CreateWebPaywallUrl mantienen sus nombres, pero el argumento paywall ahora acepta un AdaptyFlowPaywall — una de las variaciones en flow.Paywalls. Aún puedes pasar un AdaptyPaywallProduct en su lugar:
- Adapty.OpenWebPaywall(paywall, AdaptyWebPresentation.ExternalBrowser, (error) => { /* ... */ });
+ var flowPaywall = flow.Paywalls.FirstOrDefault();
+ if (flowPaywall != null) {
+ Adapty.OpenWebPaywall(flowPaywall, AdaptyWebPresentation.ExternalBrowser, (error) => { /* ... */ });
+ }
Seguimiento de visualizaciones de flows
LogShowPaywall → LogShowFlow
LogShowPaywall ha sido renombrado a LogShowFlow y ahora acepta un AdaptyFlow. El evento sigue registrándose en la misma variación, por lo que las métricas del embudo y de las pruebas A/B siguen funcionando sin cambios en el dashboard.
- Adapty.LogShowPaywall(paywall, (error) => { /* ... */ });
+ Adapty.LogShowFlow(flow, (error) => { /* ... */ });
Al igual que en la v3, no es necesario llamar a este método al mostrar flows o paywalls renderizados por el Flow Builder o el Paywall Builder — Adapty registra esas vistas automáticamente.
Mostrando flows
CreatePaywallView → CreateFlowView
Renombra el método de fábrica y pasa el AdaptyFlow. El tipo de vista devuelto cambia de AdaptyUIPaywallView a AdaptyUIFlowView, pero sus métodos (Present, Dismiss) no cambian, y el objeto de parámetros opcionales mantiene los mismos campos (LoadTimeout, PreloadProducts, CustomTags, CustomTimers, CustomAssets, ProductPurchaseParameters) bajo el nuevo nombre AdaptyUICreateFlowViewParameters, además de dos nuevos — Locale y EnableSafeAreaPaddings:
- AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
+ AdaptyUI.CreateFlowView(flow, parameters, (view, error) => {
if (error != null) {
// handle the error
return;
}
view.Present((error) => { /* handle the error */ });
});
CreateFlowView devuelve un error si el flow no tiene ninguna vista configurada — esto reemplaza la comprobación HasViewConfiguration de la v3:
- if (paywall.HasViewConfiguration) {
- AdaptyUI.CreatePaywallView(paywall, null, (view, error) => { /* ... */ });
- }
+ AdaptyUI.CreateFlowView(flow, (view, error) => {
+ if (error != null) {
+ // the flow has no view configured, or view creation failed
+ return;
+ }
+ view.Present((error) => { /* handle the error */ });
+ });
Una vista de flow es de un solo uso: después de llamar a Dismiss, la vista se destruye, por lo que debes llamar a CreateFlowView de nuevo para mostrar el flow otra vez.
Rellenos de área segura en Android
AdaptyUICreateFlowViewParameters añade EnableSafeAreaPaddings, que controla los rellenos de área segura en Android en tiempo de ejecución. Se ignora en iOS y su valor predeterminado es true:
var parameters = new AdaptyUICreateFlowViewParameters()
.SetEnableSafeAreaPaddings(false);
Manejo de eventos
Las interfaces de listener siguen ahora la convención de prefijo I de C#, y no se mantienen alias heredados; renombra AdaptyEventListener a IAdaptyEventListener y AdaptyOnboardingsEventsListener a IAdaptyOnboardingsEventsListener en todos los lugares donde las implementes.
El listener de eventos de flow se renombra de AdaptyPaywallsEventsListener a IAdaptyFlowsEventsListener, su método de registro de SetPaywallsEventsListener a SetFlowsEventsListener, y sus callbacks cambian el prefijo PaywallView por FlowView. Los cuerpos de los handlers existentes no necesitan cambios de código: solo hay que renombrar la interfaz y los métodos:
- public class MyListener : MonoBehaviour, AdaptyPaywallsEventsListener {
- public void PaywallViewDidFinishPurchase(
- AdaptyUIPaywallView view,
+ public class MyListener : MonoBehaviour, IAdaptyFlowsEventsListener {
+ public void FlowViewDidFinishPurchase(
+ AdaptyUIFlowView view,
AdaptyPaywallProduct product,
AdaptyPurchaseResult purchasedResult
) {
// custom logic after purchase
}
// ...
}
- Adapty.SetPaywallsEventsListener(myListener);
+ Adapty.SetFlowsEventsListener(myListener);
Un callback ha sido renombrado: PaywallViewDidFailRendering pasa a llamarse FlowViewDidReceiveError. Se activa para los mismos errores de renderizado que antes, además de otros errores de ejecución no relacionados con compras:
- public void PaywallViewDidFailRendering(AdaptyUIPaywallView view, AdaptyError error) { }
+ public void FlowViewDidReceiveError(AdaptyUIFlowView view, AdaptyError error) { }
Consulta Gestionar eventos de flow y paywall para ver la lista completa de callbacks.
Nuevas APIs
Adapty.SetObserverModeResolver(...)con unIAdaptyUIObserverModeResolver— gestiona las compras y restauraciones iniciadas desde flows mientras el SDK se ejecuta en modo Observer. Antes esto solo estaba disponible en los SDKs nativos de iOS y Android. Consulta Presentar flows en modo Observer.Adapty.SetSystemRequestsHandler(...)con unIAdaptyUISystemRequestsHandler— reservado para solicitudes del sistema desde un flow: permisos del SO (FlowViewDidAskPermission) y solicitudes de valoración de la app (FlowViewDidRequestAppReview). Los flows aún no desencadenan estas solicitudes, por lo que no necesitas registrar un handler.AdaptyUICreateFlowViewParameters.Locale(configúralo conSetLocale) — renderiza un flow o paywall con una localización del Builder específica en lugar de la que Adapty resuelve a partir del dispositivo. Un flow se localiza cuando se crea su vista, por lo que este es el único lugar para elegir su localización; la vista creada indica la localización con la que se construyó enview.Locale. Consulta Usar localizaciones y códigos de idioma.- El nuevo callback
FlowViewDidReceiveAnalyticEventenIAdaptyFlowsEventsListenerestá reservado para eventos analíticos personalizados de un flow. Los flows aún no emiten estos eventos a tu código, así que impleméntalo con un cuerpo vacío. AdaptyUI.OpenUrl(url, openIn, ...)yAdaptyUI.RequestAppReview(...)— el manejo nativo detrás de las accionesopen_urly las solicitudes de valoración de la app. Llama aOpenUrldesdeFlowViewDidPerformActionpara mantener el comportamiento de URL predeterminado;RequestAppReviewrespalda el prompt de valoración predeterminado, que los flows aún no desencadenan.
Cambios en el comportamiento predeterminado
Estos cambios no causan errores de compilación, así que compruébalos en tiempo de ejecución:
- Finalización de la compra: En v3, la vista se cerraba automáticamente tras una compra exitosa. En v4, un flow permanece abierto tras una compra o un error hasta que lo cierres tú — el SDK no aplica ningún comportamiento por defecto. Llama a
view.Dismiss(...)enFlowViewDidFinishPurchaseuna vez que el usuario obtenga acceso. - Botón Atrás de Android: El botón Atrás del sistema (o el gesto de retroceso) se entrega a
FlowViewDidPerformActioncomo una acciónSystemBacky ya no cierra un flow por sí solo — igual que en iOS, donde un flow no puede cerrarse con un gesto del sistema. Ofrece a los usuarios una salida explícita (un botón Close o una acciónon_device_back), o cierra la vista tú mismo al gestionar la acción. - Las vistas son de un solo uso: Después de
Dismiss, la vista se destruye. Llama aCreateFlowViewde nuevo para mostrar el flow otra vez. - Transacciones en modo Observer:
ReportTransactionya no devuelve un error de decodificación cuando tiene éxito — en v3 la respuesta de éxito se parseaba incorrectamente, por lo que un reporte exitoso siempre terminaba con un error.
Baja de la API de onboarding
La API de onboarding heredada está en desuso desde v4.0 en favor del Flow Builder. Sigue funcionando, pero se eliminará en una versión futura, así que planifica la migración de tus onboardings al Flow Builder.
Símbolos en desuso: GetOnboarding, GetOnboardingForDefaultAudience, AdaptyUI.CreateOnboardingView, AdaptyUI.PresentOnboardingView, AdaptyUI.DismissOnboardingView y Adapty.SetOnboardingsEventsListener.