Руководство · iOS (Swift)
Добавьте партнёрскую или реферальную программу в своё iOS-приложение.
Swift-пакет InfluTo работает в приложениях на SwiftUI и UIKit. Он показывает, какой автор привёл установку, принимает реферальные коды, которые вводят вручную, и проверяет каждую покупку — через RevenueCat или напрямую из StoreKit 2 и App Store Server API.
Обновлено 1 ноября 2026 г.
Коротко
Добавьте Swift-пакет github.com/influto/influto-ios в таргет приложения, один раз при запуске вызовите InfluTo.initialize из Task, затем checkAttribution и identifyUser. Без RevenueCat захват StoreKit 2 встроен: SDK следит за Transaction.updates и подтягивает текущие entitlements, а вы дополнительно вызываете reportPurchase(verification:) сразу после успешного product.purchase(). С RevenueCat передайте revenueCatAttributeSetter, чтобы SDK мог пометить подписчика. iOS 16+, без сторонних зависимостей, без IDFA и без запроса ATT. Закладывайте на это полдня.
Что вы получаете
Пакет зависит только от Foundation, StoreKit 2 и CryptoKit, распространяется через Swift Package Manager (пода для CocoaPods нет) и лицензирован по MIT. Нужны iOS 16 и Swift 5.9 (Xcode 15) или новее; пакет также собирается для macOS 13, tvOS 16 и watchOS 9.
Атрибуция без трекинга. Введённый код совпадает точно. Иначе сопоставление по клику связывает установку с недавним переходом по ссылке автора в пределах 72 часов. Без рекламного идентификатора и без характеристик устройства, поэтому запрос App Tracking Transparency не нужен.
Поле для кода на SwiftUI. InfluToReferralCodeInput проверяет код по мере ввода и применяет его по нажатию. В UIKit разместите его в UIHostingController.
Захват StoreKit 2 встроен. В приложениях со store-direct SDK сам сообщает о покупках, а InfluTo проверяет каждую подписанную транзакцию у Apple.
Шаг 1: добавьте Swift-пакет
В Xcode выберите File → Add Package Dependencies, вставьте URL репозитория и добавьте библиотеку InfluTo в таргет приложения. Или объявите её в Package.swift:
// Xcode → File → Add Package Dependencies →
// https://github.com/influto/influto-ios (from 1.1.1)
// Or in Package.swift:
.package(url: "https://github.com/influto/influto-ios.git", from: "1.1.1")Шаг 2: инициализация при запуске
Все методы SDK асинхронные. Вызовите initialize один раз при запуске из Task и дождитесь результата. При сбое (неверный ключ, нет сети) метод выбрасывает ошибку: перехватите её, запишите в лог и продолжайте работу. При следующем запуске попытка повторится. В UIKit запускайте Task из application(_:didFinishLaunchingWithOptions:).
checkAttribution никогда не выбрасывает ошибку. При ошибке или если initialize не завершился успешно, он возвращает attributed == false и ничего не сохраняет. Положительный ответ сохраняется на устройстве, поэтому следующие вызовы возвращают его без запроса.
API-ключ (it_…, в разделе Setup & SDK) подходит и для разработки, и для продакшена. Не храните его в коммитимом коде: например, вынесите в .xcconfig, который не попадает в репозиторий, и читайте через Info.plist. Типичный запуск SwiftUI-приложения с RevenueCat:
import SwiftUI
import InfluTo
import RevenueCat // only if you use RevenueCat
@main
struct MyApp: App {
init() {
Purchases.configure(withAPIKey: "appl_…") // RevenueCat apps: configure it first
Task { await startInfluTo() }
}
var body: some Scene { WindowGroup { ContentView() } }
}
func startInfluTo() async {
var config = InfluToConfig(
apiKey: Bundle.main.object(forInfoDictionaryKey: "INFLUTO_API_KEY") as? String ?? "",
appVersion: Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String
)
config.revenueCatAttributeSetter = { attrs in
Purchases.shared.attribution.setAttributes(attrs)
}
do {
try await InfluTo.initialize(config)
} catch {
print("InfluTo initialize failed: \(error)") // retried on the next launch
return
}
let attribution = await InfluTo.checkAttribution()
await InfluTo.identifyUser(Purchases.shared.appUserID)
}Шаг 3: подключите покупки
InfluTo платит комиссию только за покупки, подтверждённые магазином. Для iOS выберите один из путей:
RevenueCat: передайте revenueCatAttributeSetter, как в MyApp.swift выше; без него на iOS атрибут никто не установит. SDK вызывает его один раз, когда находит реферал, поэтому настройте RevenueCat до checkAttribution. Затем подключите вебхук в разделе Setup & SDK.
Store-direct (StoreKit 2): когда в Settings → Validation приложение переведено на store-direct, initialize начинает следить за Transaction.updates и подтягивает текущие entitlements и незавершённые транзакции. Каждая транзакция отправляется один раз, по original transaction ID. SDK никогда не вызывает finish(): завершать транзакции по-прежнему должно ваше приложение.
Одна деталь StoreKit важна: покупки внутри вашего приложения возвращаются тому, кто вызвал product.purchase(), а не фоновому слушателю. Поэтому сообщайте о покупке сразу после успешной оплаты, как показано ниже. Отчёты дедуплицируются: покупка, отправленная и вами, и автозахватом, считается один раз.
Чтобы связать транзакции с ID вашего пользователя, передайте account token StoreKit: product.purchase(options: [.appAccountToken(InfluTo.appAccountToken(forUserID: userID))]). Для одного и того же ID пользователя UUID всегда один и тот же. reportPurchase выбрасывает InfluToError.retryable при ответе 503 (повторите позже) и InfluToError.notConfigured при 400 (iOS ещё не переведён на store-direct).
// Store-direct only (no RevenueCat). Report right after a purchase — StoreKit
// doesn't send purchases made in your app to the background listener, and
// reports are de-duplicated, so this is safe alongside auto-capture:
if case .success(let verification) = try await product.purchase() {
let r = try await InfluTo.reportPurchase(verification: verification)
}Шаг 4: добавьте ключ App Store Server API
Для store-direct нужен доступ на чтение к App Store Server API. InfluTo только читает данные и ничего не меняет в вашем аккаунте App Store Connect.
- 1
Создайте ключ. В App Store Connect откройте Users and Access → Integrations → In-App Purchase, создайте ключ и скачайте файл .p8. Apple даёт скачать его только один раз. Запишите Issuer ID и Key ID.
- 2
Загрузите его. В InfluTo откройте Settings → Validation, добавьте файл .p8 (Key ID берётся из стандартного имени файла Apple) и введите Issuer ID, Key ID и числовой App Store ID приложения.
- 3
Выберите окружение и переключите режим. Выберите Sandbox, пока тестируете через TestFlight или с sandbox-тестировщиками, и Production — перед релизом. Когда проверка учётных данных станет зелёной, переключите iOS на Apple — direct. До этого отчёты получают ответ 400, так что выпускать SDK раньше безопасно.
С этого момента InfluTo каждый час проверяет у Apple атрибутированные подписки: продления, отмены и возвраты. При возврате комиссия отменяется. Собственный бэкенд не нужен.
Шаг 5: проверка через TestFlight или sandbox-тестировщика
Покупки в TestFlight и sandbox не двигают деньги и не меняют вашу статистику:
- 1
Смоделируйте покупку. Simulate a purchase в разделе Setup & SDK отправляет тестовую sandbox-покупку через настоящий конвейер InfluTo. Это проверяет только сторону InfluTo, но не ваши учётные данные.
- 2
Установите приложение по реферальной ссылке. Присоединитесь к своей кампании со вторым аккаунтом автора, откройте его ссылку на тестовом устройстве, установите сборку из TestFlight и запустите её. Надёжнее всего ввести код вручную.
- 3
Купите через sandbox-аккаунт. Когда окружение Apple переключено на Sandbox, совершите покупку через TestFlight или sandbox-тестировщика. Integration log в режиме Sandbox покажет покупку, атрибутированную вашему коду.
Перед релизом верните окружение на Production: InfluTo проверяет покупки ровно в том окружении, которое вы выбрали. clearAttribution() сбрасывает состояние устройства для нового прогона.
Заметки по iOS
Детали, важные для ревью и для store-direct:
Только StoreKit 2. Для store-direct нужна подписанная транзакция (JWS); не отправляйте неподписанное JSON-представление. SDK отправляет JWS, даже если проверка на устройстве не прошла, а InfluTo проверяет её на сервере.
Privacy manifest включён. В пакет входит PrivacyInfo.xcprivacy: без трекинга, без доменов трекинга, а собираемые типы данных не связаны с личностью. В документации по приватности они сопоставлены с вашими ответами в App Privacy.
Локальное состояние. SDK хранит своё состояние в наборе UserDefaults com.influto.sdk. Оно переживает обновления приложения и удаляется вместе с ним.
Или поручите это ИИ-агенту для кода
Подключите MCP-сервер InfluTo к Claude Code, Codex или Cursor и попросите сделать интеграцию. Агент напишет код запуска и покупок, даст ссылку, чтобы вы сами загрузили .p8, запустит проверку учётных данных и подтвердит атрибутированную sandbox-покупку.
Партнёрский SDK для iOS: ответы.
Есть ли партнёрский SDK для iOS-приложений на Swift?
Да. Swift-пакет InfluTo (github.com/influto/influto-ios, MIT) добавляет в приложения на SwiftUI и UIKit определение установок по реферальной ссылке, реферальные коды и атрибуцию покупок. Нужны iOS 16 и Swift 5.9 или новее. Сторонних зависимостей нет.
Можно ли отслеживать рефералов от авторов на iOS без запроса ATT?
Да. InfluTo не использует IDFA и никогда не сопоставляет по характеристикам устройства. Введённые коды совпадают точно, а сопоставление по клику — запасной вариант на 72 часа, ограниченный вашим приложением. Privacy manifest пакета заявляет об отсутствии трекинга.
Работает ли это без RevenueCat?
Да. Захват StoreKit 2 встроен, а InfluTo проверяет каждую подписанную транзакцию через App Store Server API с помощью загруженного вами ключа In-App Purchase, доступного только для чтения. Собственный сервер не нужен.
Есть ли под для CocoaPods?
Нет. SDK распространяется только через Swift Package Manager и есть в Swift Package Index.
Работают ли покупки через TestFlight?
Да, если для окружения Apple в Settings → Validation выбран Sandbox. Покупки из TestFlight и песочницы появляются в журнале Integration, но деньги не двигают и статистику не меняют.
Сколько это стоит?
0 $ в месяц. За каждую подтверждённую покупку вы платите установленную вами комиссию плюс 10% от той же выручки (7%, 5% или 3% при больших объёмах). Предоплаченный кошелёк начинается с 50 $ и возвращается. InfluTo выплачивает авторам раз в месяц через Stripe Connect в 33 странах, как только они заработают 20 $.
Добавьте реферальные коды уже в следующую сборку TestFlight.
Один пакет Swift, один путь проверки, возвращаемый депозит. 0 $ в месяц; 10% — только с выручки, которую приводят авторы.
Начать бесплатно