Migrer le SDK iOS Adapty vers v4.1
Le SDK iOS Adapty 4.1 change la façon dont Adapty Attribution est activé, renomme les API d’attribution externe et modifie le format du fichier de secours. Il rétablit également la prise en charge des achats intégrés promus sur l’App Store, qui avaient été supprimés dans la version 4.0.
Les API renommées constituent une rupture nette. Les anciens noms sont supprimés sans autre forme de procès — ils ne sont pas dépréciés, et il n’existe aucun typealias ni annotation @available(renamed:) pour assurer la transition. Tout code qui compilait avec 4.0.x ne compilera plus avec 4.1 tant que vous n’aurez pas renommé chaque point d’appel listé ci-dessous.
Référence rapide
| v4.0 | v4.1 |
|---|---|
| Adapty Attribution activée automatiquement | Adapty Attribution désactivée par défaut ; activez-la avec .with(adaptyAttributionEnabled: true) |
Adapty.updateAttribution(_:source:) | Adapty.updateExternalAttribution(_:provider:) |
Adapty.updateAttribution(_ attributionJson: String, source:) | Supprimée de l’API publique ; passez un dictionnaire à la place |
AdaptyAttributionSource | AdaptyExternalAttributionProvider, avec une nouvelle valeur .custom |
AdaptyProfile.appliedAttributionSources | AdaptyProfile.appliedExternalAttributionProviders |
AdaptySubscriptionOfferType enum | AdaptySubscriptionOfferType struct ; .code supprimé |
| Fichier de secours téléchargé pour la v4.0 | Nouveau format de fichier de secours ; téléchargez à nouveau le fichier |
| Achats intégrés promus non pris en charge | Méthode de délégation didReceivePromotedPurchase(_:) et AdaptyPromotedProduct |
⚠️ L’attribution Adapty est désactivée par défaut
Si vous mettez à jour vers le SDK 4.1 sans activer l’option, l’attribution Adapty cesse de fonctionner en silence — les installations ne sont plus enregistrées, et aucun avertissement ne s’affiche.
Dans les versions 4.0 et antérieures, le SDK enregistrait automatiquement les installations pour Adapty Attribution. À partir de la version 4.1, cette fonctionnalité est désactivée par défaut : le SDK n’enregistre plus les installations, et les callbacks onInstallationDetailsSuccess et onInstallationDetailsFail ne se déclenchent jamais. getCurrentInstallationStatus() retourne .notAvailable.
Si vous utilisez Adapty Attribution, activez-la lors de l’initialisation du SDK :
let configurationBuilder = AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
+ .with(adaptyAttributionEnabled: true)
Si vous n’utilisez pas Adapty Attribution, aucune modification n’est nécessaire.
Renommage des API d’attribution externe
updateAttribution(:source:) → updateExternalAttribution(:provider:)
La méthode qui transmet les données d’attribution d’un fournisseur externe (Adjust, AppsFlyer, Branch, Tenjin, ou un fournisseur personnalisé) est renommée, et son paramètre source est renommé en provider :
- try await Adapty.updateAttribution(attribution, source: .adjust)
+ try await Adapty.updateExternalAttribution(attribution, provider: .adjust)
La surcharge avec chaîne JSON est supprimée
Dans la version 4.0, les données d’attribution pouvaient être transmises soit sous forme de dictionnaire [AnyHashable: Any], soit sous forme de chaîne JSON String. En 4.1, seule la surcharge avec dictionnaire est publique — la surcharge avec chaîne JSON est réservée aux SDK cross-platform d’Adapty. Désérialisez le JSON avant de le transmettre :
- 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
Le type est renommé. Les fournisseurs prédéfinis conservent les mêmes noms : .appleAds, .adjust, .appsflyer, .branch, .tenjin. Il est toujours conforme à ExpressibleByStringLiteral, donc les arguments sous forme de littéraux de chaîne continuent de compiler. Si vous stockez le fournisseur dans une variable String, encapsulez-le : AdaptyExternalAttributionProvider(rawValue: yourProvider).
La version 4.1 ajoute également une valeur prédéfinie .custom pour les fournisseurs qu’Adapty n’intègre pas directement. Dans la version 4.0, cette valeur n’était disponible qu’en tant que littéral de chaîne "custom".
AdaptyProfile.appliedAttributionSources → appliedExternalAttributionProviders
La propriété du profil qui liste les fournisseurs d’attribution appliqués au profil est renommée. Le type de ses éléments change en conséquence :
- if profile.appliedAttributionSources.contains(.appleAds) {
+ if profile.appliedExternalAttributionProviders.contains(.appleAds) {
// Apple Ads attribution has been applied
}
AdaptySubscriptionOfferType est désormais une struct
AdaptySubscriptionOfferType — le type de AdaptySubscriptionOffer.offerType — passe d’une enum à une struct RawRepresentable, afin que le backend puisse introduire de nouveaux types d’offres sans mise à jour du SDK :
- public enum AdaptySubscriptionOfferType: String, Sendable { ... }
+ public struct AdaptySubscriptionOfferType: Sendable, RawRepresentable, Equatable, Hashable { ... }
Ce changement affecte votre code de trois manières :
-
Les instructions
switchexhaustives ne compilent plus. Un struct n’ayant pas d’ensemble fixe de cas, le compilateur ne peut pas prouver qu’un switch est exhaustif. Ajoutez une branchedefault:switch offer.offerType { case .introductory: // ... case .promotional: // ... case .winBack: // ... + default: // handle offer types added later } -
.codeest supprimé. Les codes d’offre ne sont plus signalés viaAdaptySubscriptionOffer.offerType. Supprimez toutcase .code. Voir Utiliser les codes d’offre sur iOS pour la gestion des codes d’offre. -
La conformité
Codableest supprimée. Si vous encodiez ou décodiezAdaptySubscriptionOfferTypedirectement, persistezofferType.rawValue(unString) à la place et reconstruisez la valeur avecAdaptySubscriptionOfferType(rawValue:).
Les comparaisons avec les valeurs prédéfinies restent inchangées : .introductory, .promotional et .winBack fonctionnent toujours dans les vérifications == et comme patterns case.
Fichiers de secours
Le format du fichier de secours a changé dans le SDK 4.1. Téléchargez à nouveau le fichier depuis Placements > Fallbacks et intégrez-le à votre application, même si vous en aviez déjà téléchargé un pour la version 4.0.
Cette étape ne génère aucune erreur de compilation. Si vous la sautez, le SDK rejette le fichier obsolète et chaque placement perd son paywall de secours.
Retour des achats intégrés promus sur l’App Store
SDK 4.1 rétablit la prise en charge des achats intégrés promus sur l’App Store, que 4.0 avait supprimée. Il s’agit d’une nouvelle fonctionnalité, pas d’une étape de migration : elle ne modifie aucun comportement de la version 4.0.
Si vous migrez depuis la version 3.x et utilisiez shouldAddStorePayment(for:) avec AdaptyDeferredProduct, adoptez la nouvelle méthode de délégué didReceivePromotedPurchase(_:) avec AdaptyPromotedProduct à la place. Contrairement à shouldAddStorePayment, la nouvelle méthode ne retourne pas de valeur : si vous ne l’implémentez pas, le SDK démarre l’achat immédiatement ; pour différer l’achat, implémentez-la, stockez le produit et passez-le à makePurchase ultérieurement. Consultez Achats intégrés depuis l’App Store.
Le nouveau mécanisme repose sur StoreKit 2 et nécessite iOS 16.4 ou version ultérieure. La méthode shouldAddStorePayment de la version 3.x fonctionnait sur des versions iOS antérieures. Sur les appareils en dessous d’iOS 16.4, didReceivePromotedPurchase ne se déclenche jamais et les achats promus n’atteignent pas votre application.