Skip to main content

API Reference

Documentação completa da API do GoAB SDK para iOS (Swift).

GoABSDK

Classe principal do SDK que fornece a interface para interagir com experimentos e configurações remotas.

Inicialização

O SDK é obtido através da factory. Não há construtor público.

Métodos

initialize(config: GoABConfig) ou initialize()

Inicializa o SDK com a configuração fornecida (ou com a config usada na criação).

Parâmetros (quando aplicável):

  • config: GoABConfig - Configuração do SDK

Exemplo (async/await):

Task {
try await sdk.initialize()
await MainActor.run { setupUI() }
}

Exemplo (completion handler):

sdk.initialize { result in
switch result {
case .success:
DispatchQueue.main.async { self.setupUI() }
case .failure(let error):
print("GoAB init error: \(error)")
}
}

getValue(key: String, defaultValue: Any) -> Any

Obtém o valor de uma chave de experimento.

Parâmetros:

  • key: String - Chave do experimento
  • defaultValue: Any - Valor padrão se a chave não for encontrada (obrigatório)

Retorna:

  • Any - Valor do experimento ou valor padrão

Exemplo:

// String
let buttonText = sdk.getValue("button_text", defaultValue: "Clique Aqui") as? String ?? "Clique Aqui"

// Bool
let showFeature = sdk.getValue("show_new_feature", defaultValue: false) as? Bool ?? false

// Number
let maxRetries = sdk.getValue("max_retries", defaultValue: 3) as? Int ?? 3

sendEvent(eventName: String, props: [String: Any] = [:])

Envia um evento para analytics.

Parâmetros:

  • eventName: String - Nome do evento
  • props: [String: Any] - Propriedades do evento (opcional)

Exemplo:

// Evento simples
sdk.sendEvent("button_clicked")

// Evento com propriedades
sdk.sendEvent("purchase_completed", props: [
"product_id": "prod_123",
"price": 29.99,
"currency": "BRL"
])

refreshExperiments()

Força a atualização dos experimentos do servidor.

Exemplo:

sdk.refreshExperiments()

clearCache()

Limpa o cache de experimentos.

Exemplo:

sdk.clearCache()

isInitialized() -> Bool

Verifica se o SDK está inicializado.

Retorna:

  • Bool - true se inicializado, false caso contrário

Exemplo:

if sdk.isInitialized() {
// SDK pronto para uso
}

setUserId(_ newUserId: String)

Atualiza o ID do usuário atual e recarrega os experimentos.

Parâmetros:

  • newUserId: String - Novo ID do usuário

Exemplo (async):

Task {
await sdk.setUserId("new_user_123")
}

getCurrentUserId() -> String?

Obtém o ID do usuário atual.

Retorna:

  • String? - ID do usuário atual ou nil

Exemplo:

let userId = sdk.getCurrentUserId()

clearActiveUsers()

Limpa os experimentos ativos.

Exemplo:

Task {
await sdk.clearActiveUsers()
}

getUserId() -> String?

Obtém o ID do usuário do repositório.

Retorna:

  • String? - ID do usuário ou nil

Exemplo:

Task {
let userId = await sdk.getUserId()
}

GoABSDKFactory

Factory para criar instâncias do SDK.

Métodos estáticos

create(accountId: Int, apiToken: String, timeoutSeconds: Int) -> GoABSDK

Cria uma nova instância do SDK.

Parâmetros:

  • accountId: Int - ID da conta
  • apiToken: String - Token de autenticação
  • timeoutSeconds: Int - Timeout das requisições em segundos

Retorna:

  • GoABSDK - Instância do SDK

Exemplo:

let sdk = GoABSDKFactory.create(
accountId: 12345,
apiToken: "your-api-token",
timeoutSeconds: 30
)

create(config: GoABConfig) -> GoABSDK

Cria uma nova instância do SDK a partir de uma configuração.

Parâmetros:

  • config: GoABConfig - Configuração do SDK

Retorna:

  • GoABSDK - Instância do SDK

Exemplo:

let config = GoABConfig(
accountId: 12345,
apiToken: "your-api-token",
timeoutSeconds: 30
)
let sdk = GoABSDKFactory.create(config: config)

GoABConfig

Estrutura de configuração do SDK.

Propriedades

PropriedadeTipoObrigatórioDescrição
accountIdIntSimID da conta
apiTokenStringSimToken de autenticação
timeoutSecondsIntNãoTimeout em segundos (padrão: 30)
appContextAppContext?NãoContexto da aplicação (preenchido automaticamente)

Exemplo

struct GoABConfig {
let accountId: Int
let apiToken: String
let timeoutSeconds: Int
let appContext: AppContext?
}

GoABConfig.AppContext

Contexto da aplicação com informações do dispositivo e usuário.

Propriedades

PropriedadeTipoObrigatórioDescrição
userIdString?NãoID do usuário (gerado automaticamente se não fornecido)
apiTokenString?NãoToken de autenticação
bundleIdentifierString?NãoBundle ID do app (preenchido automaticamente)
appVersionString?NãoVersão do app (preenchido automaticamente)
deviceIdString?NãoID do dispositivo (preenchido automaticamente)
deviceModelString?NãoModelo do dispositivo (preenchido automaticamente)
osVersionString?NãoVersão do iOS (preenchido automaticamente)
screenResolutionString?NãoResolução da tela (preenchido automaticamente)
timezoneString?NãoFuso horário (preenchido automaticamente)
countryString?NãoPaís (preenchido automaticamente)
languageString?NãoIdioma (preenchido automaticamente)

Exemplo

struct AppContext {
var userId: String?
var apiToken: String?
var bundleIdentifier: String?
var appVersion: String?
var deviceId: String?
var deviceModel: String?
var osVersion: String?
var screenResolution: String?
var timezone: String?
var country: String?
var language: String?
}

Exemplos de Uso

Configuração simplificada

// O SDK preenche automaticamente as informações do dispositivo e do app
let sdk = GoABSDKFactory.create(
accountId: 12345,
apiToken: "your-api-token",
timeoutSeconds: 30
)

Uso básico (SwiftUI)

import SwiftUI

@main
struct MyApp: App {
@StateObject private var sdkHolder = SDKHolder()

var body: some Scene {
WindowGroup {
ContentView(sdk: sdkHolder.sdk)
.task { await sdkHolder.initialize() }
}
}
}

class SDKHolder: ObservableObject {
let sdk = GoABSDKFactory.create(
accountId: 12345,
apiToken: "your-api-token",
timeoutSeconds: 30
)

func initialize() async {
try? await sdk.initialize()
}
}

struct ContentView: View {
let sdk: GoABSDK

var body: some View {
VStack {
Text(sdk.getValue("button_text", defaultValue: "Clique Aqui") as? String ?? "Clique Aqui")
if sdk.getValue("show_banner", defaultValue: true) as? Bool == true {
BannerView()
}
}
.onTapGesture {
sdk.sendEvent("button_clicked", props: ["button_id": "main_button"])
}
}
}

Uso básico (UIKit)

import UIKit

class MainViewController: UIViewController {
private let sdk = GoABSDKFactory.create(
accountId: 12345,
apiToken: "your-api-token",
timeoutSeconds: 30
)

override func viewDidLoad() {
super.viewDidLoad()
Task {
try? await sdk.initialize()
await MainActor.run { setupUI() }
}
}

private func setupUI() {
let buttonText = sdk.getValue("button_text", defaultValue: "Clique Aqui") as? String ?? "Clique Aqui"
let showBanner = sdk.getValue("show_banner", defaultValue: true) as? Bool ?? true

button.setTitle(buttonText, for: .normal)
bannerView.isHidden = !showBanner
}

@objc private func onButtonTap() {
sdk.sendEvent("button_clicked", props: ["button_id": "main_button"])
}
}

Gerenciamento de usuário

// Atualizar usuário
Task {
await sdk.setUserId("new_user_123")
}

// Obter usuário atual
let currentUserId = sdk.getCurrentUserId()

// Limpar experimentos ativos
Task {
await sdk.clearActiveUsers()
}

Tratamento de erros

Task {
do {
try await sdk.initialize()
// SDK inicializado com sucesso
} catch {
print("GoAB: Erro ao inicializar SDK - \(error)")
// Usar valores padrão
}
}

Próximos passos