3.4.3
Link para download do xcframework para adição manual do sdk
Release Notes
Principais alterações
App de integração atualizado com a versão 3.4.3: O nosso app de integração foi atualizado com as novas possibilidades de uso, com chamadas assíncronas aos métodos de inicialização e sessão antes do pagamento, facilitando o entendimento do uso do SDK.
Novos eventos: Novos eventos para os fluxos de ativação, criação de sessão e kernel, além de eventos descrevendo também quando esses fluxos ocorrem durante a inicialização automática no pagamento.
Termos e condições sem inicialização: Agora é possível chamar o método
TapOnPhone.processTermsAndConditionssem chamada prévia aoTapOnPhone.initialize().Fluxo assíncrono melhorado: Agora é possível chamar a inicialização, a sessão e pagamento sem aguardar a resposta, e todo o fluxo vai ser encadeado para processar, não exigindo a espera em cada chamada. É possível verificar exemplos no app sample disponível aqui
Correção de bug: Bug no envio de eventos onde o evento de inicio de animação de bandeira (.brandAnimationStarted) era disparado mesmo quando não existia animação a ser tocada (bandeira diferente de visa e elo)
Novos eventos
Foram adicionados os novos eventos conforme abaixo: Para maiores detalhes sobre os eventos, confira a documentação específica dos eventos aqui
enum ApplicationEvent {
// ....
// Esses eventos complementam eventos que já existiam:
case terminalActivationSucceeded
case terminalActivationFailed
case zoopActivationFinished
case kernelActivationFinished
case sessionActivationFinished
case paymentConfirmationFinished
case brandAnimationSucceeded
// Esses evento são similares aos que já existem, mas são chamados quando algum dos processos está sendo processado durante o fluxo do pagamento:
case zoopActivationInPaymentStarted
case zoopActivationInPaymentSucceeded
case zoopActivationInPaymentFailed
case zoopActivationInPaymentFinished
case kernelActivationInPaymentStarted
case kernelActivationInPaymentSucceeded
case kernelActivationInPaymentFailed
case kernelActivationInPaymentFinished
case sessionActivationInPaymentStarted
case sessionActivationInPaymentSucceeded
case sessionActivationInPaymentFailed
case sessionActivationInPaymentFinished
// ...
}Fluxo assíncrono
Nessa versão, caso você chame o método TapOnPhone.initialize() e TapOnPhone.pay(), o SDK vai, automaticamente, iniciar o pagamento e aguardar a finalização da inicialização, não sendo necessário a gestão do lado do app integrador.
O primeiro passo, continua sendo chamar o método TapOnPhone.setConfig() apenas uma vez. (não chamar novamente).
Após o TapOnPhone.setConfig(), agora é possível utilizar o SDK de 3 maneiras:
- Diretamente o método
TapOnPhone.pay()- Nesse formato, o SDK lidará internamente com a inicialização e a sessão.
Exemplo:
TapOnPhone.pay(
payRequest: PaymentRequest(
amount: amount,
paymentType: paymentType,
installments: installments,
metadata: metadata
),
onSuccess: { success in
isLoadingPayment = false
paySuccess = success
},
onError: { error in
print("error \(error)")
isLoadingPayment = false
if error.type == .payment {
payError = error.error as? PaymentErrorResponse
} else {
initializeError = error.error as? TapOnPhoneError
}
},
onEvent: { event in
print(event)
}
)Dica
Os próximos dois tipos de processamento, podem ser chamados por exemplo, na hora que o cliente estiver digitando o valor, e pode seguir pra venda normalmente, ao chamar o pay, o sdk se resolve automaticamente.
- Chamar o
TapOnPhone.initialize()e, sem espera, o métodoTapOnPhone.pay().- Nesse formato, o SDK vai subir a tela do pagamento e aguardar a execução da inicialização, e então automaticamente iniciar o pagamento.
Exemplo:
// Nesse caso, caso a inicializalação falhe, você pode capturar o erro, mas se não for desejado, pode seguir com a venda, e, durante a venda, vai dar erro ao tentar inicializar.
TapOnPhone.initialize(
onSuccess: { },
onError: { _ in },
onEvent: { event in print(event) }
)
TapOnPhone.pay(
payRequest: PaymentRequest(
amount: amount,
paymentType: paymentType,
installments: installments,
metadata: metadata
),
onSuccess: { success in
isLoadingPayment = false
paySuccess = success
},
onError: { error in
print("error \(error)")
isLoadingPayment = false
if error.type == .payment {
payError = error.error as? PaymentErrorResponse
} else {
initializeError = error.error as? TapOnPhoneError
}
},
onEvent: { event in
print(event)
}
)- Chamar o
TapOnPhone.initialize(), sem esperar, o métodoTapOnPhone.activateSession()e ainda sem espera, o métodoTapOnPhone.pay().- Nesse formato, o SDK ao iniciar o pagamento vai subir a tela, e, caso ainda esteja lidando com a inicialização, vai informar na tela, caso tenha terminado a inicialização, seguirá para o pagamento.
Exemplo:
// Nesse caso, caso a inicializalação ou a sessão falhe, você pode capturar o erro, mas se não for desejado, pode seguir com a venda, e, durante a venda, vai dar erro ao tentar inicializar.
TapOnPhone.initialize(
onSuccess: { },
onError: { _ in },
onEvent: { event in print(event) }
)
TapOnPhone.activateSession(
onSuccess: { _ in },
onError: { _ in },
onEvent: { event in print(event) }
)
TapOnPhone.pay(
payRequest: PaymentRequest(
amount: amount,
paymentType: paymentType,
installments: installments,
metadata: metadata
),
onSuccess: { success in
isLoadingPayment = false
paySuccess = success
},
onError: { error in
print("error \(error)")
isLoadingPayment = false
if error.type == .payment {
payError = error.error as? PaymentErrorResponse
} else {
initializeError = error.error as? TapOnPhoneError
}
},
onEvent: { event in
print(event)
}
)