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:
Tutorial sugerido
Enviar notificaciones push en AndroidUsaremos 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.
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.
$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.
@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
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