Contrôler les messages App Store dans le SDK iOS
L’App Store doit parfois afficher un message à vos utilisateurs concernant leur abonnement : leur demander de consentir à une hausse de prix, les informer d’un problème de facturation, ou leur présenter une offre de reconquête. Par défaut, StoreKit affiche ces messages tout seul lorsque votre application est ouverte — même par-dessus un paywall, un onboarding ou un écran de paiement.
Pour choisir vous-même le bon moment, passez le SDK Adapty en gestion manuelle des messages. Le SDK ajoute alors chaque message à une liste en attente, et votre application affiche cette liste lorsqu’elle appelle showStoreMessages.
En mode manuel, StoreKit n’affiche pas les messages automatiquement. Si votre application n’appelle jamais showStoreMessages, les utilisateurs ne verront jamais de demande de consentement à une augmentation de prix ni d’avis de problème de facturation.
Avant de commencer
Vous avez besoin de :
- Adapty iOS SDK 4.2 ou version ultérieure : les versions antérieures ne disposent pas de l’API de messages du store.
- iOS 16 ou Mac Catalyst 16 ou version ultérieure : StoreKit ne délivre pas de messages aux applications sur les versions antérieures, c’est pourquoi l’API de messages du store est marquée comme disponible à partir d’iOS 16. L’API n’est pas disponible sur macOS.
Le SDK Adapty prend en charge iOS 15. Si votre application prend également en charge iOS 15, encadrez chaque appel de messages du store dans if #available(iOS 16.0, *), ou marquez le type qui effectue l’appel avec @available(iOS 16.0, *). Sans l’une de ces vérifications, l’application ne compilera pas. Les exemples de cet article incluent ces vérifications. Si votre cible de déploiement est iOS 16 ou une version ultérieure, vous pouvez les omettre.
Activer la gestion manuelle
Pour capturer les messages de l’App Store, définissez storeMessagesHandling sur .manual lors de l’activation du SDK :
let configurationBuilder = AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(storeMessagesHandling: .manual) // .auto is the default
Le SDK commence à capturer les messages dès son activation et les conserve en mémoire pour la session d’application en cours. Avec la valeur par défaut .auto, le SDK ne capture rien, et getPendingStoreMessageTypes ainsi que showStoreMessages ne font rien.
Obtenir les types de messages en attente
Pour savoir si des messages sont en attente, appelez getPendingStoreMessageTypes. Cette méthode renvoie les types des messages en attente sans les afficher ni les supprimer :
if #available(iOS 16.0, *) {
let pendingTypes = await Adapty.getPendingStoreMessageTypes()
if pendingTypes.contains(.billingIssue) {
// For example, skip the upsell and show the billing message first
}
}
Chaque message possède l’un des types suivants :
| Type | Message |
|---|---|
.generic | Un message App Store générique. |
.priceIncreaseConsent | Une demande de consentement à une augmentation de prix d’abonnement. |
.billingIssue | Un avis concernant un problème de facturation d’abonnement. Disponible sur iOS 16.4 et ultérieur. |
.winBackOffer | Une offre de reconquête éligible. Disponible sur iOS 18 et ultérieur. |
Un type de message non reconnu par le SDK a la valeur brute storekit_<number>.
Afficher les messages en attente
Lorsque votre application atteint un point où une fenêtre système n’interrompra pas l’utilisateur — par exemple, après que l’utilisateur a fermé un flow ou terminé un onboarding — appelez showStoreMessages :
Le SDK affiche les messages les uns après les autres. Après que StoreKit a affiché un message, le SDK le retire de la liste en attente. Si StoreKit échoue à afficher un message, le SDK enregistre l’erreur dans le journal Adapty, conserve le message pour le prochain appel et continue avec les autres messages.
Afficher uniquement certains types de messages
Pour n’afficher que certains messages en attente, passez les types dans for. Les autres messages restent en attente :
try await Adapty.showStoreMessages(
for: [.billingIssue, .priceIncreaseConsent],
using: displayStoreKitMessage
)
Sans for, le SDK affiche tous les messages en attente, y compris les types qu’il ne reconnaît pas.
Erreurs
showStoreMessages lève une AdaptyError avec l’un de ces codes :
| Code | Nom | Cause |
|---|---|---|
| 3201 | operationInProgress | Un autre appel showStoreMessages affiche encore des messages. Attendez qu’il se termine, puis réessayez. |
| 3202 | resolverFailure | UIKit uniquement : vous n’avez pas passé de scène, et le SDK n’a trouvé aucune scène active au premier plan. Appelez la méthode à nouveau lorsque votre application est au premier plan, ou passez la scène explicitement. |
| 9000 | operationInterrupted | La tâche qui a appelé la méthode a été annulée. |