Посібник · iOS (Swift)
Додайте партнерську чи реферальну програму у свій застосунок для iOS.
Пакет InfluTo для Swift працює в застосунках на 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 і дозаповнює поточні права доступу, а після успішного product.purchase() ви додатково викликаєте reportPurchase(verification:). З 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 і дозаповнює поточні права доступу та незавершені транзакції. Кожна транзакція передається один раз, за її 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
Оберіть середовище, потім перемкніть. Поки тестуєте через TestFlight або тестувальників sandbox, вибирайте 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 вибрано Sandbox (Налаштування → Перевірка). Покупки з TestFlight і sandbox видно в журналі інтеграції, але вони не рухають гроші й не змінюють вашу статистику.
Скільки це коштує?
0 $ на місяць. За кожну підтверджену покупку ви платите встановлену вами комісію плюс 10% від того самого доходу (7%, 5% або 3% за великих обсягів). Передоплачений гаманець починається від 50 $ і підлягає поверненню. InfluTo щомісяця виплачує авторам через Stripe Connect у 33 країнах, щойно вони заробили 20 $.
Додайте реферальні коди вже в наступну збірку TestFlight.
Один пакет Swift, один шлях перевірки, депозит із поверненням. 0 $ на місяць; 10% лише з доходу, який приносять автори.
Почати безкоштовно