> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Aprenda a añadir protección y detección de bots a su aplicación nativa que usa Auth0.Swift, Auth0.Android, Lock.Swift y Lock.Android.

# Añadir detección de bots a aplicaciones nativas

Puede añadir [detección de bots](/es/docs/secure/attack-protection/bot-detection) a sus aplicaciones nativas con poca o ninguna configuración adicional, según el SDK y el flujo de autenticación que utilice.

<div id="auth0swift-and-auth0android">
  ## Auth0.swift y Auth0.Android
</div>

Si usas <Tooltip tip="Universal Login: Tu aplicación redirige a Universal Login, alojado en el Servidor de autorización de Auth0, para verificar la identidad de un usuario." cta="Ver glosario" href="/es/docs/glossary?term=Universal+Login">Universal Login</Tooltip>, la <Tooltip tip="Universal Login: Tu aplicación redirige a Universal Login, alojado en el Servidor de autorización de Auth0, para verificar la identidad de un usuario." cta="Ver glosario" href="/es/docs/glossary?term=Bot+Detection">detección de bots</Tooltip> se admite automáticamente en las siguientes versiones del SDK:

* `Auth0.swift` versión 1.28.0+
* `Auth0.Android` versión 1.25.0+

Si no usas Universal Login, la detección de bots es compatible, pero debes configurar tu aplicación según corresponda:

* Tu aplicación debe gestionar la excepción `requires_verification` (que se genera cuando se detecta un intento de inicio de sesión de alto riesgo) y, a continuación, iniciar un flujo de WebAuth para mostrar un paso de verificación con captcha.
* Cuando inicies el flujo de WebAuth, puedes pasar el parámetro `login_hint` para evitar que el usuario tenga que escribir su username de nuevo.

<div id="auth0swift-example">
  ### Ejemplo de Auth0.swift
</div>

Si tu aplicación realiza el inicio de sesión o el registro en base de datos mediante la [Authentication API](https://auth0.com/docs/api/authentication), debes gestionar el error `isVerificationRequired`. Este error indica que la solicitud se marcó como sospechosa y que se requiere un paso de verificación adicional para autenticar al usuario.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Este paso de verificación se realiza a través de la web, por lo que debes usar [Universal Login](/es/docs/authenticate/login/auth0-universal-login) para completarlo.
</Callout>

```swift lines expandable theme={null}
Auth0
    .authentication()
    .login(usernameOrEmail: email, 
           password: password, 
           realmOrConnection: connection, 
           scope: scope)
    .start { result in
        switch result {
        case .success(let credentials): // ...
        case .failure(let error) where error.isVerificationRequired:
            DispatchQueue.main.async {
                Auth0
                    .webAuth()
                    .connection(connection)
                    .scope(scope)
                    .useEphemeralSession()
                    // ☝🏼 De lo contrario, quedará una cookie de sesión
                    .parameters(["login_hint": email])
                    // ☝🏼 Para que el usuario no tenga que volver a escribirlo
                    .start { result in
                        // ...
                    }
            }
        case .failure(let error): // ...
        }
    }
```

En el caso del registro, puedes agregar [un parámetro adicional](/es/docs/authenticate/login/auth0-universal-login) para que el usuario vaya directamente a la página de registro:

`.parameters(["login_hint": email, "screen_hint": "signup"])`

Consulta [Auth0.swift Getting Started](https://github.com/auth0/Auth0.swift#getting-started) para obtener más información sobre cómo configurar Universal Login.

<div id="auth0android-example">
  ### Ejemplo de Auth0.Android
</div>

Si tu aplicación realiza el inicio de sesión o el registro en una base de datos mediante la Authentication API, debes gestionar el error `AuthenticationException#isVerificationRequired()`. Este error indica que la solicitud se marcó como sospechosa y que se requiere un paso de verificación adicional para iniciar sesión como usuario.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Este paso de verificación se realiza en la web, por lo que debes usar [Universal Login](/es/docs/authenticate/login/auth0-universal-login) para completarlo.
</Callout>

```swift lines expandable theme={null}
final String email = "username@domain.com";
final String password = "a secret password";
final String realm = "my-database-connection";

AuthenticationAPIClient authentication = new AuthenticationAPIClient(account);
authentication.login(email, password, realm)
        .start(new BaseCallback<Credentials, AuthenticationException>() {

            @Override
            public void onFailure(AuthenticationException error) {
                if (error.isVerificationRequired()){
                    Map<String, Object> params = new HashMap<>();
                    params.put("login_hint", email); // Para que el usuario no tenga que volver a escribirlo
                    WebAuthProvider.login(account)
                            .withConnection(realm)
                            .withParameters(params)
                            .start(LoginActivity.this, new AuthCallback() {
                                // Es posible que ya tenga definida una instancia de AuthCallback

                                @Override
                                public void onFailure(@NonNull Dialog dialog) {
                                    // Diálogo de error disponible
                                }

                                @Override
                                public void onFailure(AuthenticationException exception) {
                                    // Error
                                }

                                @Override
                                public void onSuccess(@NonNull Credentials credentials) {
                                    // Gestionar el éxito de WebAuth
                                }
                            });
                }
            }

            @Override
            public void onSuccess(Credentials payload) {
                // Gestionar el éxito de la API
            }
        });
```

En el caso del registro, puede agregar [un parámetro adicional](/es/docs/authenticate/login/auth0-universal-login) para que el usuario acceda directamente a la página de registro:

`params.put("screen_hint", "signup");`

Consulte la [documentación del SDK de autenticación de Auth0.Android con Universal Login](https://github.com/auth0/Auth0.Android#authentication-with-universal-login) para obtener más información sobre cómo configurar Universal Login.

<div id="lockswift-and-lockandroid">
  ## Lock.Swift y Lock.Android
</div>

Si utiliza Universal Login, la detección de bots es compatible automáticamente con las siguientes versiones del SDK:

* `Lock.Swift` versión 2.19.0+
* `Lock.Android` versión 2.22.0+

Si no utiliza Universal Login, la detección de bots es compatible, pero debe configurar la aplicación en consecuencia:

* La aplicación debe manejar la excepción `requires_verification` (que se genera cuando se detecta un intento de inicio de sesión de alto riesgo) y, a continuación, activar un flujo de WebAuth para mostrar un paso de verificación con captcha.
* Cuando active el flujo de WebAuth, puede pasar el parámetro `login_hint` para evitar que el usuario tenga que volver a escribir su username.

<div id="authentication-api">
  ## Authentication API
</div>

Si usa la Authentication API directamente, la detección de bots es compatible, pero debe configurar la aplicación en consecuencia:

* La aplicación debe gestionar el error `requires_verification` (que devuelve la Authentication API cuando detecta un intento de inicio de sesión de alto riesgo) y, a continuación, activar un flujo de WebAuth para mostrar un paso de verificación con captcha.

<div id="learn-more">
  ## Más información
</div>

* [Agregar la detección de bots a las páginas de inicio de sesión personalizadas](/es/docs/secure/attack-protection/bot-detection/bot-detection-custom-login-pages)
