Migrar el SDK de iOS de Adapty a v4.1
El SDK de iOS de Adapty 4.1 cambia la forma en que se habilita Adapty Attribution, renombra las APIs de atribución externa y cambia el formato del archivo de respaldo. También recupera el soporte para las compras in-app promocionadas en el App Store, que se eliminaron en la versión 4.0.
Las APIs renombradas son un cambio radical. Los nombres anteriores se han eliminado por completo — no están obsoletos, y no hay typealiases ni anotaciones @available(renamed:) que sirvan de puente. El código que compila con 4.0.x no compilará con 4.1 hasta que renombres cada punto de llamada indicado a continuación.
Referencia rápida
| v4.0 | v4.1 |
|---|---|
| Atribución de Adapty habilitada automáticamente | Atribución de Adapty deshabilitada por defecto; actívala con .with(adaptyAttributionEnabled: true) |
Adapty.updateAttribution(_:source:) | Adapty.updateExternalAttribution(_:provider:) |
Adapty.updateAttribution(_ attributionJson: String, source:) | Eliminado de la API pública; pasa un diccionario en su lugar |
AdaptyAttributionSource | AdaptyExternalAttributionProvider, con un nuevo valor .custom |
AdaptyProfile.appliedAttributionSources | AdaptyProfile.appliedExternalAttributionProviders |
Enum AdaptySubscriptionOfferType | Struct AdaptySubscriptionOfferType; .code eliminado |
| Archivo de respaldo descargado para 4.0 | Nuevo formato de archivo de respaldo; descarga el archivo de nuevo |
| Compras in-app promocionadas no compatibles | Método delegado didReceivePromotedPurchase(_:) y AdaptyPromotedProduct |
⚠️ La atribución de Adapty está desactivada por defecto
Si actualizas al SDK 4.1 y no lo activas explícitamente, la atribución de Adapty deja de funcionar sin avisar: las instalaciones dejan de registrarse y no recibirás ninguna advertencia.
En la versión 4.0 y anteriores, el SDK registraba instalaciones para Adapty Attribution automáticamente. A partir de la versión 4.1, esta función está desactivada por defecto: el SDK no registra instalaciones, y los callbacks delegados onInstallationDetailsSuccess y onInstallationDetailsFail nunca se ejecutan. getCurrentInstallationStatus() devuelve .notAvailable.
Si usas Adapty Attribution, actívalo al inicializar el SDK:
let configurationBuilder = AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
+ .with(adaptyAttributionEnabled: true)
Si no usas Adapty Attribution, no es necesario hacer ningún cambio.
APIs de atribución externa renombradas
updateAttribution(:source:) → updateExternalAttribution(:provider:)
El método que pasa datos de atribución desde un proveedor externo (Adjust, AppsFlyer, Branch, Tenjin o uno personalizado) ha sido renombrado, y su parámetro source pasa a llamarse provider:
- try await Adapty.updateAttribution(attribution, source: .adjust)
+ try await Adapty.updateExternalAttribution(attribution, provider: .adjust)
La sobrecarga de cadena JSON ha sido eliminada
En la versión 4.0 se aceptaban datos de atribución como un diccionario [AnyHashable: Any] o como una String JSON. En la versión 4.1, solo la sobrecarga de diccionario es pública: la sobrecarga de cadena JSON está reservada para los SDKs multiplataforma de Adapty. Deserializa el JSON antes de pasarlo:
- try await Adapty.updateAttribution(attributionJson, source: .adjust)
+ guard let attribution = try JSONSerialization.jsonObject(
+ with: Data(attributionJson.utf8)
+ ) as? [AnyHashable: Any] else { return }
+ try await Adapty.updateExternalAttribution(attribution, provider: .adjust)
AdaptyAttributionSource → AdaptyExternalAttributionProvider
El tipo ha sido renombrado. Los proveedores predefinidos mantienen los mismos nombres: .appleAds, .adjust, .appsflyer, .branch, .tenjin. Sigue siendo compatible con ExpressibleByStringLiteral, por lo que los argumentos como literales de cadena siguen compilando. Si guardas el proveedor en una variable de tipo String, envuélvelo así: AdaptyExternalAttributionProvider(rawValue: yourProvider).
La versión 4.1 también añade el valor predefinido .custom para proveedores con los que Adapty no se integra directamente. En la 4.0, ese mismo valor solo estaba disponible como literal de cadena "custom".
AdaptyProfile.appliedAttributionSources → appliedExternalAttributionProviders
La propiedad del perfil que lista los proveedores de atribución aplicados al perfil ha sido renombrada. Su tipo de elemento cambia en consecuencia:
- if profile.appliedAttributionSources.contains(.appleAds) {
+ if profile.appliedExternalAttributionProviders.contains(.appleAds) {
// Apple Ads attribution has been applied
}
AdaptySubscriptionOfferType ahora es una struct
AdaptySubscriptionOfferType — el tipo de AdaptySubscriptionOffer.offerType — cambia de enum a una struct RawRepresentable, de modo que el backend puede introducir nuevos tipos de oferta sin actualizar el SDK:
- public enum AdaptySubscriptionOfferType: String, Sendable { ... }
+ public struct AdaptySubscriptionOfferType: Sendable, RawRepresentable, Equatable, Hashable { ... }
Esto afecta a tu código de tres maneras:
-
Las sentencias
switchexhaustivas ya no compilan. Un struct no tiene un conjunto fijo de casos, por lo que el compilador no puede garantizar que un switch sea exhaustivo. Añade una ramadefault:switch offer.offerType { case .introductory: // ... case .promotional: // ... case .winBack: // ... + default: // handle offer types added later } -
.codese ha eliminado. Los códigos de oferta ya no se informan a través deAdaptySubscriptionOffer.offerType. Elimina cualquier ramacase .code. Consulta Canjear códigos de oferta en iOS para gestionar los códigos de oferta. -
La conformidad con
Codablese ha eliminado. Si codificabas o decodificabasAdaptySubscriptionOfferTypedirectamente, persisteofferType.rawValue(unString) en su lugar y reconstruye el valor conAdaptySubscriptionOfferType(rawValue:).
Las comparaciones con los valores predefinidos no cambian: .introductory, .promotional y .winBack siguen funcionando en comprobaciones == y como patrones case.
Archivos de respaldo
El formato del archivo de respaldo cambió en el SDK 4.1. Descarga el archivo de nuevo desde Placements > Fallbacks e inclúyelo en tu app, aunque ya hubieras descargado uno para la versión 4.0.
Este paso no genera ningún error de compilación. Si lo omites, el SDK rechazará el archivo desactualizado y todos los placements perderán su paywall de respaldo.
Retorno de las compras in-app promocionadas en App Store
SDK 4.1 recupera el soporte para las compras in-app promocionadas en App Store, que 4.0 eliminó. Es una función nueva, no un paso de migración: no cambia ningún comportamiento de 4.0.
Si migras desde la versión 3.x y usabas shouldAddStorePayment(for:) con AdaptyDeferredProduct, adopta el nuevo método de delegado didReceivePromotedPurchase(_:) con AdaptyPromotedProduct. A diferencia de shouldAddStorePayment, el nuevo método no devuelve un valor: si no lo implementas, el SDK inicia la compra de inmediato; para diferirla, impleméntalo, guarda el producto y pásalo a makePurchase más adelante. Consulta Compras in-app desde el App Store.
El nuevo mecanismo está basado en StoreKit 2 y requiere iOS 16.4 o posterior. El método shouldAddStorePayment de la versión 3.x funcionaba en versiones anteriores de iOS. En dispositivos con versiones inferiores a iOS 16.4, didReceivePromotedPurchase no se activa nunca y las compras promocionadas no llegan a tu app.