Integración con Flutter

Configuración del SDK para Android (Single-module) usando Flutter.

Requisitos previos

ComponenteRequerimiento
Sistema OperativoWindows 10 o superior
Flutter SDK>=3.22.0
Dart SDK>=3.8.1 <4.0.0
firebase_core3.15.1
firebase_messaging15.2.9
emma_flutter_sdk1.6.2
cupertino_icons1.0.8
flutter_lints5.0.0

Durante la primera compilación del proyecto, puede surgir el un error,debido a una incompatibilidad entre las versiones de jvmTarget utilizadas por Kotlin (21) y Java (1.8). La solución consiste en unificar la configuración del jvmTarget y los niveles de compatibilidad de Java a la versión 21 dentro del archivo build.gradle.kts, tanto para los módulos Kotlin como Java.

Aplicar esta configuración asegura que todas las tareas de compilación apunten a una misma versión de la máquina virtual, resolviendo el conflicto.

Integrar el SDK de EMMA con Flutter.

  • Crear proyecto

    Crear proyecto con Flutter

    bash
    flutter create example_app
    
  • Configurar pubspec.yaml

    En el pubspec.yaml añade la siguiente línea:

    pubspec.yaml
    dependencies:
    emma_flutter_sdk: 1.6.2
    
  • Iniciar sesión del SDK

    Actualmente, la clase StartSession debe importarse de forma explícita. import 'package:emma_flutter_sdk/src/start_session.dart';

    main.dart
    
       @override
    void initState() {
      super.initState();
      initPlatformState();
      initEMMA()
    }
    
    final startSessionParams = StartSession(
      sessionKey: "<EMMAKey>",
      queueTime: 10,
      isDebug: true,
      customShortPowlinkDomains: ["emma.shortLink.mycompany.com"],
      customPowlinkDomains: ["emma.link.mycompany.com"],
      trackScreenEvents: false,
      familiesPolicyTreatment: (Platform.isAndroid) ? true : false,
    );
    
    Future<void> initEMMA() async {
      await EmmaFlutterSdk.shared
          .startSession(startSessionParams);
    }
    

Pasos para la Integración Notificaciones Push.

  • Generar clave privada JSON

    Genera un archivo JSON de clave privada entrando en la configuración de tu proyecto de Firebase , Cuentas de servicio, y generar nueva clave privada.

    Clave privada
  • Configurar la plataforma EMMA

    Además debes configurar la plataforma EMMA con ese archivo JSON de la siguiente manera; Entra al menu del borde superior y accede a preferencias app, has click en Selecciona un fichero JSON.

    Clave privada json
  • Integrar FCM en tu Service

    Hay que añadir el siguiente service al AndroidManifest.xml:

    android\app\src\main\AndroidManifest.xml
    <service
    android:name="io.emma.android.push.EMMAFcmMessagingService"
    android:enabled="true"
    android:exported="false">
    <intent-filter>
    <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
    </service>
    
    Service push
  • Configurar dependencias de Google Services nivel proyect

    Agrega el classpath en el archivo de Gradle build.gradle.kts a nivel de proyecto: Aquí más información sobre integración de Firebase

    settings.gradle.kts(:project)
    
    classpath 'com.google.gms:google-services:4.4.2'
    
    
  • Configurar dependencias de Google Services nivel app

    Agrega el complemento de los servicios de Google en el archivo de Gradle build.gradle.kts a nivel de app.

    \android\app\build.gradle
    
    apply plugin: "com.google.gms.google-services"
    

    Agrega los SDK de Firebase a tu app en el archivo Gradle build.gradle.kts a nivel de app, agrega las dependencias de los productos de Firebase que quieras usar en tu app. Es recomendable que uses la Firebase Android BoM para controlar las versiones de las bibliotecas.

    settings.gradle.kts(:app)
    
    implementation platform('com.google.firebase:firebase-bom:33.15.0')
    
    
  • Iniciando el sistema de push

    Añade el startPushSystem en el archivo main.dart después del startSession:

    main.dart
    
    Future<void> initEMMA() async {
    await EmmaFlutterSdk.shared
        .startSession('<SESSION_KEY>', debugEnabled: true);
    
    await EmmaFlutterSdk.shared.startPushSystem('icimage');
    }
    

    Desde Android 13, para recibir notificaciones es necesario solicitar un permiso al usuario. Para ello, EMMA ha añadido un método al SDK disponible en la versión 4.12 o superiores. (En mi caso uso API 29), por lo tanto, no lo implementaré, este método tiene que ser llamado en un Activity.

  • Crear notificación push en plataforma de Emma

    Puedes seguir este tutorial para crear notificaciones push desde EMMA.

    Service push