# Recopila las direcciones físicas y los números de teléfono Descubre cómo recopilar las direcciones y los números de teléfono de los clientes en tu aplicación móvil con el Address Element. # Android Para cobrar direcciones completas para facturaciones o envíos, usa el [Address Element](https://docs.stripe.com/payments/mobile/address-element.md) en SwiftUI. También puedes usar el Address Element para: - Recopila los [números de teléfono de los clientes](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet.addresselement/-address-launcher/-additional-fields-configuration/index.html) - Habilita la [función de autocompletar](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet.addresselement/-address-launcher/-configuration/index.html) - Rellena automáticamente los datos de facturación en el Payment Element introduciendo una dirección de envío Stripe combina la información recopilada sobre la dirección y el método de pago para crear un *PaymentIntent* (API object that represents your intent to collect payment from a customer, tracking charge attempts and payment state changes throughout the process). ![Ejemplos de un proceso de compra en el que un usuario selecciona la opción «Añade una dirección de envío». Luego, se le redirigirá a una nueva pantalla para que añada su dirección de envío en un formulario (a medida que escribe su dirección, verá sugerencias de autocompletar).](https://b.stripecdn.com/docs-statics-srv/assets/android-overview.6061212dc737aa700b79242cb5f77782.png) ## Configura Stripe [Lado del servidor] [Lado del cliente] Primero, necesitas una cuenta de Stripe. [Regístrate ahora](https://dashboard.stripe.com/register). El [SDK para Android de Stripe](https://github.com/stripe/stripe-android) es de código abierto y está [completamente documentado](https://stripe.dev/stripe-android/). Para instalar el SDK, añade `stripe-android` al bloque `dependencies` de tu archivo [app/build.gradle](https://developer.android.com/studio/build/dependencies): #### Kotlin ```kotlin plugins { id("com.android.application") } android { ... } dependencies { // ... // Stripe Android SDK implementation("com.stripe:stripe-android:23.11.1") // Include the financial connections SDK to support US bank account as a payment method implementation("com.stripe:financial-connections:23.11.1") } ``` > Para conocer detalles de la última versión y de versiones anteriores del SDK, consulta la página [Versiones](https://github.com/stripe/stripe-android/releases) de GitHub. Para recibir una notificación cuando se publique una nueva versión, [mira las versiones del repositorio](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/configuring-notifications#configuring-your-watch-settings-for-an-individual-repository). Configura el SDK con tu [clave publicable](https://dashboard.stripe.com/apikeys) de Stripe para que pueda hacer solicitudes a la API de Stripe, así como en tu subclase `Application`: #### Kotlin ```kotlin import com.stripe.android.PaymentConfiguration class MyApp : Application() { override fun onCreate() { super.onCreate() PaymentConfiguration.init( applicationContext, "<>" ) } } ``` > Usa las [claves de prueba](https://docs.stripe.com/keys.md#obtain-api-keys) durante las pruebas y las tareas de desarrollo, y las claves del [modo activo](https://docs.stripe.com/keys.md#test-live-modes) cuando publiques tu aplicación. ## Configura sugerencias para autocompletar la dirección El elemento dirección utiliza el [SDK de Google Places](https://developers.google.com/maps/documentation/places/android-sdk/overview) para obtener sugerencias de autocompletado de direcciones. Para habilitar las sugerencias de autocompletado, debes incluir la dependencia del SDK de Google Places en el archivo `build.gradle` de tu aplicación. #### Groovy ```groovy dependencies { implementation 'com.google.android.libraries.places:places:2.6.0' } ``` Las sugerencias para autocompletar direcciones requieren una clave API de Google Places. Sigue la [guía de configuración del SDK de Google Places](https://developers.google.com/maps/documentation/places/android-sdk/cloud-setup) para generar tu clave API. ## Configura el Address Element Puedes configurar el Address Element con detalles como la visualización de los valores predeterminados, la configuración de los países permitidos, la personalización de la apariencia, etc. Consulta [AddressLauncher.Configuration](https://github.com/stripe/stripe-android/blob/master/paymentsheet/src/main/java/com/stripe/android/paymentsheet/addresselement/AddressLauncher.kt#L72) para obtener la lista completa de opciones de configuración. ```kotlin val addressConfiguration = AddressLauncher.Configuration( additionalFields: AddressLauncher.AdditionalFieldsConfiguration( phone: AdditionalFieldsConfiguration.FieldConfiguration.Required ), allowedCountries: setOf("US", "CA", "GB"), title: "Shipping Address", googlePlacesApiKey = "(optional) YOUR KEY HERE" ) ``` ## Recupera los datos de la dirección Recupera los datos de la dirección creando una instancia de `AddressLauncher` en el método de ciclo de vida `onCreate` de tu `Activity` o `Fragment` y creando un método de devolución de llamada que implemente la interfaz `AddressLauncherResultCallback`. ```kotlin private lateinit var addressLauncher: AddressLauncher private var shippingDetails: AddressDetails? = null override fun onCreate(savedInstanceState: Bundle?) { addressLauncher = AddressLauncher(this, ::onAddressLauncherResult) } private fun onAddressLauncherResult(result: AddressLauncherResult) { // TODO: Handle result and update your UI when (result) { is AddressLauncherResult.Succeeded -> { shippingDetails = result.address } is AddressLauncherResult.Canceled -> { // TODO: Handle cancel } } } ``` El `AddressLauncherResult` puede ser `Succeeded` o `Canceled`. Consulta más [detalles de implementación](https://github.com/stripe/stripe-android/blob/master/paymentsheet/src/main/java/com/stripe/android/paymentsheet/addresselement/AddressLauncherResult.kt). > Stripe requiere que crees una instancia del `AddressLauncher` durante el evento del ciclo de vida `onCreate` y no después. De lo contrario, la devolución de llamada no se puede registrar correctamente y la aplicación se bloqueará. ## Presenta el Address Element Presenta el Address Element con el lanzador de direcciones y la configuración de los pasos anteriores. ```kotlin addressLauncher.present( publishableKey = publishableKey, configuration = addressConfiguration ) ``` ## Optional: Rellena automáticamente las direcciones de envío en el Payment Element Si usas el Payment Element en el móvil, indica los [PaymentSheet.Configuration.shippingDetails](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-configuration/index.html) en la dirección del elemento dirección. Cuando se cubren los `shippingDetails`, se indica previamente la dirección de facturación de los usuarios y se ve una casilla de verificación **La dirección de facturación es la misma que la de envío**. Los pagos confirmados con los `shippingDetails` cubiertos también tienen la propiedad intento de [envío](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-shipping) cubierta cuando se confirma el PaymentIntent ```kotlin val configuration = PaymentSheet.Configuration.Builder("Example, Inc.") // ... .shippingDetails(shippingDetails) .build() ``` ## Optional: Personaliza el diseño Ahora que has añadido el Address Element a tu aplicación, puedes personalizar la apariencia para que se adapte al diseño del resto de tu aplicación. Puedes configurar la apariencia con la [API Appearance](https://docs.stripe.com/elements/appearance-api/mobile.md?platform=android) con [AddressLauncher.Configuration.appearance](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet.addresselement/-address-launcher/-configuration/index.html). ## Optional: Establece datos de facturación predeterminados Para establecer los valores predeterminados para los datos de facturación recopilados en la hoja de pago, configura la propiedad `defaultBillingDetails`. Los campos de la `PaymentSheet` se rellenan automáticamente con los valores que proporcionas. #### Kotlin ```kotlin val address = PaymentSheet.Address(country = "US") val billingDetails = PaymentSheet.BillingDetails( address = address, email = "foo@bar.com" ) val configuration = PaymentSheet.Configuration.Builder(merchantDisplayName = "Merchant, Inc.") .defaultBillingDetails(billingDetails) .build() ``` ## Optional: Personalizar la recopilación de datos de facturación ### Configura la recopilación de los datos de facturación Utiliza `BillingDetailsCollectionConfiguration` para especificar cómo quieres recoger los detalles de facturación en el PaymentSheet. Puedes recopilar el nombre, el correo electrónico, el número de teléfono y la dirección del cliente. Si quieres adjuntar datos de facturación predeterminados al objeto PaymentMethod aun cuando esos campos no se recopilen en la interfaz de usuario, establece `billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod` en `true`. #### Kotlin ```kotlin val billingDetails = PaymentSheet.BillingDetails( email = "foo@bar.com" ) val billingDetailsCollectionConfiguration = BillingDetailsCollectionConfiguration( attachDefaultsToPaymentMethod = true, name = BillingDetailsCollectionConfiguration.CollectionMode.Always, email = BillingDetailsCollectionConfiguration.CollectionMode.Never, address = BillingDetailsCollectionConfiguration.AddressCollectionMode.Full, ) val configuration = PaymentSheet.Configuration.Builder(merchantDisplayName = "Merchant, Inc.") .defaultBillingDetails(billingDetails) .billingDetailsCollectionConfiguration(billingDetailsCollectionConfiguration) .build() ``` > Consulta a tu asesor legal sobre las leyes que se aplican a la recopilación de información. Recopila los números de teléfono solo si los necesitas para la transacción.