# 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: Querying This Documentation

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

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

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

The question should be specific, self-contained, and written in natural language.
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.
