> For the complete documentation index, see [llms.txt](https://docs.griaule.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.griaule.com/sdks/es/spidxbutton/spidxbuttonandroid.md).

# Android

SPIDX Button es una biblioteca de Android concebida para integrarse en una aplicación Android. Proporciona una vista de Botón para ser usada en la aplicación y una clase que se comunica con el servidor SPIDX para obtener un Enlace Dinámico y un ID para la transacción definida por un Caso de Uso.

## Requisitos

* Versión mínima de Android

  > Android 8.0 (SDK 26), “Oreo”.
* Entorno de desarrollo

  > Se recomienda usar el IDE Android Studio

## Configuración

Para que la biblioteca funcione correctamente, se necesita la siguiente configuración:

### Importar la librería .aar

* Para importar la librería .aar en su aplicación, se recomienda seguir la [documentación oficial de Android](https://developer.android.com/studio/projects/android-library).

### Permiso de Internet

* El uso del botón SPIDX requiere que la aplicación proporcione conexión a internet. Dentro del `AndroidManifest.xml` archivo, agregue el permiso de acceso a internet:

  ```xml
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  	package="com.griaule.spidxbutton">
  	...
  	<uses-permission android:name="android.permission.INTERNET" />
  	...
  </manifest>
  ```

### Dependencias

* Se requieren algunas dependencias para usar SPIDX Button. Dentro del `build.gradle` archivo, en `:app` ámbito, agregue las siguientes dependencias:

  ```gradle
  dependencies {
  	...
  	implementation 'com.squareup.retrofit2:retrofit:2.9.0'
  	implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
  	implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'
  	implementation 'com.squareup.okhttp3:logging-interceptor:3.13.1'
  }
  ```

## Clases y Métodos

La biblioteca proporciona la Clase `SpidxAuth` que tiene dos parámetros: `apiKey` y `useCaseName`, con dos métodos para recuperar datos de la API de SPIDX. Los métodos se describen a continuación (patrón Kotlin):

* `collection(callback: Callback)`
  * Este método usará `apiKey` y `useCaseName` para recuperar el Enlace Dinámico y el ID de Transacción de la API de SPIDX. La respuesta se describe en la sección siguiente.
* `verification(spidx: String, callback: Callback)`
  * Este método usará `apiKey`, `useCaseName`, y `spidx` para recuperar el Enlace Dinámico y el ID de Transacción de la API de SPIDX. La respuesta se describe en la sección siguiente.

### Respuestas

Estos métodos usan el objeto `callback` que implementa la interfaz `Callback`. Esta interfaz tiene dos métodos:

* `onSuccess(useCaseData: UseCaseData)`
  * Este método se llama cuando la solicitud tiene éxito y devuelve el objeto `useCaseData`, de tipo `UseCaseData`. Este objeto tiene dos campos: `dynamicLink`, que es el enlace dinámico para la transacción, y `transactionID`, que es el id de la transacción.
* `onFailure(useCaseError: UseCaseError)`
  * Este método se llama cuando la solicitud falla y devuelve el objeto `useCaseError`, de tipo `UseCaseError`. Este objeto tiene tres campos: `type`, que es el tipo de error, `code`, que es el código del error, y `message`, que es el mensaje que describe el error.

## Uso

Se recomienda usar la vista de Botón provista junto con la biblioteca SPIDX Button. Con el Enlace Dinámico recibido, es posible crear un *Intent* que llamará a la aplicación SPIDX.

### Agregue el botón en el diseño de su aplicación

* En el diseño de la aplicación, agregue el siguiente código:

  ```xml
  <com.griaule.spidxbutton.views.SpidxButton
   android:id="@+id/spidx_button"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>
  ```

### Configura el listener de clic del botón y llama a la API de SPIDX:

A continuación se muestran algunos ejemplos del uso de las clases y métodos en Kotlin y Java:

* En Kotlin, use:

  ```kotlin
  val spidxButton = findViewById<SpidxButton>(R.id.spidx_btn)
  spidxButton.setOnClickListener {
  	SpidxAuth("apiKey", "useCaseName")
  		.collection(object : Callback {
  			override fun onSuccess(useCaseData: UseCaseData) {
  				// Manejar los datos de éxito devueltos. Por ejemplo, crear un Intent y llamar a startActivity()
  				...
  			}

  			override fun onFailure(useCaseError: UseCaseError) {
  				// Gestiona el error devuelto
  				...
  			}
  		})
  }
  ```
* En Java, use:

  ```java
  SpidxButton spidxButton = findViewById(R.id.spidx_button);
  SpidxAuth spidxAuth = new SpidxAuth("apiKey", "useCaseName");
  spidxButton.setOnClickListener(view -> spidxAuth.collection(new Callback() {
  	@Override
  	public void onSuccess(@NotNull UseCaseData useCaseData) {
  		// Manejar los datos de éxito devueltos. Por ejemplo, crear un Intent y llamar a startActivity()
  		...
  	}

  	@Override
  	public void onFailure(@NotNull UseCaseError useCaseError) {
  		// Gestiona el error devuelto
  		...
  	}
  }));
  ```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.griaule.com/sdks/es/spidxbutton/spidxbuttonandroid.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
