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-notifications.md
guest@codeandosimple: ~/tutorials/android $ cat push-notifications.md

Notificaciones Push en Android_

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

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.
arquitectura fcm

# ¿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.

paso 1 fcm

2. Guardar deviceid en el servidor

La app envía el token a nuestro servidor para que sepamos a quién corresponde.

paso 2 servidor

3. Enviar notificación

Nuestro servidor le ordena a FCM enviar un mensaje específico a un deviceid.

paso 3 envio

# ¡Vamos al CÓDIGO!

Configuración del Proyecto

Creamos la app en Android Studio y configuramos el proyecto en la consola de Firebase.

setup 1
setup 2

Librerías y Dependencias

build.gradle (Project)
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
}
app/build.gradle (Module)
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.

manifest side

Registro del Dispositivo

MainActivity.java
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.

database.sql
CREATE TABLE `DISPOSITIVOS` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `DEVICEID` varchar(400) NOT NULL,
  PRIMARY KEY (`ID`)
);
php logic
send logic

# Código Completo

Podés descargar el proyecto completo desde GitHub: https://github.com/unsimpledev/ProyectoNotificaciones