Guide · Flutter
Ajoutez un programme d’affiliation ou de parrainage à votre app Flutter.
Le package influto détecte les installations parrainées et accepte les codes de parrainage saisis, sur iOS et Android. Les achats arrivent chez InfluTo via RevenueCat, ou directement depuis l’App Store et Google Play avec le package complémentaire influto_iap.
Mis à jour le 1 novembre 2026
En bref
Lancez flutter pub add influto, appelez InfluTo.instance.initialize une seule fois au démarrage, puis checkAttribution et identifyUser. Avec RevenueCat, passez un revenueCatHook qui appelle Purchases.setAttributes : Flutter n’a pas de marquage automatique, donc sans ce hook, rien ne définit l’attribut. Sans RevenueCat, ajoutez influto_iap et activez un InfluToPurchaseObserver après initialize ; il signale les nouveaux achats et rattrape les précédents via le plugin in_app_purchase. Nécessite Flutter 3.22+ et Dart 3.4+. Prévoyez un après-midi, surtout pour la partie achats.
Les packages dont vous avez besoin
Il y a deux packages sur pub.dev, tous deux sous licence MIT, avec le code source sur github.com/influto/influto-flutter :
influto, toujours. Attribution, codes de parrainage, identification des utilisateurs, codes d’accès gratuit et signalement manuel des achats. Ses seules dépendances sont http et shared_preferences.
influto_iap, uniquement pour la capture directe des stores. Ajoutez-le si votre app n’utilise pas RevenueCat et vend via le plugin in_app_purchase ; il capture les achats automatiquement. Les apps RevenueCat sur purchases_flutter n’en ont pas besoin.
Tout passe par InfluTo.instance ; il n’y a aucun appel statique. L’installation :
flutter pub add influto
# optional: automatic store-direct purchase capture
flutter pub add influto_iapÉtape 1 : initialiser sans retarder la première frame
Appelez initialize une seule fois au démarrage et attendez son résultat avant tout autre appel ; tant qu’il n’a pas réussi, checkAttribution et reportPurchase lèvent une InfluToException. Il lève une exception en cas d’échec (mauvaise clé, pas de réseau) : interceptez l’erreur, journalisez-la et continuez. Le lancement suivant réessaie.
Ne bloquez pas votre première frame dessus : configurez RevenueCat, appelez runApp, puis démarrez InfluTo avec unawaited, comme ci-dessous. Passez la clé API (it_…, dans Setup & SDK) à la compilation avec --dart-define=INFLUTO_API_KEY=it_… et lisez-la avec String.fromEnvironment.
checkAttribution vous indique ensuite si l’installation a été parrainée, et par quel code. La réponse est décidée une fois par installation et stockée sur l’appareil ; en cas d’erreur réseau, il renvoie attributed: false sans rien stocker. Un main.dart type :
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:influto/influto.dart';
import 'package:purchases_flutter/purchases_flutter.dart'; // only if you use RevenueCat
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Purchases.configure(PurchasesConfiguration('appl_…')); // RevenueCat apps: configure it first
runApp(const MyApp());
unawaited(startInfluTo());
}
Future<void> startInfluTo() async {
try {
await InfluTo.instance.initialize(InfluToConfig(
apiKey: const String.fromEnvironment('INFLUTO_API_KEY'),
appVersion: '1.4.0',
revenueCatHook: (attrs) => Purchases.setAttributes(attrs),
));
} catch (e) {
debugPrint('InfluTo initialize failed: $e'); // retried on the next launch
return;
}
final attribution = await InfluTo.instance.checkAttribution();
await InfluTo.instance.identifyUser(await Purchases.appUserID);
}Étape 2 : laisser les utilisateurs saisir un code
applyCode(code) valide un code et l’applique s’il est valide ; result.applied vous dit si c’est le cas. Les espaces sont retirés et le code est mis en majuscules. Un code invalide renvoie valid: false avec un errorCode comme CODE_NOT_FOUND ou CODE_EXPIRED.
L’option toute prête est le widget ReferralCodeInput (Material). Il valide pendant la saisie, applique le code au toucher, le préremplit pour une installation attribuée via un lien, et accepte vos textes traduits. Il n’affiche le nom d’un créateur que si vous définissez showReferrerName.
Étape 3 : connecter les achats
InfluTo ne verse de commission que sur les achats vérifiés auprès du store. Choisissez un seul chemin par plateforme :
RevenueCat (purchases_flutter) : passez un revenueCatHook dans InfluToConfig qui appelle Purchases.setAttributes, comme dans le main.dart ci-dessus. Le SDK l’appelle une seule fois, quand un parrainage est trouvé ou qu’un code est appliqué, avec influto_code et influto_referral. Connectez ensuite le webhook RevenueCat dans Setup & SDK.
Directement auprès des stores (in_app_purchase) : ajoutez influto_iap, créez un InfluToPurchaseObserver et activez-le une fois initialize terminé. Il ne s’exécute que si l’app est réglée sur la capture directe dans Settings → Validation : le même build ne pose donc aucun problème sur une app RevenueCat.
Sans le hook, rien ne définit l’attribut RevenueCat dans Flutter ; contrairement à React Native, il n’y a pas de marquage automatique. Configurez RevenueCat avant checkAttribution, puis appelez identifyUser avec l’ID utilisateur d’app RevenueCat. InfluTo s’en sert en solution de repli quand un événement arrive sans l’attribut.
Ce que l’observer fait dans votre app : il finalise les achats en attente (completePurchase) pour que le store ne les renvoie pas et ne les rembourse pas ; son rattrapage appelle restorePurchases(), donc votre propre listener voit aussi les achats restaurés au démarrage (enable(backSync: false) l’évite) ; et sur iOS, il bascule in_app_purchase sur StoreKit 2, dont store-direct a besoin.
Les produits Android à achat unique vont dans oneTimeProductIds de l’observer, pas dans InfluToConfig. Pour déclarer les achats vous-même, définissez autoCapture: false, n’utilisez pas l’observer et appelez reportPurchase avec la transaction signée StoreKit 2 ou le purchaseToken Play. Configuration de l’observer :
import 'package:influto_iap/influto_iap.dart';
final observer = InfluToPurchaseObserver(
oneTimeProductIds: {'coins_100', 'remove_ads'}, // Android one-time products; omit if you only sell subscriptions
);
final sync = await observer.enable(); // listens for new purchases + back-fills existing onesÉtape 4 : testez de bout en bout
Les achats en sandbox ne déplacent jamais d’argent et ne modifient pas vos statistiques :
- 1
Consultez Setup & SDK. Après le premier initialize réussi, la page affiche « SDK connected » avec la plateforme et la version du SDK ; avec debug: true, chaque étape s’affiche via debugPrint.
- 2
Simulez un achat. Simulate a purchase, dans Setup & SDK, envoie un achat de test sandbox dans le vrai pipeline d’InfluTo. Saisissez l’un de vos codes pour voir sa résolution.
- 3
Installez via un lien de parrainage. Rejoignez votre campagne avec un second compte créateur, ouvrez son lien sur un appareil de test, installez puis lancez l’app. Saisir le code est le test le plus fiable.
- 4
Achetez en sandbox. Utilisez un testeur TestFlight ou sandbox (sur iOS store-direct, réglez d’abord l’environnement Apple sur Sandbox) ou un testeur de licence Google Play. Le journal d’intégration, passé en Sandbox, affiche l’achat attribué. enable() renvoie les nombres fetched, sent et failed pour le débogage.
clearAttribution() réinitialise l’appareil pour un nouvel essai.
Remarques sur Flutter
Trois pièges fréquents dans les intégrations Flutter :
L’ordre compte. Configurez RevenueCat, puis appelez initialize, puis checkAttribution. N’activez l’observer influto_iap qu’une fois initialize terminé, sinon il reste désactivé.
Configs const. InfluToConfig a un constructeur const, mais une closure n’est pas une constante : retirez const quand vous passez un revenueCatHook.
Identifiez une seule fois. Appelez identifyUser une fois par connexion, idéalement dans la première session de l’utilisateur, et pas depuis build.
Ou laissez votre agent de code s’en charger
Connectez le serveur MCP d’InfluTo à Claude Code, Codex ou Cursor et demandez l’intégration : l’agent associe un projet Dart à ce SDK, écrit le code pour le mode de validation que vous choisissez et surveille influto_integration_status jusqu’à l’arrivée d’un achat sandbox attribué.
SDK d’affiliation Flutter : vos questions, nos réponses.
Existe-t-il un SDK d’affiliation pour Flutter ?
Oui. influto sur pub.dev (MIT, code source sur github.com/influto/influto-flutter) ajoute à vos apps Flutter sur iOS et Android la détection des installations parrainées, les codes de parrainage et l’attribution des achats. Il requiert Flutter 3.22+ et Dart 3.4+.
Quels outils de parrainage prennent en charge Flutter ?
Plusieurs plateformes d’affiliation publient des packages Flutter. Celui d’InfluTo couvre l’attribution, les codes typés avec un widget ReferralCodeInput prêt à l’emploi, le marquage RevenueCat via un hook et la capture store-direct automatique avec influto_iap. Il partage un même contrat d’échange avec les SDK iOS, Android, React Native et web d’InfluTo.
Fonctionne-t-il avec purchases_flutter (RevenueCat) ?
Oui. Passez un revenueCatHook qui appelle Purchases.setAttributes, configurez d’abord RevenueCat et connectez le webhook RevenueCat. Une app RevenueCat n’a pas besoin d’influto_iap.
influto_iap va-t-il interférer avec mon propre listener d’achats ?
Il finalise les achats en attente et lance une restauration au démarrage pour le rattrapage : votre listener voit donc aussi les achats restaurés. Appelez enable(backSync: false) si vous ne le souhaitez pas. Vous livrez toujours le contenu depuis votre propre listener purchaseStream.
Combien ça coûte ?
0 $ par mois. Pour chaque achat vérifié, vous payez la commission que vous fixez, plus 10 % du même revenu (7 %, 5 % ou 3 % selon le volume). Le portefeuille prépayé démarre à 50 $ et reste remboursable ; InfluTo verse les créateurs chaque mois via Stripe Connect dans 33 pays, dès qu’ils ont gagné 20 $.
Pour aller plus loin
Intégrez les codes de parrainage dans votre prochain build Flutter.
Un package, un mode de validation, un dépôt remboursable. 0 $ par mois ; 10 % uniquement sur les revenus apportés par les créateurs.
Commencer gratuitement