Contrôler les messages du store dans le SDK React Native
L’App Store et le Google Play doivent parfois afficher un message à vos utilisateurs concernant leur abonnement :
- App Store : une demande de consentement à une augmentation de prix, une notification de problème de facturation, ou une offre de reconquête. Par défaut, StoreKit affiche ces messages automatiquement lorsque votre application est ouverte.
- Google Play : une notification indiquant qu’un paiement d’abonnement a été refusé et que le moyen de paiement doit être mis à jour. Par défaut, le SDK Adapty demande ces messages à chaque démarrage d’une
Activityde votre application.
Quoi qu’il en soit, un message peut apparaître par-dessus un flow, un onboarding ou un checkout. Pour choisir vous-même le moment, passez le SDK en mode de gestion manuelle des messages, et appelez showStoreMessages lorsqu’un message n’interrompra pas l’utilisateur.
En mode manuel, les stores n’affichent pas les messages d’eux-mêmes. Si votre application n’appelle jamais showStoreMessages, les utilisateurs ne verront jamais de demande de consentement à une hausse de prix, de notification de problème de facturation, ni d’avis de paiement refusé.
Avant de commencer
Vous avez besoin de :
- Adapty React Native SDK 4.3.0 ou ultérieur : les versions antérieures ne disposent pas de l’API des messages du store.
- iOS 16 ou ultérieur pour les messages App Store : StoreKit ne transmet pas les messages aux applications sur les versions antérieures. Sur iOS 15,
getPendingStoreMessageTypesetshowStoreMessagesgénèrent une erreur ; si votre application prend en charge iOS 15, appelez-les uniquement sur iOS 16 et ultérieur.
Activer la gestion manuelle
Pour afficher les messages du store uniquement lorsque votre application appelle showStoreMessages, définissez storeMessagesHandling sur 'manual' lors de l’activation du SDK :
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
storeMessagesHandling: 'manual', // 'auto' is the default
});
Sur iOS, le SDK ajoute ensuite chaque message App Store à une liste en attente pour la session d’application en cours. Sur Android, le SDK cesse de lui-même de demander des messages Google Play. Avec la valeur par défaut 'auto', le SDK ne capture pas les messages App Store ; ainsi, sur iOS, getPendingStoreMessageTypes et showStoreMessages n’ont rien à retourner ni à afficher.
Obtenir les types de messages en attente
Sur iOS, pour savoir si des messages App Store sont en attente, appelez getPendingStoreMessageTypes. Cette méthode retourne les types des messages en attente sans les afficher ni les supprimer :
const pendingTypes = await adapty.getPendingStoreMessageTypes();
if (pendingTypes === null) {
// Android: Google Play decides whether a message applies when you show it
} else if (pendingTypes.includes('billing_issue')) {
// For example, skip the upsell and show the billing message first
}
Sur Android, la méthode retourne null : Google Play ne signale pas les messages en attente et décide si un message s’applique uniquement lorsque votre application le demande. Un tableau vide signifie qu’il n’y a aucun message en attente sur iOS.
Chaque message App Store est de l’un de ces types :
| Type | Message |
|---|---|
generic | Un message général de l’App Store. |
price_increase_consent | Une demande de consentement à une augmentation de prix d’abonnement. |
billing_issue | Un avis concernant un problème de facturation d’abonnement. Disponible sur iOS 16.4 et ultérieur. |
win_back_offer | 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 storekit_<number>.
Afficher les messages
Lorsque votre application atteint un point où un message du store n’interrompra pas l’utilisateur — par exemple, après que l’utilisateur ferme un flow ou termine un onboarding — appelez showStoreMessages :
try {
await adapty.showStoreMessages();
} catch (error) {
// handle the error
}
- iOS : le SDK affiche les messages en attente les uns après les autres. Après que StoreKit a affiché un message, le SDK le supprime de la liste en attente. Si StoreKit n’arrive pas à afficher un message, le SDK consigne l’erreur dans le journal Adapty, conserve le message pour le prochain appel et passe aux messages suivants.
- Android : le SDK demande à Google Play les messages pour l’
Activityen cours. Google Play décide si un message s’applique à l’utilisateur, donc une requête n’affiche pas toujours un message. Si l’utilisateur corrige son moyen de paiement depuis le message, le SDK synchronise ses achats avec Adapty et votre écouteur de profil reçoit le niveau d’accès mis à jour.
En mode 'auto' par défaut, vous pouvez également appeler showStoreMessages sur Android — par exemple, pour redemander un message sur une Activity déjà en cours d’exécution.
Afficher uniquement certains types de messages
Pour n’afficher que certains messages App Store en attente, passez les types dans ios.filter. Les autres messages restent en attente :
await adapty.showStoreMessages({
ios: { filter: ['billing_issue', 'price_increase_consent'] },
});
Sans filter, le SDK affiche tous les messages en attente, y compris les types qu’il ne reconnaît pas. Android ignore filter et récupère tous les messages Google Play.
Erreurs
showStoreMessages lève une AdaptyError avec l’un de ces codes :
| Code | Nom | Cause |
|---|---|---|
| 3201 | operationInProgress | Un autre appel à showStoreMessages affiche déjà des messages. Attendez qu’il se termine, puis réessayez. |
| 3202 | resolverFailure | iOS uniquement : le SDK n’a trouvé aucune scène de fenêtre active au premier plan pour afficher les messages. Appelez la méthode à nouveau lorsque votre application est au premier plan. |