Lite SDK (Enrollment Android)

Esta página fornece um guia para o Lite SDK do Yuno Lite SDK para registro no Android. Esse SDK oferece um processo de integração simplificado com funcionalidade essencial de registro, tornando-o ideal para comerciantes que:

  • Precisa de uma implementação rápida com requisitos mínimos de personalização
  • Deseja se concentrar principalmente no registro de métodos de pagamento
  • Prefira uma interface de usuário pronta para uso que lide com o fluxo de registro

O Lite SDK inclui recursos essenciais como:

  • Componentes de UI de registro pré-criados
  • Processamento de registro de cartões
  • Tratamento básico do status do registro
  • Gerenciamento de erros essenciais

Para os comerciantes que precisam de recursos mais avançados, como vários métodos de pagamento, interface de usuário personalizada ou prevenção avançada contra fraudes, considere usar nosso Full SDK em vez disso.

Requisitos

Antes de iniciar a integração do Yuno Android SDK, certifique-se de que seu projeto atenda aos requisitos técnicos. Além disso, certifique-se de que os seguintes pré-requisitos estejam em vigor:

Etapa 1: Criar um cliente

Crie um cliente no sistema da Yuno usando o Criar endpoint do cliente antes de registrar os métodos de pagamento. Esse endpoint retornará um customer_id que você usará para associar os métodos de pagamento inscritos a um cliente específico.

O endpoint retornará um customer_session que você precisará usar ao chamar os métodos de registro.

Etapa 2: Inclua a biblioteca em seu projeto

Adicione o Lite SDK do Yuno Lite SDK ao seu projeto Android:

Adicionar o repositório

Adicione o repositório Maven do Yuno à configuração do Gradle do seu projeto:

maven { url "https://yunopayments.jfrog.io/artifactory/snapshots-libs-release" }

Inclua o seguinte código no arquivo build.gradle para adicionar a dependência do Yuno SDK ao aplicativo:

dependencies {
    implementation 'com.yuno.payments:android-sdk:{last_version}'
}

Permissões

O SDK do Yuno inclui o INTERNET por padrão, que é necessária para fazer solicitações de rede.

<uses-permission android:name="android.permission.INTERNET" />

Etapa 3: Initialize o SDK com a chave pública

Initialize o SDK:

  1. Obtenha sua chave de API pública no painel do Yuno
  2. Crie uma classe de aplicativo personalizada, caso ainda não o tenha feito
  3. No onCreate() de sua classe de aplicativo, chame o método Yuno.initialize() com sua chave de API:
class CustomApplication : Application() {
  override fun onCreate() {
    super.onCreate()
    Yuno.initialize(
      this,
      PUBLIC_API_KEY,
      config: YunoConfig,
    )
  }
}

Use a classe de dados YunoConfig para personalizar o comportamento do SDK. Inclua essa configuração ao chamar Yuno.initialize(). As opções disponíveis são:

data class YunoConfig(
    val cardFlow: CardFormType = CardFormType.ONE_STEP,
    val saveCardEnabled: Boolean = false,
    val keepLoader: Boolean = false,
    val cardFormDeployed: Boolean = false,
    val language: YunoLanguage? = null,
    val styles: YunoStyles? = null
)

A tabela a seguir descreve cada opção de personalização:

Opção de personalização

Descrição

fluxo de cartões

Essa configuração opcional define o fluxo do cartão de pagamento e de registro. Por padrão, o fluxo CardFormType.ONE_STEP é usada. Consulte a seção Opções de renderização para obter mais informações.

saveCardEnabled

Ativa a caixa de seleção Salvar cartão nos fluxos de cartão. Consulte a seção Salvar cartão para obter mais informações.

keepLoader

Mantenha a tela de carregamento do Yuno até que você crie e continue com o pagamento. Para usar esse recurso, use a função startCompletePaymentFlow()descrito nas próximas seções. Veja a Carregador para obter informações adicionais.

idioma

Define o idioma a ser usado nos formulários de pagamento. Você pode defini-lo como uma das opções de idioma disponíveis:

  • es (espanhol)
  • en (inglês)
  • pt (português)
  • fil (filipino)
  • id (indonésio)
  • ms (malaio)
  • th (tailandês)
  • zh-TW (chinês (tradicional, Taiwan))
  • zh-CN (chinês (simplificado, China))
  • vi (vietnamita)
  • fr (francês)
  • pl (polonês)
  • it (italiano)
  • de (alemão)
  • ru (russo)
  • tr (turco)
  • nl (holandês)
  • sv (sueco)
  • ko (coreano)
  • ja (japonês)

  • pt (Português)

estilos

Permite a personalização da interface do usuário em todo o SDK. Use-o para definir estilos visuais globais, como família de fontes e aparência de botões (cor, preenchimento, raio, tipografia) por meio de um YunoStyles objeto. Para obter mais informações, consulte a seção styles seção.

Você também precisa atualizar seu manifesto para usar seu aplicativo:

<application android:name=".CustomApplication"></application>

Etapa 4: Registre um novo método de pagamento

O processo de registro é um fluxo de duas etapas. Primeiro, initialize o processo para configurar os componentes necessários. Em seguida, inicie o fluxo da interface do usuário para permitir que o usuário registre um método de pagamento.

4.1 Initialize o processo de registro

Ligue para o initEnrollment dentro do método onCreate para preparar seu aplicativo para lidar com o fluxo de registro. Essa é uma etapa de configuração obrigatória exigida pelo sistema operacional Android para registrar o contrato que permite que o SDK envie o status final da inscrição de volta ao seu aplicativo.

fun ComponentActivity.initEnrollment(
   callbackEnrollmentState: ((String?) -> Unit)? = null
)

4.2 Iniciar o fluxo de registro

Ligue para o startEnrollment para iniciar a interface do usuário e começar o registro de um novo método de pagamento. Você pode chamar esse método em qualquer ponto após initEnrollment tiver sido executada, como quando um usuário toca no botão "Inscrever novo método de pagamento".

fun Activity.startEnrollment(
    customerSession: String,
   countryCode: String,
    showEnrollmentStatus: Boolean = true,
   callbackEnrollmentState: ((String?) -> Unit)? = null,
    requestCode: Int
)

A tabela a seguir descreve os startEnrollment parâmetros:

ParâmetroDescrição
customerSessionO cliente da sessão associado ao processo de registro atual.
countryCodeCódigo do país onde o pagamento é realizado. Consulte Cobertura de países para obter uma lista completa dos países compatíveis e seus códigos.
showEnrollmentStatusIndica se o status do registro deve ser mostrado. Esse parâmetro é opcional e o padrão é true.
callbackEnrollmentStateUma função que retorna o estado atual do processo de registro. Esse parâmetro é opcional e o padrão é null. Para registrar esse retorno de chamada, você deve chamar initEnrollment no método onCreate da atividade. Verifique o estados possíveis que pode ser retornado.
requestCodeÉ um parâmetro opcional que você deve informar se for usar o onActivityResult para capturar os estados de registro.

Estado de registro de retorno de chamada

O callbackEnrollmentState é uma função que retorna o status atual do processo de registro. Forneça essa função somente se quiser rastrear o status do registro.

Use o AppCompatActivity.enrollmentStatus() para verificar o estado atual do registro a qualquer momento. Essa função é opcional e aceita os mesmos parâmetros que startEnrollment. O bloco de código a seguir mostra a assinatura da função:

fun AppCompatActivity.enrollmentStatus(
    customerSession: String,
   countryCode: String,
    showEnrollmentStatus: Boolean = false,
   callbackEnrollmentState: ((String?) -> Unit)? = null,
)
📘

Função opcional

Usando a função enrollmentStatus é opcional. Não é um requisito para concluir o processo de inscrição. Saiba mais

🚧

Substituição de retorno de chamada

Se você fornecer um novo retorno de chamada ao chamar a função enrollmentStatusele substituirá o retorno de chamada que você definiu ao chamar a função initEnrollment.

O bloco de código a seguir mostra os possíveis estados:

const val ENROLLMENT_STATE_SUCCEEDED =SUCCEEDED"
const val ENROLLMENT_STATE_FAIL = "FAIL" (Reprovado)
const val ENROLLMENT_STATE_PROCESSING = "PROCESSANDO"
const val ENROLLMENT_STATE_REJECT = "REJECT" (Rejeitado)
const val ENROLLMENT_STATE_INTERNAL_ERROR = "INTERNAL_ERROR"
const val ENROLLMENT_STATE_CANCELED_BY_USER = "CANCELED" (Cancelado pelo usuário)

A tabela a seguir fornece informações adicionais sobre os possíveis estados:

EstadoDescriçãoAção adicional necessária
SUCCEEDEDO processo de registro foi concluído com êxito sem nenhum erro.Não.
FAILA tentativa de registro falhou devido a erros, como problemas de validação de dados, falhas de conexão com o servidor ou problemas técnicos.Sim. Investigue a causa da falha (validação, rede, servidor) e tome medidas corretivas.
PROCESSINGO registro está em andamento, aguardando aprovação ou verificação.Não.
REJECTA inscrição foi rejeitada por motivos como a falta de requisitos ou inconsistências detectadas.Sim. Informe o usuário sobre a rejeição, forneça o motivo, se possível, e sugira as próximas etapas.
INTERNAL_ERROROcorreu um erro interno inesperado no sistema que está lidando com o processo de registro.Sim. Requer intervenção técnica para analisar o sistema, corrigir problemas internos e tentar novamente ou informar o usuário.
CANCELEDO usuário cancelou voluntariamente o processo de inscrição ou saiu antes da conclusão.Não.

Usando o OnActivityResult método

❗️

Método obsoleto

O onActivityResult é uma solução obsoleta. Se você estiver realizando uma nova integração com o Android, a Yuno recomenda usar o método initEnrollment() que segue as práticas recomendadas do Google.

O método onActivityResult é chamado automaticamente quando uma atividade retorna um resultado. Você pode usar essa opção para executar ações sempre que o status do registro for alterado. Siga estas etapas para processar o resultado do registro:

📘

Uso do código de solicitação padrão

Se você estiver usando o onActivityResult mas não informou um método requestCode ao chamar o startEnrollment em Etapa 3, você deve usar o YUNO_ENROLLMENT_REQUEST_CODE fornecido pela Yuno.

  1. Substituir o onActivityResult método. Isso garante que as chamadas de hierarquia sejam respeitadas.
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
}
  1. Verifique se o requestCode corresponde a YUNO_ENROLLMENT_REQUEST_CODE. Como você está executando Yuno em seu aplicativo, você pode importar o YUNO_ENROLLMENT_REQUEST_CODE para usá-lo.
Se (requestCode == YUNO_ENROLLMENT_REQUEST_CODE) {
}
  1. Se o requestCode corresponde, manipule o resultado do registro. Extraia o estado de registro usando a função YUNO_ENROLLMENT_RESULT fornecida pela biblioteca Yuno. Criar um onEnrollmentStateChange para lidar com as alterações de estado.
onEnrollmentStateChange(data?.getStringExtra(YUNO_ENROLLMENT_RESULT))

O bloco de código a seguir mostra um exemplo de código para usar o OnActivityResult para executar funções quando o status do registro for alterado:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == YUNO_ENROLLMENT_REQUEST_CODE) {
        val enrollmentState = data?.getStringExtra(YUNO_ENROLLMENT_RESULT)
        onEnrollmentStateChange(enrollmentState)
    }
}

fun onEnrollmentStateChange(enrollmentState: String?) {
    when (enrollmentState) {
        "SUCCEEDED" -> {
        }
        "FAIL" -> {
        }
    }
}

Etapa 5: Obter o status da inscrição

Ligue para o initEnrollment no método onCreate da atividade para registrar um retorno de chamada para obter o estado final da inscrição.

Recursos complementares

O Yuno Android SDK fornece serviços e configurações adicionais que você pode usar para melhorar a experiência dos clientes. Use a personalização do SDK para alterar a aparência do SDK de acordo com sua marca ou para configurar o carregador.

styles

Com o styles opção de personalização, você pode definir estilos visuais globais por meio de um YunoStyles objeto. Ele permite que você aplique uma marca consistente em todo o SDK, personalizando a aparência e a tipografia do botão.

classe de dados YunoStyles(
    val buttonStyles: YunoButtonStyles? = null,
    val fontFamily: FontFamily? = null
)
ParâmetroDescrição
buttonStylesPersonaliza os botões principais exibidos no SDK.
fontFamilyDefine a família de fontes usada em todos os elementos de texto do SDK.

O YunoButtonStyles permite que você defina configurações específicas para a aparência do botão:

classe de dados YunoButtonStyles(
    val backgroundColor: Color? = null,
    val contentColor: Color? = null,
    val cornerRadius: Dp? = null,
    val elevation: Dp? = null,
    val padding: Dp? = null,
    val fontFamily: FontFamily? = null,
    val fontSize: TextUnit? = null,
    val fontStyle: FontStyle? = null
)

Use o YunoConfig descrita na Etapa 3, para usar a classe de dados styles opção de personalização.

Carregador

A funcionalidade do carregador é controlada por meio do keepLoader no parâmetro YunoConfig que está documentada em linha na seção de configuração do SDK acima.

Opções de renderização

Você pode escolher entre duas opções de renderização de formulário de cartão. As capturas de tela a seguir mostram a diferença entre cardFormType ONE_STEP e STEP_BY_STEP:

Personalização do SDK

Você pode alterar a aparência do SDK para que corresponda à sua marca. Para obter mais informações, consulte a página de personalização do SDK.

📘

Aplicativo de demonstração

Além dos exemplos de código fornecidos, você pode consultar o repositório do Yuno para concluir a implementação dos SDKs do Yuno para Android.

Modo de renderização (registro)

O modo de renderização do Yuno SDK permite integrar o fluxo de registro com controle total da interface do usuário, mantendo a validação e a lógica do SDK. O SDK retorna o Android Fragment que você pode exibir nos layouts Jetpack Compose (via AndroidView) e XML tradicional.

Função principal: startEnrollmentRender

fun Activity.startEnrollmentRender(
    customerSession: String,
   countryCode: String,
    submitButton: Boolean = false,
    coroutineScope: CoroutineScope,
    listener: YunoEnrollmentRenderListener
): YunoEnrollmentFragmentController

Parâmetros

ParâmetroTipoNecessárioDescrição
customerSessionStringSimA sessão do cliente para o processo de registro atual
countryCodeStringSimCódigo do país para configuração regional
submitButtonBooleanNãoSe trueSe o SDK renderizar ações de envio internamente, use sua interface do usuário
coroutineScopeCoroutineScopeSimEscopo usado para executar operações assíncronas vinculadas ao ciclo de vida da atividade
listenerYunoEnrollmentRenderListenerSimOuvinte que recebe eventos de fragmentos, carregamento e status final

Valor de retorno

Retorna um YunoEnrollmentFragmentController para controlar o fluxo de registro (por exemplo, enviar formulários).

Exemplo de uso

class EnrollmentActivity : Activity() {

    private lateinit var fragmentController: YunoEnrollmentFragmentController

    private fun initializeEnrollment() {
        fragmentController = startEnrollmentRender(
            customerSession = "your_customer_session_id",
            countryCode = "US",
            submitButton = false,
            coroutineScope = lifecycleScope,
            listener = enrollmentRenderListener
        )
    }
}

Interface: YunoEnrollmentRenderListener

Implemente essa interface para receber fragmentos e eventos de registro.

interface YunoEnrollmentRenderListener {
    fun showView(fragment: Fragment, needSubmit: Boolean)
    fun returnStatus(resultCode: Int, paymentStatus: String)
    fun loadingListener(isLoading: Boolean)
}

showView(fragment: Fragment, needSubmit: Boolean)

  • Recebe o fragmento a ser exibido no contêiner da interface do usuário
  • needSubmit indica se você deve exibir seu próprio botão de envio (quando submitButton = false)

Exemplo (XML):

override fun showView(fragment: Fragment, needSubmit: Boolean) {
    supportFragmentManager.beginTransaction()
        .replace(R.id.enrollment_container, fragment)
        .commit()

    clientSubmitButton.isVisible = needSubmit
    if (needSubmit) {
        clientSubmitButton.setOnClickListener { fragmentController.submitForm() }
    }
}

returnStatus(resultCode: Int, paymentStatus: String)

  • Evento de status final de inscrição. Use-o para notificar o usuário sobre o sucesso ou fracasso

loadingListener(isLoading: Boolean)

  • Carregamento da chamada de retorno de estado para mostrar/ocultar os spinners e desativar/desabilitar a interface do usuário
override fun loadingListener(isLoading: Boolean) {
    progressBar.isVisible = isLoading
    clientSubmitButton.isEnabled = !isLoading
}

Interface: YunoEnrollmentFragmentController

Devolvido por startEnrollmentRender para controlar o fluxo de registro.

interface YunoEnrollmentFragmentController {
    fun submitForm()
}
val fragmentController = startEnrollmentRender(
    customerSession = "your_customer_session_id",
   countryCode = "US",
    submitButton = false,
    coroutineScope = lifecycleScope,
    listener = enrollmentRenderListener
)
  1. Controle o fluxo (envie quando necessário):
fragmentController.submitForm()

Vantagens do modo de renderização

Flexibilidade da interface do usuário

  • Compatível com Compose (via AndroidView) e XML
  • Controle total sobre onde e como as visualizações são exibidas
  • Fácil de combinar com o sistema de design do seu aplicativo

Controle de fluxo

  • Tempo de envio personalizado usando submitForm()

Considerações importantes

  • Gravata coroutineScope para seu ciclo de vida de atividade/fragmento (por exemplo, lifecycleScope)
  • Quando needSubmit = truerenderize seu próprio botão de envio e chame submitForm()
  • No Compose, coloque o fragmento em um arquivo AndroidView contêiner