Ir para o conteúdo

Guia · iOS (Swift)

Adicione um programa de afiliados ou de indicação ao seu app iOS.

O pacote Swift da InfluTo funciona em apps SwiftUI e UIKit. Ele mostra qual criador indicou uma instalação, aceita códigos de indicação digitados e faz cada compra ser verificada, pelo RevenueCat ou direto do StoreKit 2 e da App Store Server API.

Atualizado em 1 de novembro de 2026

Em resumo

Adicione o pacote Swift github.com/influto/influto-ios ao target do seu app, chame InfluTo.initialize uma vez na inicialização, dentro de uma Task, e depois checkAttribution e identifyUser. Sem o RevenueCat, a captura via StoreKit 2 já vem pronta: o SDK observa Transaction.updates e recupera os direitos de acesso atuais. Você também chama reportPurchase(verification:) logo depois que product.purchase() for concluído com sucesso. Com o RevenueCat, passe um revenueCatAttributeSetter para o SDK marcar o assinante. iOS 16+, sem dependências de terceiros, sem IDFA e sem solicitação do ATT. Reserve uma tarde.

O que você recebe

O pacote depende apenas de Foundation, StoreKit 2 e CryptoKit, é distribuído pelo Swift Package Manager (não há pod do CocoaPods) e tem licença MIT. Exige iOS 16 e Swift 5.9 (Xcode 15) ou mais recente, e também compila para macOS 13, tvOS 16 e watchOS 9.

  • Atribuição sem rastreamento. Um código digitado é uma correspondência exata. Caso contrário, a correspondência por clique no link liga a instalação a um toque recente no link do criador, dentro de 72 horas. Sem identificador de publicidade e sem características do dispositivo, então não há solicitação do App Tracking Transparency.

  • Um campo de código em SwiftUI. O InfluToReferralCodeInput valida enquanto a pessoa digita e aplica o código ao toque. No UIKit, use-o dentro de um UIHostingController.

  • Captura via StoreKit 2 já incluída. Em apps store-direct, o próprio SDK reporta as compras, e a InfluTo verifica cada transação assinada junto à Apple.

Passo 1: adicione o pacote Swift

No Xcode, escolha File → Add Package Dependencies, cole a URL do repositório e adicione a biblioteca InfluTo ao target do seu app. Ou declare no 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")

Passo 2: inicialize na abertura do app

Todos os métodos do SDK são assíncronos. Chame initialize uma vez na inicialização, dentro de uma Task, e aguarde o resultado. Ele lança um erro quando falha (chave errada, sem rede): capture o erro, registre no log e siga em frente; a próxima abertura tenta de novo. No UIKit, inicie a Task a partir de application(_:didFinishLaunchingWithOptions:).

checkAttribution nunca lança erro. Se houver um erro, ou se initialize não tiver sido concluído, ele retorna attributed == false e não guarda nada. Uma resposta positiva fica salva no dispositivo, então as chamadas seguintes a devolvem sem fazer requisição.

A chave de API (it_…, em Setup & SDK) vale para desenvolvimento e produção. Mantenha-a fora do código versionado, por exemplo em um .xcconfig que não vai para o repositório, lido via Info.plist. Uma inicialização típica em SwiftUI num app com 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)
}

Passo 3: conecte as compras

A InfluTo só paga comissão sobre compras verificadas com a loja. Escolha um caminho para o iOS:

  • RevenueCat: passe um revenueCatAttributeSetter, como no MyApp.swift acima; sem ele, nada define o atributo no iOS. O SDK o chama uma vez, quando encontra a indicação, então configure o RevenueCat antes de checkAttribution. Depois, conecte o webhook em Setup & SDK.

  • Store-direct (StoreKit 2): quando o app está como store-direct em Settings → Validation, initialize passa a observar Transaction.updates e recupera os direitos de acesso atuais e as transações não finalizadas. Cada transação é reportada uma única vez, com base no ID da transação original. O SDK nunca chama finish(); o seu app continua finalizando as próprias transações.

Um detalhe do StoreKit importa: as compras feitas dentro do seu app voltam para quem chamou product.purchase(), não para o listener em segundo plano. Por isso, reporte logo após uma compra bem-sucedida, como abaixo. Os reports são deduplicados, então uma compra reportada aqui e pela captura automática conta uma só vez.

Para associar transações ao ID do seu usuário, passe o account token do StoreKit: product.purchase(options: [.appAccountToken(InfluTo.appAccountToken(forUserID: userID))]), sempre com o mesmo UUID para um dado ID de usuário. reportPurchase lança InfluToError.retryable em caso de 503 (tente de novo mais tarde) e InfluToError.notConfigured em caso de 400 (o iOS ainda não está como 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)
}

Passo 4: adicione sua chave da App Store Server API

O store-direct precisa de acesso de leitura à App Store Server API. A InfluTo só lê; nunca altera nada na sua conta do App Store Connect.

  1. 1

    Crie a chave. No App Store Connect, abra Users and Access → Integrations → In-App Purchase, crie uma chave e baixe o arquivo .p8. A Apple permite baixá-lo uma única vez. Anote o Issuer ID e o Key ID.

  2. 2

    Envie a chave. Na InfluTo, abra Settings → Validation, solte o arquivo .p8 (o Key ID é lido do nome de arquivo padrão da Apple) e informe o Issuer ID, o Key ID e o App Store ID numérico do app.

  3. 3

    Escolha o ambiente e depois ative. Escolha Sandbox enquanto testa com o TestFlight ou com testers de sandbox, e Production antes do lançamento. Quando a verificação da credencial estiver verde, defina o iOS como Apple — direct. Até lá, os reports recebem um 400, então é seguro publicar o SDK primeiro.

A partir daí, a InfluTo consulta a Apple a cada hora sobre as assinaturas atribuídas, para detectar renovações, cancelamentos e reembolsos, e reverte a comissão em caso de reembolso. Você não precisa de backend próprio.

Passo 5: teste com o TestFlight ou um tester de sandbox

Compras no TestFlight e no sandbox nunca movimentam dinheiro nem alteram suas estatísticas:

  1. 1

    Simule uma compra. Simulate a purchase, em Setup & SDK, envia uma compra de teste em sandbox pelo pipeline real da InfluTo. Ele verifica apenas o lado da InfluTo, nunca as suas credenciais.

  2. 2

    Instale por um link de indicação. Entre na sua campanha com uma segunda conta de criador, abra o link dela em um dispositivo de teste, instale a sua build do TestFlight e abra o app. Digitar o código é o teste mais confiável.

  3. 3

    Compre com uma conta de sandbox. Com o ambiente da Apple definido como Sandbox, compre com um tester do TestFlight ou de sandbox. O Integration log, alternado para Sandbox, mostra a compra atribuída ao seu código.

Volte o ambiente para Production antes do lançamento: a InfluTo verifica exatamente no ambiente que você escolher. clearAttribution() redefine o dispositivo para um novo teste.

Notas sobre iOS

Detalhes importantes para a revisão e para o store-direct:

  • Somente StoreKit 2. O store-direct precisa da transação assinada (JWS); nunca envie a representação JSON sem assinatura. O SDK envia o JWS mesmo quando a verificação no dispositivo falha, e a InfluTo o verifica no servidor.

  • Privacy manifest incluído. O pacote traz o PrivacyInfo.xcprivacy: sem rastreamento, sem domínios de rastreamento e com os tipos de dados coletados, não vinculados à identidade. A documentação de privacidade relaciona isso às suas respostas de App Privacy.

  • Estado local. O SDK guarda seu estado na suíte de UserDefaults com.influto.sdk. Ele sobrevive às atualizações do app; excluir o app o apaga.

Ou deixe seu agente de código fazer isso

Conecte o servidor MCP da InfluTo ao Claude Code, Codex ou Cursor e peça a integração: o agente escreve o código de inicialização e de compra, entrega um link para você mesmo enviar o .p8, executa a verificação da credencial e confirma uma compra de sandbox atribuída.

SDK de afiliados para iOS: respostas.

Existe um SDK de afiliados para apps iOS escritos em Swift?

Sim. O pacote Swift da InfluTo (github.com/influto/influto-ios, MIT) adiciona detecção de instalações indicadas, códigos de indicação e atribuição de compras a apps SwiftUI e UIKit. Exige iOS 16 e Swift 5.9 ou mais recente e não tem dependências de terceiros.

Posso rastrear indicações de influenciadores no iOS sem a solicitação do ATT?

Sim. A InfluTo não usa o IDFA e nunca faz correspondência por características do dispositivo; códigos digitados são exatos, e a correspondência por clique no link é uma alternativa de 72 horas, limitada ao seu app. O privacy manifest do pacote declara que não há rastreamento.

Funciona sem o RevenueCat?

Sim. A captura via StoreKit 2 já vem pronta, e a InfluTo verifica cada transação assinada com a App Store Server API, usando uma chave de In-App Purchase somente leitura que você envia. Você não precisa de servidor próprio.

Existe um pod do CocoaPods?

Não. O SDK é distribuído apenas pelo Swift Package Manager e está listado no Swift Package Index.

As compras do TestFlight funcionam?

Sim, quando o ambiente Apple do app está definido como Sandbox em Configurações → Validação. As compras do TestFlight e do sandbox aparecem no log de integração, mas nunca movimentam dinheiro nem alteram suas estatísticas.

Quanto custa?

US$ 0 por mês. Por compra verificada, você paga a comissão que definiu mais 10% da mesma receita (7%, 5% ou 3% em volume). A carteira pré-paga começa em US$ 50 e é reembolsável. A InfluTo paga os criadores todo mês via Stripe Connect em 33 países, depois que eles ganham US$ 20.

Lance códigos de indicação no seu próximo build do TestFlight.

Um pacote Swift, um caminho de validação, um depósito reembolsável. US$ 0 por mês; 10% só sobre a receita que os criadores trazem.

Começar grátis