Android
Kotlin, Jetpack Compose o Views. Se instala con Gradle.
iOS
Swift, SwiftUI o UIKit. Se instala con Swift Package Manager.
Cómo funciona
- Tu app llama a
Tapipay.present(...)(o muestra elTapipayButtondel SDK) con el identificador del usuario y el de tu empresa. - El SDK abre el widget de TapiPay en una pantalla nativa, encima de tu app.
- Mientras el usuario paga o administra sus adhesiones, el SDK te entrega eventos en un callback.
- Tu app cierra el widget cuando lo necesita, o el usuario lo cierra con el botón Cerrar o el gesto atrás.
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 elsettings.gradle.kts de tu proyecto:
settings.gradle.kts
2. Agrega la dependencia
En elbuild.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.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 aTapipay.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:
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:
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
Activityen el callback. El SDK retiene el callback mientras el widget está abierto. Reenvía los eventos a unViewModelo revisa elLifecycleantes 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:- Xcode
- Package.swift
- Abre File → Add Package Dependencies…
- Pega la URL del repositorio.
- En Dependency Rule, elige Up to Next Minor Version desde
0.1.0. - Agrega el producto
Tapipayal target de tu app.
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).Info.plist.
2. Abre el widget
Tapipay.present() presenta el widget de forma modal sobre la pantalla visible. Llámalo desde el hilo principal:
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:
.failed. Si pasas onClick, el botón no abre el widget y te delega el toque.
Opciones de TapipayConfig en iOS
Eventos en iOS
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
Conview = 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.
- Android
- iOS
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 enlacestel:, 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.

