En este tutorial te cuento cómo implementar NOTIFICACIONES PUSH (PUSH NOTIFICATIONS) en Android (Java), mediante Firebase (el servicio gratuito Firebase Cloud Messaging FCM), con un Servidor (backend) en PHP, el sistema completo, paso a paso.
# Implementación paso a paso
Vamos a usar Firebase Cloud Messaging (FCM), el servicio gratuito de notificaciones de Firebase.
La arquitectura FCM tiene tres patas:
- check_circle La app: nuestra aplicación móvil.
- check_circle El servidor: el backend que gestiona los envíos.
- check_circle FCM: la API que conecta ambos mundos.
# ¿Cómo es la secuencia?
La secuencia consta de 3 pasos bien definidos:
1. Registrar en FCM
El dispositivo envía una solicitud de registro a FCM. FCM lo registra y devuelve un token único: el deviceid.
2. Guardar deviceid en el servidor
La app envía el token a nuestro servidor para que sepamos a quién corresponde.
3. Enviar notificación
Nuestro servidor le ordena a FCM enviar un mensaje específico a un deviceid.
# ¡Vamos al CÓDIGO!
Configuración del Proyecto
Creamos la app en Android Studio y configuramos el proyecto en la consola de Firebase.
Librerías y Dependencias
plugins {
id 'com.android.application' version '7.3.1' apply false
id 'com.android.library' version '7.3.1' apply false
id 'com.google.gms.google-services' version '4.3.13' apply false
}
dependencies {
implementation 'com.google.firebase:firebase-messaging:23.1.1'
implementation platform('com.google.firebase:firebase-bom:31.1.1')
implementation 'com.google.firebase:firebase-analytics'
implementation 'com.android.volley:volley:1.2.1'
}
Implementación del Service
Configuramos el MyFirebaseMessagingService en el AndroidManifest.xml.
Registro del Dispositivo
private void registrarDispositivo(){
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(new OnCompleteListener<String>() {
@Override
public void onComplete(@NonNull Task<String> task) {
if (!task.isSuccessful()) return;
String token = task.getResult();
String tokenGuardado = getSharedPreferences(Constantes.SP_FILE,0)
.getString(Constantes.SP_KEY_DEVICEID,null);
if (token != null && (tokenGuardado == null || !token.equals(tokenGuardado))){
DeviceManager.postRegistrarDispositivoEnServidor(token, MainActivity.this);
}
}
});
}
# Implementación del Servidor (PHP)
El servidor almacena los tokens en MySQL y utiliza la API heredada de FCM para despachar mensajes.
CREATE TABLE `DISPOSITIVOS` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`DEVICEID` varchar(400) NOT NULL,
PRIMARY KEY (`ID`)
);
# Código Completo
Podés descargar el proyecto completo desde GitHub: https://github.com/unsimpledev/ProyectoNotificaciones