3.2.2


Link para download do xcframework para adição manual do sdk

Release Notes

Principais alterações

  • Compatibilidade: Redução da versão mínima do iOS para compilação e import do projeto para iOS 15. Os métodos só podem ser chamados a partir do iOS 16.4.

  • Novos eventos: Eventos para notificar quando a tela de animação da bandeira é exibida, falha, e fim da exibição. Podendo ser verificado aqui.

  • Correção de erros: Durante o uso do SDK, caso algum método seja chamado sem antes ter sido chamado o método TapOnPhone.setConfig, o usuário receberá um objeto ErrorResponse do tipo initialize, que terá um TapOnPhoneError.setConfigNotCalled.

  • Otimização no pacote: Remoção de símbolos de teste do pacote final, deixando o binário mais leve, mais limpo, mais seguro e garante que o cliente final não rode código/instrumentação que só faz sentido durante testes.

Compatibilidade

Em um aplicativo cuja versão mínima de iOS seja 15, por exemplo, será necessário validar em código a versão para uso, conforme abaixo:

Target iOS 15 sem validaçãoTarget iOS 15 com validação
sem validação sem validaçãocom validação com validação

Caso seja iOS 16.4 ou superior, não é necessário, conforme abaixo:

Target mínimo iOS 16.4
iOS 16.4 iOS 16.4

Novos eventos

Os eventos de animação de bandeira serão enviados sempre que o SDK exibir a tela ao fim de uma transação de sucesso, nos casos de transações visa/elo

enum ApplicationEvent {
    //... outros eventos disponíveis na página de eventos
    case brandAnimationStarted // Inicio da exibição da tela de animação da bandeira
    case brandAnimationFailed // Falha na exibição da tela de animação da bandeira
    case brandAnimationFinished // Animação de bandeira encerrada
}

Correção de erros

Caso algum método do SDK seja chamado sem ter sido chamado pela primeira vez o método TapOnPhone.setConfig(), o usuário receberá um erro, conforme exemplo abaixo:

Exemplo no pagamento
TapOnPhone.pay(
    payRequest: PaymentRequest(
        amount: 1000, // R$ 10,00
        paymentType: TapOnPhonePaymentType.credit,
        installments: 2,
        metadata: """
            {
                "clientId": "1234",
                "name": "John Doe"        
            }
        """
    ),
    onSuccess: { [weak self] result in
        guard let self else { return }

        print("Payment approved! id: \(result.transactionId)")
    },
    onError: { [weak self] transactionError in
        guard let self else { return }
        
        if transactionError.type == .payment {
          let error = transactionError.error as! PaymentErrorResponse
          print("Payment denied - id: ", error.transactionId ?? "unknown")
          print("code: ", error.error.code.rawValue)
          print("name: ", error.error.code.description)
          print("message: ", error.error.message)
        } else {
            // Aqui virá o erro setConfigNotCalled
          error.error as! TapOnPhoneError
          print("SDK start error - code: ", error.code.rawValue)
          print("name: ", error.code.description)
          print("message: ", error.message)
        }
    },
    onEvent: { ApplicationEvent in
        print("ApplicationEvent: \(ApplicationEvent)")
    }
)

 TapOnPhoneError(
        code: .setConfigNotCalled,
        source: .sdk,
        message: "Set Config method wasn't called, credentials not provided.",
        description: description,
        readerIdentifier: readerId,
        timestamp: Double.getTimestamp()
    )

Exemplo na inicialização

TapOnPhone.initialize(
    onSuccess: { [weak self] in
        guard let self else { return }

        print("Success Initialize SDK!")
    },
    onError: { [weak self] error in
        // Aqui virá o erro setConfigNotCalled
        guard let self else { return }
        let initError = error.error as! TapOnPhoneError
        
        print("SDK start error - code: ", initError.code.rawValue)
        print("name: ", initError.code.description)
        print("message: ", initError.message)
    },
    onEvent: { ApplicationEvent in
        print("ApplicationEvent: \(ApplicationEvent)")
    }
)

Exemplo:

Erro durante inicialização
init init

Tabelas de erros De - Para

Removidos ou modificados
SDK AntigoSDK 3.2.2
CódigoNomeDescriçãoCódigoNomeDescriçãoNovo evento
6001deviceReadySuccessO dispositivo está pronto para usar o Tap to PayRemovidoterminalActivationFinished
6002apiAuthenticationSuccessAtivação na zoop com sucessoRemovidozoopActivationSucceeded
6003deinitSuccessSDK foi encerradoRemovidoNão aplicável
6004appleAccountLinkSuccessConta apple foi vinculadaRemovidoNão aplicável
6005sessionPrepareSuccessSessão foi criadaRemovidoNão aplicável
6006transactionSuccessSucesso na transaçãoRemovidopaymentProcessSucceeded
6007paymentTypeChangeSuccessMudança de tipo de pagamentoRemovidoNão aplicável
6013appleAccountLinkErrorFalha no vínculo de conta appleRemovidoNão aplicável
6014sdkNotInitializedErrorSDK não inicializadoRemovidoNão aplicável
6015transactionErrorFalha na transaçãoRemovidopaymentProcessFailed
6045operationTimedOutTempo expirouRemovidoNão aplicável
6068paymentTypeChangeFailedFalha ao trocar o tipo de pagamentoRemovidoNão aplicável
6070readerInitializationStartedIniciando leitorRemovidoNão aplicável
6071readerUpdatingAtualizando leitorRemovidoNão aplicável
6073readerReadyForTapLeitor pronto para o cartãoRemovidocardReadingStarted
6074readerCardDetectedCartão detectadoRemovidoholdCardSteady
6075readerRemoveCardAfastar o cartãoRemovidoNão aplicável
6076readerReadCompletedLeitura concluídaRemovidocardReadingFinished
6077readerReadRetryLendo cartão novamenteRemovidocardReadingRetry
6078readerReadCancelledLeitura canceladaRemovidotransactionAborted
6079readerReadNotCompletedLeitura canceladaRemovidoNão aplicável
6080readerPinEntryRequestedPin solicitadoRemovidopinInputStarted
6081readerPinEntryCompletedCaptura de PIN finalizadaRemovidopinInputFinished
6082readerUserInterfaceDismissedTela do apple removidaRemovidoNão aplicável
6084readerInitializationEndedInicialização do leitor finalizadaRemovidoNão aplicável
6085sessionWillRestartSessão será reiniciadaRemovidoNão aplicável
6086sessionStartedSessão iniciadaRemovidoNão aplicável
6087sessionEndedSessão finalizadaRemovidoNão aplicável
6088readCardDataDados lidosRemovidoNão aplicável
6089changingPaymentTypeMudando tipo de pagamentoRemovidoNão aplicável
Erros adicionados
SDK 3.2.2SDK Antigo
CódigoNomeDescriçãoCódigoNomeDescrição
6092apiRequestTimedOutTempo excedido durante requisição à ZoopNão existia
6093invalidPaymentTokenToken inválido para pagamentoNão existia
6094animationFailedFalha na apresentação da animação da bandeiraNão existia
6095cardReadExtractionFailedFalha na extração de dados do cartãoNão existia
6096expiredCardCartão vencidoNão existia
6097invalidCardCartão inválidoNão existia
6098invalidExternalSellerDataDados externos inválidosNão existia
6099setConfigNotCalledMétodo de configuração não foi chamado, não é possível usar o SDK.Não existia
6100operationInProgressJá existe uma operação em andamentoNão existia
6101inactiveCardO cartão utilizado está desabilitado.Não existia
6102internalErrorErro interno do SDKNão existia
6103contentNotFoundO conteúdo do onboarding Apple não foi encontrado.Não existia
6104contentDisplayFailedO conteúdo do onboarding Apple não pôde ser exibido.Não existia
6105systemBusyO sistema está ocupado.Não existia
6106unknownErro Apple não conhecido.Não existia