Przejdź do treści

Poradnik · iOS (Swift)

Dodaj program afiliacyjny lub poleceń do swojej aplikacji na iOS.

Pakiet Swift InfluTo działa w aplikacjach SwiftUI i UIKit. Pokazuje, który twórca polecił instalację, przyjmuje wpisywane kody polecające i weryfikuje każdy zakup — przez RevenueCat albo prosto ze StoreKit 2 i App Store Server API.

Zaktualizowano: 1 listopada 2026

W skrócie

Dodaj pakiet Swift github.com/influto/influto-ios do targetu aplikacji, wywołaj raz przy starcie InfluTo.initialize z poziomu Task, a potem checkAttribution i identifyUser. Bez RevenueCat przechwytywanie przez StoreKit 2 jest wbudowane: SDK obserwuje Transaction.updates i uzupełnia aktualne uprawnienia, a Ty dodatkowo wywołujesz reportPurchase(verification:) zaraz po udanym product.purchase(). Z RevenueCat przekaż revenueCatAttributeSetter, aby SDK mogło oznaczyć subskrybenta. iOS 16+, bez zależności zewnętrznych, bez IDFA i bez okna ATT. Zarezerwuj sobie na to popołudnie.

Co dostajesz

Pakiet zależy tylko od Foundation, StoreKit 2 i CryptoKit, jest dostępny przez Swift Package Manager (nie ma poda CocoaPods) i ma licencję MIT. Wymaga iOS 16 oraz Swift 5.9 (Xcode 15) lub nowszego. Buduje się też na macOS 13, tvOS 16 i watchOS 9.

  • Atrybucja bez śledzenia. Wpisany kod daje dokładne dopasowanie. W przeciwnym razie dopasowanie po kliknięciu linku łączy instalację z niedawnym kliknięciem w link twórcy, w ciągu 72 godzin. Bez identyfikatora reklamowego i bez cech urządzenia, więc nie ma okna App Tracking Transparency.

  • Pole kodu w SwiftUI. InfluToReferralCodeInput sprawdza kod w trakcie pisania i stosuje go po stuknięciu. W UIKit osadź go w UIHostingController.

  • Wbudowane przechwytywanie StoreKit 2. W aplikacjach store-direct SDK samo zgłasza zakupy, a InfluTo weryfikuje każdą podpisaną transakcję w Apple.

Krok 1: dodaj pakiet Swift

W Xcode wybierz File → Add Package Dependencies, wklej adres repozytorium i dodaj bibliotekę InfluTo do targetu aplikacji. Możesz też zadeklarować ją w 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")

Krok 2: zainicjuj przy starcie

Każda metoda SDK jest asynchroniczna. Wywołaj initialize raz przy starcie z poziomu Task i poczekaj na wynik. Gdy się nie powiedzie (zły klucz, brak sieci), zgłasza błąd: przechwyć go, zapisz w logu i działaj dalej. Kolejne uruchomienie spróbuje ponownie. W UIKit uruchom Task z application(_:didFinishLaunchingWithOptions:).

checkAttribution nigdy nie zgłasza błędu. Gdy wystąpi błąd albo initialize się nie powiódł, zwraca attributed == false i niczego nie zapisuje. Pozytywny wynik jest zapisywany na urządzeniu, więc kolejne wywołania zwracają go bez zapytania do sieci.

Klucz API (it_…, w Setup & SDK) działa zarówno w trakcie developmentu, jak i na produkcji. Nie trzymaj go w kodzie źródłowym w repozytorium. Możesz np. użyć pliku .xcconfig poza kontrolą wersji i odczytać go przez Info.plist. Typowy start aplikacji SwiftUI z 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)
}

Krok 3: podłącz zakupy

InfluTo wypłaca prowizję tylko od zakupów zweryfikowanych w sklepie. Wybierz jedną ścieżkę dla iOS:

  • RevenueCat: przekaż revenueCatAttributeSetter, jak w MyApp.swift powyżej. Bez niego nic nie ustawi atrybutu na iOS. SDK wywołuje go raz, gdy znajdzie polecenie, więc skonfiguruj RevenueCat przed checkAttribution. Potem podłącz webhook w Setup & SDK.

  • Store-direct (StoreKit 2): gdy aplikacja jest ustawiona jako store-direct w Settings → Validation, initialize zaczyna obserwować Transaction.updates i uzupełnia aktualne uprawnienia oraz niezakończone transakcje. Każda transakcja jest zgłaszana raz, na podstawie oryginalnego ID transakcji. SDK nigdy nie wywołuje finish(). Transakcje nadal kończy Twoja aplikacja.

Jeden szczegół StoreKit ma znaczenie: zakupy zrobione w Twojej aplikacji wracają do kodu, który wywołał product.purchase(), a nie do nasłuchu w tle. Zgłoś więc zakup zaraz po udanej płatności, jak niżej. Zgłoszenia są deduplikowane, więc zakup zgłoszony tutaj i przez automatyczne przechwycenie liczy się tylko raz.

Aby powiązać transakcje z ID użytkownika, przekaż token konta StoreKit: product.purchase(options: [.appAccountToken(InfluTo.appAccountToken(forUserID: userID))]), czyli za każdym razem ten sam UUID dla danego ID użytkownika. reportPurchase zgłasza InfluToError.retryable przy odpowiedzi 503 (spróbuj później) i InfluToError.notConfigured przy 400 (iOS nie jest jeszcze 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)
}

Krok 4: dodaj klucz App Store Server API

Store-direct wymaga dostępu do odczytu w App Store Server API. InfluTo tylko czyta. Niczego nie zmienia na Twoim koncie App Store Connect.

  1. 1

    Utwórz klucz. W App Store Connect otwórz Users and Access → Integrations → In-App Purchase, utwórz klucz i pobierz plik .p8. Apple pozwala pobrać go tylko raz. Zapisz Issuer ID i Key ID.

  2. 2

    Prześlij go. W InfluTo otwórz Settings → Validation, wrzuć plik .p8 (Key ID odczytujemy z domyślnej nazwy pliku od Apple) i wpisz Issuer ID, Key ID oraz numeryczny App Store ID aplikacji.

  3. 3

    Wybierz środowisko, potem przełącz. Wybierz Sandbox na czas testów z TestFlight lub testerami sandbox, a przed wydaniem Production. Gdy sprawdzenie danych uwierzytelniających jest zielone, ustaw iOS na Apple — direct. Do tego czasu zgłoszenia dostają odpowiedź 400, więc można bezpiecznie wydać SDK wcześniej.

Od tej pory InfluTo co godzinę sprawdza w Apple subskrypcje z atrybucją pod kątem odnowień, anulowań i zwrotów, a przy zwrotach cofa prowizję. Nie potrzebujesz własnego backendu.

Krok 5: przetestuj w TestFlight lub z testerem sandbox

Zakupy w TestFlight i sandbox nigdy nie przesuwają pieniędzy ani nie zmieniają statystyk:

  1. 1

    Zasymuluj zakup. Simulate a purchase w Setup & SDK wysyła testowy zakup sandbox przez prawdziwy potok InfluTo. Sprawdza tylko stronę InfluTo, nigdy Twoje dane uwierzytelniające.

  2. 2

    Zainstaluj przez link polecający. Dołącz do swojej kampanii drugim kontem twórcy, otwórz jego link na urządzeniu testowym, zainstaluj build z TestFlight i uruchom aplikację. Najpewniejszym testem jest wpisanie kodu.

  3. 3

    Kup kontem sandbox. Gdy środowisko Apple jest ustawione na Sandbox, kup jako tester TestFlight lub sandbox. Integration log przełączony na Sandbox pokaże zakup przypisany do Twojego kodu.

Przed wydaniem przełącz środowisko z powrotem na Production: InfluTo weryfikuje dokładnie w tym środowisku, które wybierzesz. clearAttribution() resetuje urządzenie przed kolejną próbą.

Uwagi o iOS

Szczegóły ważne przy recenzji i w trybie store-direct:

  • Tylko StoreKit 2. Store-direct wymaga podpisanej transakcji (JWS). Nigdy nie wysyłaj niepodpisanej reprezentacji JSON. SDK wysyła JWS nawet wtedy, gdy weryfikacja na urządzeniu się nie powiedzie, a InfluTo weryfikuje go na serwerze.

  • Privacy manifest w pakiecie. Pakiet zawiera PrivacyInfo.xcprivacy: bez śledzenia, bez domen śledzących, a zbierane typy danych nie są powiązane z tożsamością. Dokumentacja prywatności wskazuje, jak to przełożyć na Twoje odpowiedzi w App Privacy.

  • Stan lokalny. SDK trzyma stan w zestawie UserDefaults com.influto.sdk. Przetrwa aktualizacje aplikacji. Usunięcie aplikacji go kasuje.

Albo zleć to agentowi kodującemu

Podłącz serwer MCP InfluTo do Claude Code, Codex lub Cursor i poproś o integrację. Agent napisze kod startowy i kod zakupów, poda link, pod którym sam wgrasz plik .p8, uruchomi sprawdzenie danych uwierzytelniających i potwierdzi zakup sandbox z atrybucją.

SDK partnerskie na iOS — odpowiedzi.

Czy jest SDK partnerskie dla aplikacji na iOS napisanych w Swift?

Tak. Pakiet Swift InfluTo (github.com/influto/influto-ios, MIT) dodaje do aplikacji SwiftUI i UIKit wykrywanie instalacji z polecenia, kody polecające i atrybucję zakupów. Wymaga iOS 16 oraz Swift 5.9 lub nowszego i nie ma zależności zewnętrznych.

Czy mogę śledzić polecenia influencerów na iOS bez okna ATT?

Tak. InfluTo nie używa IDFA i nigdy nie dopasowuje po cechach urządzenia. Wpisane kody dają dokładne dopasowanie, a dopasowanie po kliknięciu linku to 72-godzinne rozwiązanie zapasowe, ograniczone do Twojej aplikacji. Privacy manifest pakietu deklaruje brak śledzenia.

Czy działa bez RevenueCat?

Tak. Przechwytywanie przez StoreKit 2 jest wbudowane, a InfluTo weryfikuje każdą podpisaną transakcję przez App Store Server API, używając przesłanego przez Ciebie klucza In-App Purchase tylko do odczytu. Nie potrzebujesz własnego serwera.

Czy jest pod dla CocoaPods?

Nie. SDK jest dostępne wyłącznie przez Swift Package Manager i znajduje się w Swift Package Index.

Czy zakupy z TestFlight działają?

Tak, gdy środowisko Apple aplikacji jest ustawione na Sandbox w Settings → Validation. Zakupy z TestFlight i z piaskownicy pojawiają się w logu Integration, ale nigdy nie przesuwają pieniędzy ani nie zmieniają Twoich statystyk.

Ile to kosztuje?

0 $ miesięcznie. Za każdy zweryfikowany zakup płacisz ustaloną przez siebie prowizję plus 10% tego samego przychodu (7%, 5% lub 3% przy większym wolumenie). Przedpłacony portfel zaczyna się od 50 $ i podlega zwrotowi. InfluTo wypłaca twórcom środki co miesiąc przez Stripe Connect w 33 krajach, gdy zarobią 20 $.

Wdróż kody polecające w następnej kompilacji TestFlight.

Jeden pakiet Swift, jedna ścieżka weryfikacji, depozyt z możliwością zwrotu. 0 $ miesięcznie; 10% tylko od przychodu, który przyniosą twórcy.

Zacznij za darmo