terminal

codeando_simple

terminal

menu

terminal

search_module

guest@codeandosimple: ~/system/search $ grep -r "" .

Press [ENTER] to execute search

Status

Engine: Ready

Database: Online

Index: V2.1.0_LATEST

bash — cat push-links.md
guest@codeandosimple: ~/tutorials/android $ cat push-links.md

Enviar Link en Notificaciones Push_

// "Cualquier momento es perfecto para aprender algo nuevo" — Albert Einstein

En este artículo veremos cómo podemos enviar un link en un notificaciones push, y que al presionar esa notificación, abra el link en el navegador.

# Previamente

Comenzaremos a partir de lo visto en el tutorial de Cómo enviar Notificaciones Push:

Usaremos el mismo código que desarrollamos para ese artículo.

# Tipos de notificaciones

Lo primero es entender los tipos de notificaciones, que son dos, y tienen que ver con la forma en que Android maneja la recepción:

Notification

Manejada por Android automáticamente cuando la app está en segundo plano. Si está en primer plano, se usa onMessageReceived.

Data

Siempre manejada por onMessageReceived. No es visible automáticamente; nosotros debemos dibujarla, permitiendo agregar propiedades y comportamiento adicional.

Para este ejemplo vamos a agregar un campo a la notificación, el campo linkURL. Al recibirla, le indicaremos que al presionarla abra el navegador con ese valor.

# Intent

Utilizaremos un Intent, un objeto de mensajería que permite solicitar acciones de otros componentes, como abrir el navegador.

intent filters

Fuente: developer.android.com

Este intent no se puede asignar al tipo notification automático; debemos usar el tipo data para personalizarla dinámicamente.

# Servidor Backend

Modificamos el archivo enviarNotificacion.php para recibir el campo LINKURL y enviarlo en el bloque data del JSON.

enviarNotificacion.php
$datos["title"] = $titulo;
$datos["body"] = $mensaje;

if (isset($_POST['LINKURL'])) {
    $datos["linkurl"] = $_POST['LINKURL'];
}

$fields = array(
    'registration_ids' => $registration_ids,
    'data' => $datos,
    'direct_book_ok' => true
);

# Aplicación Android

En la aplicación dibujamos la notificación y le agregamos un PendingIntent para abrir el browser.

MyFirebaseMessagingService.java
@Override
public void onMessageReceived(@NonNull RemoteMessage message) {
    String titulo = message.getData().get("title");
    String descripcion = message.getData().get("body");
    String linkUrl = message.getData().get("linkurl");

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
        .setContentTitle(titulo)
        .setContentText(descripcion)
        .setAutoCancel(true)
        .setSmallIcon(R.drawable.ic_launcher_foreground)
        .setContentIntent(onClick(linkUrl));

    notificationManager.notify(0, notificationBuilder.build());
}

Abrir Navegador

onClick Methods
private PendingIntent onClickAbrirNavegador(String linkUrl) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse(linkUrl));
    return PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);
}

# Código Completo

Podés descargar el código completo desde este repositorio: https://github.com/unsimpledev/ProyectoNotificacionesLink