Руководство · Flutter
Добавьте партнёрскую или реферальную программу в приложение на Flutter.
Пакет influto определяет установки по рекомендации и принимает реферальные коды на iOS и Android. Покупки попадают в InfluTo через RevenueCat или напрямую из App Store и Google Play — с помощью парного пакета influto_iap.
Обновлено 1 ноября 2026 г.
Коротко
Выполните flutter pub add influto, один раз вызовите InfluTo.instance.initialize при запуске, затем checkAttribution и identifyUser. С RevenueCat передайте revenueCatHook, который вызывает Purchases.setAttributes: во Flutter автоматической пометки нет, и без хука атрибут никто не установит. Без RevenueCat добавьте influto_iap и включите InfluToPurchaseObserver после initialize. Он сообщает о новых покупках и догоняет прежние через плагин in_app_purchase. Нужны Flutter 3.22+ и Dart 3.4+. Закладывайте полдня, большая часть уйдёт на покупки.
Какие пакеты нужны
На pub.dev два пакета, оба под лицензией MIT, исходный код — github.com/influto/influto-flutter:
influto — всегда. Атрибуция, реферальные коды, идентификация пользователя, коды бесплатного доступа и ручная передача покупок. Зависимости — только http и shared_preferences.
influto_iap — только для прямого учёта из сторов. Добавьте, если приложение не использует RevenueCat и продаёт через плагин in_app_purchase: пакет фиксирует покупки автоматически. Приложениям на RevenueCat с purchases_flutter он не нужен.
Всё идёт через InfluTo.instance, статических вызовов нет. Установка:
flutter pub add influto
# optional: automatic store-direct purchase capture
flutter pub add influto_iapШаг 1: инициализация, которая не задерживает первый кадр
Вызовите initialize один раз при запуске и дождитесь результата, прежде чем вызывать что-то ещё: пока он не завершился успешно, checkAttribution и reportPurchase выбрасывают InfluToException. При сбое (неверный ключ, нет сети) он тоже выбрасывает исключение, поэтому перехватите ошибку, запишите её в лог и продолжайте. При следующем запуске попытка повторится.
Не блокируйте на нём первый кадр: настройте RevenueCat, вызовите runApp, затем запустите InfluTo через unawaited, как показано ниже. Передайте API-ключ (it_…, в разделе Setup & SDK) при сборке через --dart-define=INFLUTO_API_KEY=it_… и прочитайте его через String.fromEnvironment.
Затем checkAttribution сообщает, пришла ли установка по рекомендации и по какому коду. Ответ определяется один раз для установки и сохраняется на устройстве, а при ошибке сети возвращается attributed: false, и ничего не сохраняется. Типичный main.dart:
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);
}Шаг 2: дайте пользователям ввести код
applyCode(code) проверяет код и применяет его, если он действителен; result.applied показывает, был ли он применён. Пробелы по краям обрезаются, регистр приводится к верхнему, а неверный код возвращает valid: false и errorCode, например CODE_NOT_FOUND или CODE_EXPIRED.
Готовое решение — виджет ReferralCodeInput (Material). Он проверяет код по мере ввода, применяет его по нажатию, подставляет код из установки, привязанной по ссылке, и принимает ваши переведённые тексты. Имя автора он показывает, только если задать showReferrerName.
Шаг 3: подключите покупки
InfluTo платит комиссию только за покупки, проверенные в сторе. Для каждой платформы выберите ровно один путь:
RevenueCat (purchases_flutter): передайте revenueCatHook в InfluToConfig, вызывающий Purchases.setAttributes, как в main.dart выше. SDK вызывает его один раз — когда найдена рекомендация или применён код — с influto_code и influto_referral. Затем подключите вебхук RevenueCat в Setup & SDK.
Напрямую из сторов (in_app_purchase): добавьте influto_iap, создайте один InfluToPurchaseObserver и включите его после завершения initialize. Он работает, только если приложение переключено на прямой учёт из сторов в Settings → Validation, поэтому одну и ту же сборку безопасно использовать и в приложении с RevenueCat.
Без хука во Flutter ничто не задаёт атрибут RevenueCat: в отличие от React Native, автоматической разметки нет. Настройте RevenueCat до checkAttribution и вызовите identifyUser с app user ID из RevenueCat. InfluTo использует его как запасной вариант, когда событие приходит без атрибута.
Что observer делает внутри вашего приложения: завершает отложенные покупки (completePurchase), чтобы магазин не доставлял их повторно и не возвращал деньги; его дозаполнение вызывает restorePurchases(), поэтому ваш собственный слушатель тоже видит восстановленные покупки при запуске (enable(backSync: false) это отключает); а на iOS переключает in_app_purchase на StoreKit 2, который нужен для store-direct.
Разовые продукты Android указываются в oneTimeProductIds у observer, а не в InfluToConfig. Если хотите передавать покупки сами, задайте autoCapture: false, не подключайте observer и вызывайте reportPurchase с подписанной транзакцией StoreKit 2 или purchaseToken из Play. Настройка 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Шаг 4: проверьте всё от начала до конца
Покупки в песочнице не двигают деньги и не меняют вашу статистику:
- 1
Откройте Setup & SDK. После первого успешного initialize там появится «SDK connected» с платформой и версией SDK. С debug: true каждый шаг выводится через debugPrint.
- 2
Имитируйте покупку. Simulate a purchase на Setup & SDK отправляет тестовую покупку через настоящий конвейер InfluTo. Введите один из своих кодов, чтобы увидеть, как он распознаётся.
- 3
Установите приложение по реферальной ссылке. Присоединитесь к своей кампании со второго аккаунта автора, откройте его ссылку на тестовом устройстве, установите и запустите приложение. Надёжнее всего проверять ввод кода вручную.
- 4
Купите в песочнице. Используйте тестировщика TestFlight или песочницы (в store-direct на iOS сначала переключите окружение Apple на Sandbox) либо license tester в Google Play. В Integration log, переключённом на Sandbox, вы увидите покупку с атрибуцией. Для отладки enable() возвращает количество fetched, sent и failed.
clearAttribution() сбрасывает устройство для нового прогона.
Особенности Flutter
Три вещи, на которых чаще всего спотыкаются при интеграции во Flutter:
Важен порядок. Сначала настройте RevenueCat, затем вызовите initialize, затем checkAttribution. Включайте observer influto_iap только после завершения initialize, иначе он останется выключенным.
const-конфиги. У InfluToConfig есть const-конструктор, но замыкание не является константой. Когда передаёте revenueCatHook, уберите const.
Идентифицируйте один раз. Вызывайте identifyUser один раз при входе, лучше в первой сессии пользователя, а не из build.
Или поручите это ИИ-агенту
Подключите MCP-сервер InfluTo к Claude Code, Codex или Cursor и попросите выполнить интеграцию. Агент сопоставит Dart-проект с этим SDK, напишет код для выбранного вами способа проверки и будет смотреть influto_integration_status, пока не придёт тестовая покупка с атрибуцией.
Партнёрский SDK для Flutter: ответы.
Есть ли партнёрский SDK для Flutter?
Да. Пакет influto на pub.dev (MIT, исходники на github.com/influto/influto-flutter) добавляет во Flutter-приложения на iOS и Android определение установок по приглашению, реферальные коды и атрибуцию покупок. Нужны Flutter 3.22+ и Dart 3.4+.
Какие реферальные инструменты поддерживают Flutter?
Пакеты для Flutter выпускают несколько партнёрских платформ. Пакет InfluTo охватывает атрибуцию, ручной ввод кодов с готовым виджетом ReferralCodeInput, разметку RevenueCat через хук и автоматический захват покупок store-direct через influto_iap. У него тот же wire-контракт, что и у SDK InfluTo для iOS, Android, React Native и веба.
Работает ли он с purchases_flutter (RevenueCat)?
Да. Передайте revenueCatHook, который вызывает Purchases.setAttributes, сначала настройте RevenueCat и подключите вебхук RevenueCat. Приложению на RevenueCat influto_iap не нужен.
Будет ли influto_iap мешать моему слушателю покупок?
Он завершает отложенные покупки и при запуске выполняет restore для дозаполнения, поэтому ваш слушатель тоже видит восстановленные покупки. Если это не нужно, вызовите enable(backSync: false). Контент по-прежнему выдаёте вы, из своего слушателя purchaseStream.
Сколько это стоит?
0 $ в месяц. За каждую подтверждённую покупку вы платите установленную вами комиссию плюс 10% от той же выручки (7%, 5% или 3% при больших объёмах). Предоплаченный кошелёк начинается с 50 $ и возвращается. InfluTo выплачивает авторам раз в месяц через Stripe Connect в 33 странах, как только они заработают 20 $.
Добавьте реферальные коды в следующую сборку на Flutter.
Один пакет, один способ проверки, возвращаемый депозит. 0 $ в месяц; 10% только с выручки, которую приносят авторы.
Начать бесплатно