9 - Eventos

Entenda quais eventos o SDK Tap to Pay iOS dispara nos fluxos de initialize(), activateSession() e pay(), incluindo eventos InPayment e diagramas visuais.

Nesta página, você vai entender quando cada evento do SDK Tap to Pay iOS é disparado nos fluxos de initialize(), activateSession() e pay().

Os eventos são enviados pela callback onEvent nas funcionalidades de pagamento e otimização de pagamento.

Use esta página como referência de implementação e debug. Ela mostra os eventos disponíveis, quando eles aparecem e como o comportamento muda quando parte do fluxo acontece durante o pagamento.

Enum de eventos

public enum ApplicationEvent: Hashable {
    // Tela
    case launchBuiltInScreen // Tela nativa do SDK apareceu
    case closeBuiltInScreen // Tela nativa do SDK desapareceu

    // Ativação
    case terminalActivationStarted // Começou o processo de ativação (contempla o fluxo completo, ativação Zoop e ativação Apple)
    case terminalActivationSucceeded // Ativação realizada com sucesso - a partir da versão 3.4.3
    case terminalActivationFailed // Ativação falhou - a partir da versão 3.4.3
    case terminalActivationFinished // Finalizou o processo de ativação (contempla o fluxo completo, ativação Zoop e ativação Apple)

    case zoopActivationStarted // Começou o fluxo de ativação na Zoop
    case zoopActivationSucceeded // Ativação na Zoop realizada com sucesso
    case zoopActivationFailed // Ativação na Zoop falhou
    case zoopActivationFinished // Ativação na Zoop encerrou - a partir da versão 3.4.3

    // Ativação durante pagamento - a partir da versão 3.4.3
    case zoopActivationInPaymentStarted
    case zoopActivationInPaymentSucceeded
    case zoopActivationInPaymentFailed
    case zoopActivationInPaymentFinished

    case kernelActivationStarted // Criando o leitor do cartão na Apple
    case kernelActivationSucceeded // Leitor Apple criado com sucesso
    case kernelActivationFailed // Falha na criação do leitor Apple
    case kernelActivationFinished // Criação do leitor finalizou - a partir da versão 3.4.3

    // Ativação do leitor Apple durante o pagamento - a partir da versão 3.4.3
    case kernelActivationInPaymentStarted
    case kernelActivationInPaymentSucceeded
    case kernelActivationInPaymentFailed
    case kernelActivationInPaymentFinished

    case sessionActivationStarted // Criação da sessão do pagamento iniciada
    case sessionActivationSucceeded // Sessão criada com sucesso
    case sessionActivationFailed // Falha na criação da sessão
    case sessionActivationRetry // Retentativa de criação de sessão
    case sessionActivationFinished // Criação da sessão finalizou - a partir da versão 3.4.3

    // Ativação da sessão durante o pagamento - a partir da versão 3.4.3
    case sessionActivationInPaymentStarted
    case sessionActivationInPaymentSucceeded
    case sessionActivationInPaymentFailed
    case sessionActivationInPaymentFinished

    // Processo do pagamento
    case paymentProcessStarted // Processo do pagamento iniciado
    case paymentProcessFinished // Processo do pagamento finalizado
    case paymentProcessSucceeded // Sucesso no pagamento
    case paymentProcessFailed // Falha no pagamento
    case paymentConfirmationStarted // Criando confirmação do pagamento
    case paymentConfirmationSucceeded // Pagamento confirmado
    case paymentConfirmationFailed // Falha na confirmação do pagamento
    case paymentConfirmationFinished // Confirmação do pagamento finalizou

    // Eventos do pagamento
    case cardReadingStarted // Iniciando a leitura do cartão
    case cardReadingRetry // Retentativa da leitura do cartão
    case cardReadingFinished // Leitura do cartão finalizada
    case pinInputStarted // Início da captura de PIN
    case pinInputFinished // Captura de PIN finalizada
    case authorizingPleaseWait // Enviando autorização
    case holdCardSteady // Manter o cartão aproximado
    case transactionAborted // Operação cancelada

    // Disponíveis a partir da versão 3.2.2
    case brandAnimationStarted // Início da exibição da tela de animação da bandeira
    case brandAnimationSucceeded // Animação exibida com sucesso - a partir da versão 3.4.3
    case brandAnimationFailed // Falha na exibição da tela de animação da bandeira
    case brandAnimationFinished // Animação de bandeira encerrada

    // Disponível a partir da versão 3.4.0
    case kernelUpdateProgress(Int) // Atualização do leitor Apple, com a porcentagem em inteiro. Ex.: 40 representa 40%
}

Visão rápida do fluxo

Os eventos de inicialização e criação de sessão podem aparecer em dois momentos.

Antes do pagamento

Antecipe parte do fluxo para reduzir o trabalho dentro de pay():

  • Chame TapOnPhone.initialize() para iniciar a ativação.
  • Chame TapOnPhone.activateSession() para criar a sessão antes do pagamento.

Durante o pagamento

Execute TapOnPhone.pay() sem aguardar os métodos opcionais anteriores.

Nesse cenário, eventos de ativação e sessão podem ser emitidos enquanto o pagamento já está em andamento.

Comportamento dos eventos InPayment

Dependendo de como você organiza as chamadas, você pode receber:

  • Eventos padrão — por exemplo, zoopActivationStarted.
  • Eventos com sufixo InPayment — por exemplo, zoopActivationInPaymentStarted.
  • Ambos os tipos — quando pay() é chamado antes do término dos fluxos opcionais.

Os eventos InPayment só são disparados quando a tela do SDK é aberta durante a execução de um desses processos.

Mapeamento de eventos padrão para InPayment

Ver mapeamento completo
let relatedEvents: [ApplicationEvent: ApplicationEvent] = [
    // Zoop
    .zoopActivationStarted: .zoopActivationInPaymentStarted,
    .zoopActivationSucceeded: .zoopActivationInPaymentSucceeded,
    .zoopActivationFailed: .zoopActivationInPaymentFailed,
    .zoopActivationFinished: .zoopActivationInPaymentFinished,

    // Kernel
    .kernelActivationStarted: .kernelActivationInPaymentStarted,
    .kernelActivationSucceeded: .kernelActivationInPaymentSucceeded,
    .kernelActivationFailed: .kernelActivationInPaymentFailed,
    .kernelActivationFinished: .kernelActivationInPaymentFinished,

    // Session
    .sessionActivationStarted: .sessionActivationInPaymentStarted,
    .sessionActivationSucceeded: .sessionActivationInPaymentSucceeded,
    .sessionActivationFailed: .sessionActivationInPaymentFailed,
    .sessionActivationFinished: .sessionActivationInPaymentFinished
]

Fluxo de métodos e eventos

setConfig()

CampoValor
TipoObrigatório
Eventos disparadosNenhum

initialize()

CampoValor
TipoOpcional
Eventos esperados no fluxo completo
  • terminalActivationStarted
  • kernelActivationStarted
  • kernelActivationSucceeded ou kernelActivationFailed
  • kernelActivationFinished
  • zoopActivationStarted
  • zoopActivationSucceeded ou zoopActivationFailed
  • zoopActivationFinished
  • sessionActivationStarted
  • terminalActivationSucceeded ou terminalActivationFailed
  • terminalActivationFinished

Fluxo visual de initialize()

Fluxo de inicialização

activateSession()

CampoValor
TipoOpcional

Se initialize() ainda estiver em processamento, os eventos do fluxo de inicialização podem sair pela callback onEvent de activateSession().

Eventos esperados
  • sessionActivationStarted
  • sessionActivationSucceeded ou sessionActivationFailed
  • sessionActivationRetry (se necessário)
  • sessionActivationFinished

Fluxo visual de activateSession()

Fluxo de sessão

pay()

CampoValor
TipoObrigatório

Se initialize() e activateSession() não foram chamados antes, pay() pode disparar os eventos desses fluxos durante o pagamento. Quando isso acontece com a tela do SDK já aberta, você também recebe os eventos com sufixo InPayment.

Eventos de ativação durante o pagamento

Eventos de ativação durante o pagamento
  • zoopActivationInPaymentStarted (se aplicável)
  • zoopActivationInPaymentSucceeded ou zoopActivationInPaymentFailed (se aplicável)
  • zoopActivationInPaymentFinished (se aplicável)
  • kernelActivationInPaymentStarted (se aplicável)
  • kernelActivationInPaymentSucceeded ou kernelActivationInPaymentFailed (se aplicável)
  • kernelActivationInPaymentFinished (se aplicável)
  • sessionActivationInPaymentStarted
  • sessionActivationInPaymentSucceeded ou sessionActivationInPaymentFailed
  • sessionActivationInPaymentFinished

Eventos do pagamento

Eventos do pagamento
  • paymentProcessStarted
  • kernelUpdateProgress (se aplicável)
  • cardReadingStarted
  • holdCardSteady
  • cardReadingRetry (se aplicável)
  • cardReadingFinished
  • pinInputStarted (se aplicável)
  • pinInputFinished (se aplicável)
  • transactionAborted (se aplicável)
  • authorizingPleaseWait
  • paymentProcessSucceeded ou paymentProcessFailed
  • paymentConfirmationStarted
  • paymentConfirmationSucceeded ou paymentConfirmationFailed
  • paymentConfirmationFinished
  • brandAnimationStarted (se aplicável)
  • brandAnimationSucceeded ou brandAnimationFailed (se aplicável)
  • brandAnimationFinished (se aplicável)
  • closeBuiltInScreen
  • paymentProcessFinished

Fluxo visual de pay()

Fluxo de pagamento

Notas importantes

Ordem de chamada

setConfig() deve ser chamado primeiro. Esse método não dispara eventos.

Métodos opcionais

initialize() e activateSession() são opcionais. Se eles não forem concluídos antes de pay(), os eventos desses fluxos podem aparecer durante o pagamento. Nesse cenário, você pode receber o evento padrão e também sua versão com sufixo InPayment.

Comportamento de pay()

pay() sempre dispara os eventos de pagamento. Se os métodos anteriores já foram concluídos, você recebe apenas os eventos de pagamento e de criação de sessão. Se não foram, você recebe eventos de ativação e pagamento no mesmo fluxo.

Falhas podem alterar a ordem esperada

Eventos como transactionAborted, terminalActivationFailed e outros eventos de erro podem acontecer fora da ordem listada, dependendo do ponto em que a falha ocorreu. Por exemplo: se paymentProcessFailed for emitido, não haverá eventos de confirmação; apenas closeBuiltInScreen e paymentProcessFinished.

Sessão durante o pagamento

A criação de sessão pode acontecer durante pay() mesmo que activateSession() já tenha sido chamado antes. Em alguns casos, o SDK já terá uma instância pronta e a resposta será imediata.

Legenda dos fluxos

CorSignificado
⬛ PretoAção que vai acontecer
🟨 AmareloEvento disparado
🟥 VermelhoEvento de falha
🟩 VerdeEvento de sucesso
🟦 AzulCondicional de outro evento ou funcionalidade