Saltar al contenido principal
El SDK nativo de TapiPay abre el widget de pago dentro de tu app de Android o iOS, en una pantalla propia del SDK, y te avisa por eventos qué está haciendo el usuario. Es el equivalente móvil del SDK de medios de pago: monta las mismas vistas (pagos y gestión de adhesiones) y usa los mismos datos para identificar a tu empresa y a tu usuario.

Android

Kotlin, Jetpack Compose o Views. Se instala con Gradle.

iOS

Swift, SwiftUI o UIKit. Se instala con Swift Package Manager.

Cómo funciona

  1. Tu app llama a Tapipay.present(...) (o muestra el TapipayButton del SDK) con el identificador del usuario y el de tu empresa.
  2. El SDK abre el widget de TapiPay en una pantalla nativa, encima de tu app.
  3. Mientras el usuario paga o administra sus adhesiones, el SDK te entrega eventos en un callback.
  4. Tu app cierra el widget cuando lo necesita, o el usuario lo cierra con el botón Cerrar o el gesto atrás.
Ningún evento del SDK confirma un pago. Cuando llega PaymentSubmitted (Android) o .paymentSubmitted (iOS), el usuario envió el pago, pero todavía no está acreditado. El estado real llega a tu backend por la notificación de pago.

Requisitos

En los dos casos necesitas:
  • El identificador de tu usuario final (identifier), el mismo que envías al crear la deuda.
  • El alias de tu empresa (organization) o tu código de empresa (companyCode). Funcionan igual que en el SDK web: ver Identifica tu empresa.

Android

1. Agrega el repositorio de TapiPay

El SDK se distribuye por un repositorio Maven propio de TapiPay. Agrégalo en el settings.gradle.kts de tu proyecto:
settings.gradle.kts

2. Agrega la dependencia

En el build.gradle.kts del módulo de tu app:
build.gradle.kts
El artefacto se llama button por compatibilidad, pero incluye el SDK completo: la pantalla del widget, los eventos y el botón opcional.
No necesitas tocar tu AndroidManifest.xml: el SDK ya declara el permiso INTERNET y su propia pantalla. Tampoco necesitas reglas de ProGuard o R8: el SDK trae las suyas. El SDK incluye Jetpack Compose y Material 3 como dependencias. Si tu app usa Views (XML), igual puedes abrir el widget con Tapipay.present(); solo TapipayButton requiere Compose.

3. Abre el widget

Llama a Tapipay.present() desde cualquier Context (idealmente una Activity):
present() lanza IllegalArgumentException si la configuración es inválida: falta identifier, no pasas organization ni companyCode, o usas selectionStrategy con la vista de adhesiones. El callback de eventos siempre se invoca en el hilo principal.

4. Cierra el widget

El widget no se cierra solo después de un pago. Ciérralo tú cuando lo necesites:
dismiss() no emite ningún evento (tú ya sabes que lo cerraste) y no hace nada si no hay un widget abierto. Puedes llamarlo desde cualquier hilo.

Botón de Compose (opcional)

Si tu app usa Jetpack Compose, TapipayButton muestra un botón de Material 3 que abre el widget al tocarlo:
Toma los colores y la tipografía de tu MaterialTheme. Si pasas onClick, el botón no abre el widget y te delega el toque.

Opciones de TapipayConfig

Eventos en Android

TapipayEvent es una sealed interface:
Incluye siempre una rama else -> en tu when. En versiones nuevas del SDK pueden sumarse eventos: sin else, tu código deja de compilar o ignora el evento sin aviso. Kotlin puede marcar el else como redundante; déjalo igual.

Apariencia en Android

TapipayAppearance configura la barra superior nativa que envuelve al widget. Si no pasas nada, usa los colores de tu MaterialTheme. También puedes redefinir los textos por default en tu app con los recursos tapipay_button_text, tapipay_checkout_title, tapipay_checkout_close y tapipay_checkout_load_failed.

Buenas prácticas en Android

  • Un widget a la vez. Si llamas present() con un widget ya abierto (por ejemplo, por un doble toque), la llamada se ignora.
  • No captures la Activity en el callback. El SDK retiene el callback mientras el widget está abierto. Reenvía los eventos a un ViewModel o revisa el Lifecycle antes de tocar la UI.
  • Rotación y modo oscuro no recrean la pantalla del widget. Si Android destruye la pantalla por falta de memoria, el widget se recarga y el usuario tiene que volver a cargar los datos del formulario.

iOS

1. Agrega el paquete

El SDK se distribuye por Swift Package Manager desde este repositorio:
  1. Abre File → Add Package Dependencies…
  2. Pega la URL del repositorio.
  3. En Dependency Rule, elige Up to Next Minor Version desde 0.1.0.
  4. Agrega el producto Tapipay al target de tu app.
Xcode embebe el framework sin pasos extra.
Mientras el SDK esté en versiones 0.x, usa Up to Next Minor Version (.upToNextMinor): recibes las correcciones (0.1.x) sin que una versión 0.2.0 cambie tu build sin aviso. El SDK solo se distribuye por Swift Package Manager (no hay CocoaPods ni Carthage).
No necesitas agregar permisos ni claves en tu Info.plist.

2. Abre el widget

Tapipay.present() presenta el widget de forma modal sobre la pantalla visible. Llámalo desde el hilo principal:
Por default el SDK presenta el widget desde la pantalla visible de tu app. Si quieres elegir desde dónde se presenta, pasa el parámetro from: con tu UIViewController.

3. Cierra el widget

El widget no se cierra solo después de un pago. Ciérralo tú cuando lo necesites:
dismiss() no emite .closed (tú ya sabes que lo cerraste) y no hace nada si no hay un widget abierto.

Botón de SwiftUI (opcional)

TapipayButton es un botón de SwiftUI que abre el widget al tocarlo:
Si la configuración es inválida, el botón no lanza un error: te lo entrega como evento .failed. Si pasas onClick, el botón no abre el widget y te delega el toque.

Opciones de TapipayConfig en iOS

Eventos en iOS

Incluye siempre @unknown default en tu switch. En versiones nuevas del SDK pueden sumarse eventos: sin @unknown default, si llega un evento que tu app no conoce, la app se cierra con un error.

Errores de configuración

Tapipay.present() valida la configuración antes de abrir el widget y lanza un TapipayError:

Apariencia en iOS

Gestión de adhesiones

Con view = TapipayView.AUTOPAY (Android) o view: .autopay (iOS), el SDK monta la gestión de adhesiones: tu usuario ve sus medios adheridos, adhiere uno nuevo o desadhiere uno existente.
Igual que en web, los eventos de adhesiones solo exponen el tipo de medio, los últimos 4 dígitos y un id opaco. Nunca viajan datos del titular ni el número de cuenta o tarjeta completos.

Entorno de homologación

Usa homologación mientras desarrollas y pruebas tu integración, y quita el parámetro (o usa producción) antes de publicar tu app.

Después del pago

El widget no se cierra solo cuando el usuario envía el pago: muestra una pantalla de “pago enviado” y queda abierto hasta que alguien lo cierre.

Enlaces externos

El widget siempre se abre dentro de tu app. Si el usuario toca un enlace a otro sitio, se abre en el navegador; los enlaces tel:, mailto: o a otras apps se abren con la app correspondiente del sistema.

Próximamente

Canal bidireccional entre tu app y el SDK. Estamos desarrollando un canal de comunicación en los dos sentidos entre tu app y el SDK. Con él vamos a sumar nuevas funcionalidades a los SDK de TapiPay. Te avisaremos en las Novedades cuando esté disponible.