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.

Warning

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.0v4.1
Atribución de Adapty habilitada automáticamenteAtribució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
AdaptyAttributionSourceAdaptyExternalAttributionProvider, con un nuevo valor .custom
AdaptyProfile.appliedAttributionSourcesAdaptyProfile.appliedExternalAttributionProviders
Enum AdaptySubscriptionOfferTypeStruct AdaptySubscriptionOfferType; .code eliminado
Archivo de respaldo descargado para 4.0Nuevo formato de archivo de respaldo; descarga el archivo de nuevo
Compras in-app promocionadas no compatiblesMétodo delegado didReceivePromotedPurchase(_:) y AdaptyPromotedProduct

⚠️ La atribución de Adapty está desactivada por defecto

Warning

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 switch exhaustivas 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 rama default:

    switch offer.offerType {
    case .introductory: // ...
    case .promotional: // ...
    case .winBack: // ...
    + default: // handle offer types added later
    }
  • .code se ha eliminado. Los códigos de oferta ya no se informan a través de AdaptySubscriptionOffer.offerType. Elimina cualquier rama case .code. Consulta Canjear códigos de oferta en iOS para gestionar los códigos de oferta.

  • La conformidad con Codable se ha eliminado. Si codificabas o decodificabas AdaptySubscriptionOfferType directamente, persiste offerType.rawValue (un String) en su lugar y reconstruye el valor con AdaptySubscriptionOfferType(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.

Warning

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.

Warning

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.