1. Code
  2. Mobile Development
  3. Android Development

Android O: Verificación de número telefónico con tokens vía SMS

Scroll to top

Spanish (Español) translation by Javier Salesi (you can also view the original English article)

En este tutorial, aprenderás sobre la genial nueva característica de token vía SMS en Android O. Sabrás cómo generar un token para una aplicación específica que lanzará un intento pendiente cuando el dispositivo reciba un mensaje que contiene ese token para verificar el número telefónico.

Nota que al momento de escribir este artículo, las APIs de Android O aún están en su tercera previsualización de desarrollador, aunque son finales. (¡Todavía no sabemos lo que significa la O!)

¿Qué es un token vía SMS?

Un token vía SMS o contraseña de una sola vez es un mecanismo de seguridad utilizado para autenticar o verificar a un usuario. El usuario introduce su número telefónico y un token de duración limitada es generado especialmente para ese usuario. El usuario luego recibe el token como un SMS en su teléfono. En el caso de Android O al momento de escribir este artículo, este token para una aplicación específica no expira, pero pierde validez cuando se genera otro.

¿Por qué usar el token vía SMS en Android O?

Una de las mayores razones que podrías considerar para usar el mecanismo de token vía SMS de Android O es que mejora la experiencia de usuario de la aplicación. El usuario no necesita copiar y pegar el token desde el SMS del cliente para ser verificado. En lugar de ello, el dispositivo Android detecta automáticamente el token enviado al dispositivo del usuario y luego desencadena el componente de la aplicación en el intento asociado con tu aplicación (abordaremos eso en breve).

Aún mejor, esta funcionalidad no requiere el permiso READ_SMS o cualquier otro. Este mecanismo también mejora la seguridad del usuario de tu aplicación, porque ninguna otra aplicación puede leer el mensaje que contiene el token en el dispositivo.

En este tutorial, aprenderás cómo usar esta nueva característica en la API SMS de Android O. Descubrirás cómo generar un token vía SMS específicamente para tu aplicación y enviarlo a un dispositivo. Utilizaremos el emulador de Android Studio para simular este proceso.

Requisitos previos

Para seguir este tutorial, asegúrate de que hayas descargado la plataforma Android 8.0 (O) SDK en tu computadora y tengas un emulador ya configurado que apunte a esta versión.

1. Genera el token para una aplicación específica

Para comenzar, te mostraré cómo generar un token para aplicación específica que es único para tu aplicación en el dispositivo del usuario.

Crea un nuevo proyecto en Android Studio

Abre Android Studio y crea un nuevo proyecto con una actividad vacía llamada MainActivity.

Create a new Android Studio projectCreate a new Android Studio projectCreate a new Android Studio project

Modifica el archivo build.gradle

Realiza los siguientes cambios en el archivo build.gradle del módulo de la aplicación.

1
compileSdkVersion 'android-O'
2
minSdkVersion 'o'
3
targetSdkVersion 'o'

Modifica la clase MainActivity

En el fragmento de código observado a continuación, obtenemos la clase SMSManager y luego llamamos al método createAppSpecificSmsToke(). Este hace justo lo que indica, crea el token vía SMS para una aplicación específica. Este método requiere un PendingIntent que contiene la Actividad a ser lanzada cuando un SMS que contiene este token (un string o cadena de 11 caracteres) es recibido por el dispositivo.

1
import android.app.PendingIntent;
2
import android.content.Intent;
3
import android.os.Bundle;
4
import android.support.v7.app.AppCompatActivity;
5
import android.telephony.SmsManager;
6
import android.util.Log;
7
import android.widget.TextView;
8
9
public class MainActivity extends AppCompatActivity {
10
11
    @Override
12
    protected void onCreate(Bundle savedInstanceState) {
13
        super.onCreate(savedInstanceState);
14
        setContentView(R.layout.activity_main);
15
16
        TextView textView = (TextView) findViewById(R.id.tv_token);
17
        SmsManager smsManager = SmsManager.getDefault();
18
        String appSmsToken = smsManager.createAppSpecificSmsToken(createSmsTokenPendingIntent());
19
20
        textView.setText(appSmsToken);
21
22
        Log.i("MainActivity", "sms token " + appSmsToken);
23
    }
24
25
    private PendingIntent createSmsTokenPendingIntent() {
26
        return PendingIntent.getActivity(this, 1234,
27
                new Intent(this, SmsTokenResultVerificationActivity.class), 0);
28
    }
29
}

Ten en cuenta que, como se indicó anteriormente, el token generado es único para tu aplicación en el dispositivo del usuario. Si creas otro token vía SMS, el segundo será un token válido mientras que el primero será ignorado.

Diseña la pantalla

Este es un archivo de diseño de una MainActivity configurado para que muestre el token vía SMS que se generó.

1
<?xml version="1.0" encoding="utf-8"?>
2
<LinearLayout
3
        xmlns:android="https://schemas.android.com/apk/res/android"
4
        xmlns:tools="http://schemas.android.com/tools"
5
        android:layout_width="match_parent"
6
        android:layout_height="match_parent"
7
        tools:context="com.chikeandroid.tutsplusandroidosmstoken.MainActivity"
8
        android:orientation="vertical"
9
        android:gravity="center_horizontal|center_vertical">
10
11
    <TextView
12
            android:text="APP SMS TOKEN GENERATED"
13
            android:layout_width="wrap_content"
14
            android:layout_height="wrap_content"
15
            android:textColor="@android:color/black"/>
16
17
    <TextView
18
            android:id="@+id/tv_token"
19
            android:layout_marginTop="12dp"
20
            android:layout_width="wrap_content"
21
            android:layout_height="wrap_content"
22
            android:textAppearance="?android:textAppearanceLarge"
23
            android:textColor="@android:color/holo_red_dark"/>
24
25
</LinearLayout>

Ejecutando la aplicación en este punto mostrará el token vía SMS generado.

Running the app at this pointRunning the app at this pointRunning the app at this point

2. Recibe el token vía SMS

A continuación, crearemos la actividad a ser lanzada cuando nuestro dispositivo reciba un mensaje que contenga el token vía SMS. Nada específico con el token vía SMS ocurre aquí.

1
import android.app.Activity;
2
import android.os.Bundle;
3
4
public class SmsTokenResultVerificationActivity extends Activity {
5
6
    @Override
7
    public void onCreate(Bundle savedInstanceState) {
8
        super.onCreate(savedInstanceState);
9
        setContentView(R.layout.activity_sms_token_result);
10
    }
11
}

Diseña la pantalla

Aquí creamos el diseño para que la actividad que creamos arriba contenga solo un TextView.

1
<?xml version="1.0" encoding="utf-8"?>
2
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
              android:orientation="vertical"
4
              android:layout_width="match_parent"
5
              android:layout_height="match_parent"
6
              android:gravity="center_horizontal|center_vertical">
7
8
    <TextView
9
            android:layout_width="wrap_content"
10
            android:layout_height="wrap_content"
11
            android:text="Token Result Activity"
12
            android:textColor="@android:color/holo_purple"
13
            android:textAppearance="?android:textAppearanceLarge" />
14
15
</LinearLayout>

Posteriormente, probaremos esta funcionalidad usando el emulador de Android Studio.

3. Prueba el token vía SMS

Configura el emulador para enviar mensajes SMS

Puedes usar tu emulador para simular recibir un mensaje SMS, pero necesitarás hacer una pequeña configuración. Abre tu emulador, haz clic en el último botón que aparece en la barra de navegación del lado derecho para abrir el diálogo de control extendido y luego selecciona el botón del control del teléfono.

Showing how to use the Emulator to simulate sending an SMS messageShowing how to use the Emulator to simulate sending an SMS messageShowing how to use the Emulator to simulate sending an SMS message

Desde esta interfaz, puedes simular que tu dispositivo recibe una llamada telefónica o SMS desde otro teléfono.

Envía el token

Asegúrate de que hayas configurado tu emulador apuntando a Android 8.0 (O). Genera un token e introduce un mensaje de texto que lo contenga. Luego haz clic en el botón de Enviar mensaje.

Sending a message with emulatorSending a message with emulatorSending a message with emulator

Finalmente, la actividad que especificamos en el intento pendiente ¡se lanza inmediatamente! Trata de enviar el mensaje de nuevo y ve que esta vez, aparecerá en el SMS del dispositivo del cliente, porque ya no es un token válido.

Token result activity Token result activity Token result activity

Usando un servidor

Para una aplicación de producción, el token vía SMS como es habitual será enviado por un servidor back-end. Así que cuando se usa un servidor, el cliente (tu aplicación) debería hacer una petición al servidor, incluyendo el token generado por la aplicación y el número telefónico. Tu servidor recibirá esta petición y enviará de regreso el token no modificado como un mensaje de texto al teléfono del usuario. Tu aplicación recibirá este token y lanzará el componente registrado en el intento pendiente. Ese componente puede permitir que el servidor sepa que fue exitosa la verificación del número telefónico o la autenticación del usuario.

Conclusión

En este tutorial, aprendiste sobre la fabulosa característica de token vía SMS introducida en Android O: qué es, sus beneficios y cómo usarla en una aplicación Android.

Para aprender más sobre SMS y APIs de teléfonos en Android, incluyendo cómo hacer llamadas desde tu aplicación, consulta mi tutorial relacionado aquí en Envato Tuts+.

¡Y consulta algunos otros de nuestros cursos y tutoriales sobre el desarrollo de aplicaciones Android!