Saltar al contenido

Flutter: notificaciones automáticas incluso si la aplicación está cerrada

Te damos la contestación a este contratiempo, o por lo menos eso pensamos. Si presentas alguna interrogante dínoslo, para nosotros será un gusto responderte

Solución:

Para recordatorios, recomendaría el complemento de notificaciones locales de Flutter. Tiene una potente API de programación. De la documentación de la notificación local:

Programar cuándo deben aparecer las notificaciones – Mostrar periódicamente una notificación (basada en intervalos) – Programar una notificación para que se muestre diariamente a una hora específica – Programar una notificación para que se muestre semanalmente en un día y una hora específicos – Capacidad de manejar cuando un usuario ha tocado en una notificación cuando la aplicación está en primer plano, en segundo plano o terminado

Y para las notificaciones automáticas, puede usar Firebase Cloud Messaging o un complemento de señal o puede implementarlo de forma nativa a través de los canales de la plataforma.

Editar: también puede activar notificaciones de acuerdo con condiciones específicas, incluso si la aplicación está cerrada. Esto se puede lograr ejecutando el código Dart en segundo plano. Citando las preguntas frecuentes oficiales:

¿Puedo ejecutar el código Dart en el fondo de una aplicación de Flutter? Sí, puede ejecutar el código Dart en un proceso en segundo plano tanto en iOS como en Android. Para obtener más información, consulte el artículo de Medium Ejecución de Dart en segundo plano con complementos de Flutter y Geofencing.

He encontrado una solución a este problema. Solo tenemos que registrar el complemento de notificación local en la clase de aplicación.

Primero cree una clase FlutterLocalNotificationPluginRegistrant, he creado esto en Kotlin.

class FlutterLocalNotificationPluginRegistrant 

companion object 
    fun registerWith(registry: PluginRegistry) 
        if (alreadyRegisteredWith(registry)) 
            Log.d("Local Plugin", "Already Registered");
            return
        
        FlutterLocalNotificationsPlugin.registerWith(registry.registrarFor("com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin"))
        Log.d("Local Plugin", "Registered");
    

    private fun alreadyRegisteredWith(registry: PluginRegistry): Boolean 
        val key = FlutterLocalNotificationPluginRegistrant::class.java.canonicalName
        if (registry.hasPlugin(key)) 
            return true
        
        registry.registrarFor(key)
        return false
    

Ahora cree una clase de aplicación que extienda FlutterApplication e implemente PluginRegistry.PluginRegistrantCallback.

class Application : FlutterApplication(), PluginRegistry.PluginRegistrantCallback 

override fun onCreate() 
    super.onCreate()


override fun registerWith(registry: PluginRegistry?) 
    if (registry != null) 
        FlutterLocalNotificationPluginRegistrant.registerWith(registry)
    

y registre la clase de aplicación en AndroidManifest.xml


Todo listo. Ahora escriba una función para mostrar la notificación y llámela desde el método del controlador en segundo plano de la mensajería de Firebase.

    Future _showNotificationWithDefaultSound(String title, String message) async 
  var androidPlatformChannelSpecifics = AndroidNotificationDetails(
      'channel_id', 'channel_name', 'channel_description',
      importance: Importance.Max, priority: Priority.High);
  var iOSPlatformChannelSpecifics = IOSNotificationDetails();
  var platformChannelSpecifics = NotificationDetails(
      androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
   await flutterLocalNotificationsPlugin.show(
    0,
    '$title',
    '$message',
    platformChannelSpecifics,
    payload: 'Default_Sound',
  );

y llámalo así.

    Future myBackgroundMessageHandler(Map message) async 

  if (message['data'] != null) 
    final data = message['data'];

    final title = data['title'];
    final body = data['message'];

    await _showNotificationWithDefaultSound(title, message);
  
  return Future.value();

valoraciones y reseñas

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *