Integración Android

¿Por qué utilizar el SDK de EMMA en tu APP?

Descarga e Integración básica

Integración Acquisition

Integración Behavior

Integración Notificaciones Push

Integración Messaging

Depurando el código

 

¿Por qué utilizar el SDK de EMMA en tu App?

El SDK de EMMA proporciona funcionalidad única para el seguimiento completo de los usuarios de tu App. Hemos desarrollado un SDK muy resistente, seguro y ligero con más de 2.000 Millones de instalaciones hasta la fecha. Y por supuesto, fácil de integrar.

EMMA_1.png

EMMA puede medir origen de instalaciones (incluyendo Facebook, Twitter y Google), sesiones, eventos que realizan los usuarios, localización, ... con un potente módulo de segmentación para poder evaluar el ROI y la retención de tus usuarios y fidelizarlos gracias a nuestras herramientas de comunicación Push e In-App Messaging.

EMMA Android SDK es compatible con todos los dispositivos Android.

 

Descarga e integración básica

Descarga EMMA Android SDK

Puedes descargar e instalar EMMA a través de Gradle.

Utilizar Gradle para la descarga.

Si estás utilizando Gradle como como gestor de dependencias puedes integrar el SDK de forma fácil:

  1.  Añade al archivo /app/build.gradle el repositorio en el cual se encuentra EMMA.
    repositories {
      maven { url 'http://repo.emma.io/emma' }
    } 
  2. Añade la dependencia en el mismo archivo .gradle.
    dependencies {
       compile 'io.emma:eMMaSDK:4.+'		    
    }
  3. Si tu app ya tiene el paquete com.google.android.gms:playservices puedes utilizar la dependencia de tu app y excluir la de EMMA.
    compile ('io.emma:eMMaSDK:4.+') {
       exclude group: 'com.google.android.gms'
    }
    
  4. Por último, compilar el proyecto con gradle. 

 

 

Permisos de la aplicación y EMMA SESSION KEY

Configura AndroidManifest.xml. Los permisos requeridos son:

  • android.permission.INTERNET
  • android.permission.ACCESS_NETWORK_STATE
  • android.permission.READ_PHONE_STATE
  • com.google.android.c2dm.permission.RECEIVE

Así como los siguientes para el Android Advertising ID

  • <meta-data android:name="com.google.android.gms.version android:value="@integer/google_play_services_version" />

Permisos opcionales:

  • android.permission.ACCESS_COARSE_LOCATION or
  • android.permission.ACCESS_FINE_LOCATION

Añade tu EMMA SESSION_KEY al AndroidManifest.xml, para ello, dentro del elemento application añade

<meta-data android:name="io.emma.SESSION_KEY" android:value="@string/emma_session_key" />

Y en el archivo res/strings.xml añade dentro de resources:

<string name="emma_session_key">YOUR_EMMA_SESSION_KEY</string>

Especifica un atributo de versionName en el manifiesto para contar con datos reportados con ese nombre de la versión.

Si no sabes cómo obtener tu EMMA Session_Key sigue estas instrucciones

 

Inicialización del SDK & Evento Install (Requerimiento Mínimo)

En tu clase Application, importa EMMA:

import com.emma.android.eMMa;

En tu método de Application onCreate() añade la siguiente llamada:

eMMa.startEMMASession(this);

Opcional

En algunos, es necesario cambiar la url de API EMMA  (p.e proxies), para ello hay que añadir lo siguiente justo antes del método startEMMASession(...):

eMMa.setAPIeMMaURL("https://www.your_proxy_url.com/");

 

Activa Install Referrer

Cuando se dirija al usuario al Google Play, el install referrer puede ser utilizado para conseguir así la máxima exactitud en la medición. Tu app DEBE ser establecida para permitirle a nuestro SDK recoger el valor el install referrer y habilitar la fuente de origen de esta para poderla guardar y asociar más adelante al usuario de la app.

Android lanzará una llamada de intención: com.android.vending. INSTALL_REFERRER durante el proceso de instalación de la app. Esto ocurre antes de que se abra la aplicación por primera vez. Para capturar la información relevante:

Añade el eMMaReferralReceiver broadcast receiver a su AndroidManifest.xml:

<application>
<!-- Instrucciones anteriores de application tag... -->
<receiver android:name="com.emma.android.eMMaReferralReceiver" android:exported="false">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER"/>
</intent-filter>
</receiver>
</application>

Si estás utilizando su propio receiver, ejecuta los siguientes pasos:

Registra el siguiente intent en su broadcast receiver:

<intent-filter>
      <action android:name="com.android.vending.INSTALL_REFERRER"/>
</intent-filter>

En onReceive en su Receiver Class, añade el siguiente código:

if (intent.getAction().equals("com.android.vending.INSTALL_REFERRER")) {
    eMMaReferralReceiver eMMaReceiver = new eMMaReferralReceiver();
    eMMaReceiver.onReceive(context, intent);
}

eMMaInstallsBroadcastReceiver

A partir de la version del 2.5 se incluye el eMMaInstallsBroadcastReceiver que permite tener más de un receiver con el action com.android.vending.INSTALL_REFERRER. Si se utiliza este receiver no se tendrá que crear una propio como explica el apartado anterior. El receiver se tiene que declarar como el primer receiver del AndroidManifest.xml. 

<receiver android:name="com.emma.android.eMMaInstallsBroadcastReceiver" android:exported="false">
    <intent-filter>
       <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>

Nota: si se esta utilizando el MultipleInstallBroadcastReceiver de Appsflyer no hará falta utilizar el receiver anterior.

 

Publica tu App en Google Play

Ahora ya está listo para empezar a trackear con EMMA.

Continúa con este artículo para la integración avanzada si quieres ampliar la medición e implementación de herramientas de fidelización de EMMA en su app.

*Excepto Facebook App Installs y Twitter App Promotion

 

Actualización a la versión 4.0

Las versiones previas que se actualicen a la 4.0 deberán realizar los siguientes cambios.

Cambios en el EMMA Session_Key

Se ha marcado como obsoleto el método de inicialización que incluye el Session_Key.

eMMa.starteMMaSession(this, SESSION_KEY);

Ahora el Session_Key de tu app debes añadirlo al AndroidManifest.xml, puedes utilizar el que ya tienes, no es necesario crear uno nuevo.

En AndroidManifest.xml, dentro del elemento application añade

<meta-data android:name="io.emma.SESSION_KEY" android:value="@string/emma_session_key" />

Y en el archivo res/strings.xml añade dentro de resources:

<string name="emma_session_key">YOUR_EMMA_SESSION_KEY</string>

Por último actualiza la llamada de inicialización del SDK por esta otra.

eMMa.startEMMASession(this);

Cambios al medir eventos

Se ha marcado como obsoleto el método:

eMMa.trackEvent(Context ctx, String event);

Ya no hace falta especificar un contexto al medir eventos, sustituye todas las llamadas de ese método por el nuevo:

eMMa.trackEvent(String event);

 

Integración Acquisition

En la sección de Acquisition podrás tener los datos de todas las campañas gestionadas con EMMA. A continuación se detalla la documentación específica para que puedas gestionar las campañas que desarrolles con Facebook y con Twitter y, además, la documentación detallada de cómo integrar la funcionalidad de Powlink.

 

Medición de Facebook App Installs y Twitter App Promotion

EMMA está totalmente integrado con Facebook y Twitter para tracking mediante AppsFlyer. Así, es posible medir todas las fuentes de instalación de estas redes sociales en nuestro Dashboard sin necesidad de integrar los SDKs de Facebook ni Twitter.

Para empezar, añada lo siguiente:

  • AF-Android-SDK.jar

 Necesita modificar su fila de AndroidManifest.xml y establecer un Receiver. Modifique su AndroidManifest.xml siguiendo estas líneas:

**************** Referral for Facebook and Twitter
<receiver android:name="com.appsflyer.MultipleInstallBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
**************** Current eMMa referral
<receiver android:name="com.emma.android.eMMaReferralReceiver" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER"/>
</intent-filter>
</receiver>

POR FAVER ASEGÚRESE QUE EL RECEIVER TAG ESTÁ ASOCIADO AL APPLICATION TAG.

Se necesita inicializar el SDK en el primer inicio de la app. Asegúrese por tanto que el SDK es inicializado antes de enviar los eventos de tracking de abajo.

AppsFlyerLib.setAppsFlyerKey(@"EMMASOCIALKEY");

Añada la siguiente línea a la actividad principal de onCreate.

AppsFlyerLib.sendTracking(getApplicationContext());

Con el fin de medir sesiones de app (aperturas), asegúrese de llamar a esta API en cada sesión de la aplicación.

El EMMA Social Key que tienes que introducir es el ID que se necesita para realizar un seguimiento de las campañas de Facebook App Install y Twitter App Promotion.

Para solicitar el EMMA Social Key debes seguir estos pasos:

1.  Haz login en la página web de EMMA y dirígete a My Account > Configuration > Edit app.

EMMA_2.png

 

 

2.  Dirígete a la zona de Media Source Settings y añade la siguiente información sobre tu aplicación:

EMMA_3.png

Para sacar el App Store ID puedes copiar el ID a través del enlace generado en AppStore, como en el siguiente ejemplo:

EMMA_4.png

Para sacar el Google Play ID puedes copiar el ID a través del enlace generado en GooglePlay, como en el siguiente ejemplo:

EMMA_5.png

Para sacar el Facebook App ID visita este artículo para conocer cómo obtenerlo.

4.  Selecciona la opción Guardar (Submit) para guardar los cambios.

5.  Envíanos un email a support@emma.io y te daremos tu clave del EMMA Social Key. Recibirás un e-mail con tu clave. 

 6.  Si todo se ha realizado correctamente, encontrarás las campañas de Facebook y Twitter en la sección Acquisition > AppTracker. Una vez la campaña esté activa, los datos de rendimiento entrarán automáticamente EMMA.

EMMA_6.png

 

Integración del Powlink

Para soportar Powlink en Android, primero, es necesario configurar en el Dashboard de EMMA el subdominio en powlink.io que usará tu aplicación, y cubrir los datos del Google Play ID y el Fingerprint del certificado con el que debes firmar tu aplicación en formato SHA256. Esto se configura en el apartado de My Account, en la sección de Media Source Settings de tu aplicación.

EMMA_7.png

Conociendo el subdominio que corresponde a tus Powlinks, debes añadir un filtro nuevo al AndroidManifest.xml de tu aplicación tal y como indicamos a continuación.

<activity ...>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="mysubdomain.powlink.io" />
</intent-filter>
</activity>

En el método onCreate de tu aplicación, es donde puedes manejar los Powlinks recibidos para procesarlos y mostrar la parte correspondiente de tu aplicación.

protected void onCreate(Bundle savedInstanceState) {
//Your stuff

Intent deeplink = getIntent();
String action = deeplink.getAction();
if (action == "android.intent.action.VIEW") {
Uri data = deeplink.getData();
//Process data. Manage Powlink path
}
}

 

Integración Behavior

Con EMMA puedes realizar una integración completa del SDK que te permita conocer la localización de tus usuarios, cómo se registran en tu App, cuántas transacciones realizan y hasta sus características propias. Es decir, toda la información de tus usuarios que obtendrás en la sección de Behavior

En los siguientes artículos se especifica la integración de la medición de cada uno de estos aspectos:

 

Medición Eventos

La plataforma de EMMA hace la diferenciación entre dos tipos de eventos. Los que la plataforma incluye por defecto y los eventos Custom que quieras integrar según la estructura de tu aplicación.

Eventos por defecto

En los eventos por defecto EMMA permite medir Leads (o registros), usuarios registrados fuera de la app, registros antiguos y cualquier etiqueta que desees vincular a un usuario de cara a poder crear segmentos personalizados y los Login (usuarios que han iniciado sesión a través de un correo ya existente o bien a través de alguna plataforma social).

Sigue los siguientes pasos para su integración:

Sign Up/Registros/Leads

eMMa.registerUserID(this, userId, mail);

RegisterUser establece un registro completo del dispositivo en la BBDD de EMMA para un userId (String) y un e-mail (String).

Login

eMMa.loginUserID(this, userId, mail);

LoginUser registra el usuario en la base de datos de EMMA mediante un userId (String) y un correo electrónico (String). Cuando se encuentre registrado puede utilizar asimismo eMMa.loginDefault(this) para registrar otro 'Sign In' para el usuario con los mismos datos.

 

Eventos custom

Con EMMA puedes medir cada acción del usuario como un evento personalizable.

trackEvent(Context ctx, String event);

Usar trackEvent para contar el número de veces que ciertos eventos ocurren durante una sesión de su aplicación. Esto puede ser útil para medir la frecuencia con que realizan acciones de interés o para crear segmentos en la plataforma sobre los que trabajar. 

Actualmente el número máximo de eventos a trackear es de treinta.

Para obtener lo necesarios EVENT_TOKENS creando eventos en la plataforma de EMMA. Si se envía un token inexistente en EMMA, este devolverá un error.

 

Medición transacciones

EMMA permite medir cualquier transacción o compra que se realice en tu app. 

Start Order 

startOrder(Activity ctx, String orderId, String customerId, float totalPrice, String coupon, Map<String,String> extras, String currencyCode);

Este método habilita una orden para añadir productos. Es posible pasar los siguientes parámetros:

  • ctx: Activity object.
orderID

: Encadena el orderID de la transacción

customerId

: Encadena el ID de cliente. Si no lo envías EMMA usará el ID del login (si existe)

totalPrice

: Etiqueta con el precio total

coupon

: Enlaza con un cupón si es necesario

extras

: Mapa con hasta veinte parámetros extra, como la divisa, categoría de productos, etc. 

currencyCode

: Encadena un código de moneda válido (EUR,USD,GBP..) Si el código de moneda no es válido se utilizará EUR

Si no se necesitan todos los parámetros también se pueden usar métodos abreviados. Estos se pueden encontrar al final del documento o en eMMa.jar.

Añadir productos a una orden

addProduct(String productId, String name, float qty, float price, Map<String,String> extras);

Añadir productos a una orden iniciada actual. El startOrder siempre debería ser llamado antes. Se pueden pasar los siguientes parámetros.

productId

: Encadena el identificador del producto

name

: Encadena el nombre del producto

qty

: Etiqueta con su Product QTY.

price

: Etiqueta con el precio del producto.

extras

: Mapa con hasta veinte parámetros o categorías extra 

Medición de la transacción

trackOrder(Activity ctx);

Mide la orden actual. Debería ser llamada después del startOrder y después de que se hayan añadido todos los productos.

La secuencia de la medición de la transacción en EMMA es siempre:

startOrder>addProduct(*distinct products)>trackOrder

Cancelación de la transacción 

cancelOrder(Activity c, String orderId);

Cancelar la orden referenciada por un orderID. Si su aplicación permite cancelar pedidos, este método actualiza la información de las transacciones registradas en función de estas posibles cancelaciones.

 

Medición Tags

Extra Info o Tags

eMMa.trackExtraUserInfo(this, extras);

Este método actualiza o añade parámetro extra para usuarios ya logueados permitiendo así una mejor base de datos segmentados. Puede ser utilizado en cualquier lugar.

Si quieres usar la EMMA RULE On his Birthday envía la fecha de cumpleaños con el método para el TAG en el siguiente formato: 

Nombre: BIRTHDAY

Valor: YYYY-MM-DD

 

Medición localización 

Si tu aplicación cuenta con permisos de localización, EMMA podrá medir desde dónde se está utilizando su app.

Para inhabilitar la posibilidad de obtener un reporting detallado de dichas localizaciones incluso cuando su app permita esta opción, llama a eMMa.disableReportLocation() antes de hacer lo propio a eMMa.starteMMaSession().

 

Información del usuario [Get User Info]

Get User ID

eMMa.getUserID(Context ctx);

Este método devolverá el EMMA ID del usuario. Este ID es único para cada usuario y puede ser empleado para filtrar cuando se utilicen acciones de Push, StartView y DynamicTabs.

Tu actividad debe implementar la interfaz eMMaUserInfoInterface y el método OnGetUserID(int id) al que se llamará con el identificador del usuario esté disponible.

Get User Info

eMMa.getUserInfo(Context ctx);

El método devuelve la información del usuario en EMMA en formato JSON.

Su actividad debe implementar la interfaz eMMaUserInfoInterface y el método OnGetUserInfo(JSONObject json) al que se llamará cuando la información del usuario esté disponible.

El JSON incluirá los siguientes parámetros:

id El mismo ID único que en el método (eMMa.getUserID)
udid ID único por instalación de la app (IDFA/AAID habitualmente)
emma_build Identifica la versión del SDK de EMMA que se está usando
email Email del usuario en caso de que el registro o el login estén integrados
customerid ID asignado al usuario tras el registro o login
created_at Momento en el que el usuario ha sido creado
updated_at La última vez que el usuario actualizó la información
registred_at Momento en el que el usuario se registró
fisrt_login Momento en el que el usuario realizó su primer login
last_login Momento en el que el usuario realizó su último login
device Dispositivo del usuario
app_version Versión de la app
os_version Versión del sistema operativo
rated Si el usuario ha puntuado la app
token Identificador del push (token)
inactive Si el usuario está inactivo para recibir notificaciones push
latitude  Latitud del usuario en el caso de que se permita y mida la geolocalización
longitude  Longitud del usuario en el caso de que se permita y mida la geolocalización
emma_city  Ciudad del usuario en el caso de que se permita y mida la geolocalización
emma_country  País del usuario en el caso de que se permita y mida la geolocalización
emma_state  País del usuario en el caso de que se permita y mida la geolocalización
emma_device_id ID único del dispositivo.
emma_referrer_id ID de la campaña de la que el usuario proviene (si ha llegado a través de una campaña del EMMA AppTracker)
loyal_user_at
Momento en el que el usuario se convirtió en Loyal User 
loyal_buy_at Momento en el que el usuario se convirtió en Loyal Buyer 
emma_num_sessions Número de sesiones (aperturas de la app) del usuario
last_session_at Última sesión (apertura de la app) del usuario
tag_name Nombre y valor de todos los tags del usuario

Además, si el usuario proviene de una campaña de Facebook, se incluirán los siguientes parámetros:

eat_sub1 Nombre de la app
eat_sub2 "facebook" (Valor fijo)
eat_sub3 "Facebook's Campaign" (Valor fijo)
eat_sub4 "cpi" (Valor fijo)
eat_sub5 Nombre de la campaña en Facebook
eat_sub6 ID de la campaña en Facebook
eat_sub7 Nombre del Adgroup en Facebook
eat_sub8 ID del Adgroup en Facebook
eat_sub9 Nombre del Adset en Facebook
eat_sub10 ID del Adset en Facebook

En el caso de que el usuario provenga del AppTracker, el JSON podrá incluir los siguientes parámetros personalizados.

Para usar este método es necesario tener contratada la feature Raw Export en tu sección de My Account > My Plan. 

 

Integración Notificaciones Push

EMMA ofrece un completo sistema de envío y reporting de Notificaciones Push fácil de integrar usando el Google Cloud Messaging for Android (GCM)

Obtén en primer lugar tu propio Project Number y API key para el GCM como se especifica en este artículo, y establece estos parámetros para la app en su cuenta de EMMA.

IMPORTANTE: usa el Server API Key para GCM, no el Browser o el Android-iOS API Key.

En tu aplicación, necesitas configurar el AndroidManifest.xml.

Permisos requeridos: 

<permission android:name=”your.own.package.permission.C2D_MESSAGE”
android:protectionLevel=”signature” />
<uses-permission android:name=”your.own.package.permission.C2D_MESSAGE” />
<uses-permission android:name=”com.google.android.c2dm.permission.RECEIVE” />
<uses-permission android:name=”android.permission.GET_ACCOUNTS” />
<uses-permission android:name=”android.permission.VIBRATE” />
<uses-permission android:name=”android.permission.WAKE_LOCK” />

También se debe indicar el servicio de EMMA y el receiver que gestionará la notificación:

<service android:name=”com.emma.android.eMMaGCMReceiver” />
<receiver
android:name=”com.emma.android.GCMBroadcastReceiver”
android:permission=”com.google.android.c2dm.permission.SEND”>
<intent-filter>
<action android:name=”com.google.android.c2dm.intent.REGISTRATION”/>
<action android:name=”com.google.android.c2dm.intent.RECEIVE”/>
<category android:name=”your.own.package” />
</intent-filter>
</receiver>

El eMMaPushBroadcastReceiver es el encargado de trackear que la notificación se ha abierto

<receiver android:name="com.emma.android.eMMaPushBroadcastReceiver" android:exported="false">
<intent-filter>
<action android:name="your.own.package.PUSH_OPEN"/>
</intent-filter>
</receiver>

El sistema Push del EMMA SDK de Android ha cambiado. Ahora no es llamado en su actividad, sino en un su Application Object.

Llame al método de abajo en su método de Application onCreate() después de empezar la sesión de EMMA:

eMMa.starteMMaSession(ctx, "EMMA_KEY");
....
eMMa.startPushSystem(ctx, activity, R.drawable.icon, customDialog);
ctx

: Objeto de contexto (Application).

activity

: Actividad que desea que se abra cuando se recibe el Push 

R.drawable.icon

: (Opcional) El resource id de la imagen que desea mostrar con la notificación Push. Si no se especifica ningún icono, el Push utilizará el icon de la app.

customDialog

: (Opcional) Establecerlo para asegurar que se desea utilizar su Custom Dialog. 

Añadir el método de Activity's onNewIntent() llamando a eMMa.onNewNotification(), que verificará si el usuario ha recibido una notificación cuando la app esta abierta.

@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
    eMMa.onNewNotification(this, intent, true);
}

Nota: El boolean que tiene como parámetro el método onNewNotification comprueba que el push contiene Rich Push Url en el caso de estar a true.

Para comprobar el richPushUrl cuando se abre la app desde la notificación, añade en la activity de push lo siguiente:

public class YOUR_ACTIVITY extends Activity{

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    eMMa.checkForRichPushUrl(this);
}

Nota: El checkForRichPushUrl también se puede utilizar en cualquier parte de la app si se prefiere.

Si tu aplicación se basa en un WebView, tienes que añadir el checkForRichPushUrl en el siguiente método:

webView.setWebViewClient(new WebViewClient(){
.......
@Override
public void onPageFinished(new WebViewClient() {
  eMMa.checkForRichPushUrl(this);
}¡ });

Opcionalmente, si deseas controlar qué recibe de un Push, su Activity debe implementar la interfaz eMMaNotificationInterface y los métodos pushTag(String pushTag) y pushMessage(String message) que serán llamados cuando el usuario abra la notificación (incluso aunque no establezcas un pushTag en la plataforma de EMMA). Asimismo, puedes indicar si quiere mostrar el EMMA Dialog o su propio Custom Dialog.

 @Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  eMMa.getNotificationInfo(this);
}
@Override
public void pushTag(String pushTag) {
//Do whatever you want with pushTag
}
@Override
public void pushMessage(String message) {
//Create your own dialog with the push message
}
}

Para inhabilitar las notificaciones de un dispositivo, use eMMa-unregisterPushService(context) y asegúrate de no llamar de nuevo a startPushSystem.

Puedes utilizar métodos abreviados si no necesitas todos los parámetros. Puede encontrarlos aquí.

Rich Push, sonidos personalizados en las notificaciones push. Se necesita la versión del SDK 2.5.5 o una superior

Para usar sonidos personalizados en las notificaciones que envíes con EMMA, tienes que añadir los archivos de sonido que quieras a la carpeta raw de los recursos de tu app (carpeta res). Recuerda que debes emplear para los sonidos los mismos nombres de archivo en iOS y Android.

Rich Push URL uso DeepLinking

Puedes redireccionar las aperturas de las notificaciones push a una sección en tu app. Para ello debes usar una estructura como esta: 

scheme://host/page1/page2/page3...

De cara a habilitar tu app para recibir scheme deep link debes:

1) En el AndroidManifest.xml añadir el siguiente código:

<activity android:name=".YOUR_PUSH_ACTIVITY"
      android:launchMode="singleTask">
       <intent-filter>
          <action android:name="android.intent.action.VIEW" />
          <category android:name="android.intent.category.DEFAULT"/>
          <category android:name="android.intent.category.BROWSABLE"/>
          <data android:scheme="YOUR_SCHEME"
                   android:host="YOUR_HOST"/>
        </intent-filter>
</activity>

2) Dentro de la actividad definida como actividad de push(YOUR_PUSH_ACTIVITY), puedes tomar como referencia el siguiente ejemplo para capturar el deeplink:

    @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.view);

       eMMa.checkForRichPushUrl(this);

        if (getIntent() != null && getIntent().getData() != null){
            openDeeplinkActivity(getIntent().getData());
        }

   } private void openDeeplinkActivity(Uri uri){
       Intent intent = new Intent(this, DeepLinkActivity.class);
       if (uri != null){
           intent.putExtra(DeepLinkActivity.URL_TAG, uri.toString());
       }
       startActivity(intent);
   }

   @Override
   public void onNewIntent(Intent intent){
       openDeeplinkActivity(intent.getData());
   }

Añadiendo este método a la actividad, se puede capturar el deeplink del push cuando la app este abierta:

    @Override
   public void onNewIntent(Intent intent){
       openDeeplinkActivity(intent.getData());
   }

Este condicional dentro del onCreate es para capturar el deeplink después de abrir la app con el push:

    if (getIntent() != null && getIntent().getData() != null){
    openDeeplinkActivity(getIntent().getData());
}

3) Debajo del método startPushSystem debes añadir YOUR_SCHEME:

    eMMa.setUrlSchemeForWebView(YOUR_SCHEME);

IMPORTANTE: Cuando vayas a crear la API Key en Google Developers Console, tienes que añadir como restricción la IP de nuestro servidor de push (52.48.24.86, 5.9.147.231).

EMMA_8.png

Debes añadir la API de Google: Google Cloud Messaging.

EMMA_9.png


Ahora Google combina las notificaciones Push con Firebase. Haz click en el botón de "Primeros Pasos"

EMMA_10.png

Importa el proyecto de Google a Firebase.

EMMA_11.png

Selecciona el proyecto y añádelo.

EMMA_12.png

Una vez añadido el proyecto, tu API estará correctamente configurada.

 

Integración Messaging

Messaging incluye 6 formatos comunicativos diferentes que puedes integrar para impactar a tus usuarios:

 En muchos de estos formatos comunicativos puedes delimitar las url's de redirección que quieres introducir. Con la funcionalidad de EMMA Whitelist puedes delimitar qué contenido quieres que se muestre en las webviews programadas. 

 

Usando EMMA Banner 

EMMA Banner le muestra al usuario un banner en su app con información promocional personalizable. El banner se mostrará y esconderá dependiendo de la configuración que se establezca en la plataforma. Si se presiona dicho banner se abrirá una webview con contenido en HTML.

EMMA_13.png

 

La interfaz bannerInterface de tipo eMMaBannerInterface es un callback que se ejecuta cuando el banner se muestra o cuando no hay banners disponibles.

Para habilitarlos en su app se necesita al menos implementar el primer método.

Revisar Banner 

eMMa.checkForBanner(context);

Usa checkForBanner para confirmar si se muestra el Banner creado en la plataforma de EMMA . Utiliza Activity donde quiera mostrar el Banner como contexto.

Banner con etiqueta

eMMa.checkForBanner(context, labelString, bannerInterface);

Si lo deseas puedes pasar un custom String que etiquete el Banner en caso de que utilices más de un Banner en tu app y necesites distinguirlos.

Banner con botón de cierre 

eMMa.checkForBanner(context, closeButton, bannerInterface);

En caso de requerirlo, puedes pasar un custom Button para utilizarlo en la webview que se abra.

Banner con márgenes

eMMa.checkForBanner(context, labelString, topMarginY, bottomMarginY, bannerInterface);

Puedes establecer diferentes márgenes para el banner en caso de querer dejar algo de espacio en la parte inferior (para banners configurados para la parte de abajo de la app) o superior (para aquellos que aparecerán arriba) del banner.

Banner con interfaz 

eMMa.checkForBanner(context, myButton, myLabel, myParams, myWebviewInterface, topMarginY, bottomMarginY, bannerInterface);

Para saber qué URL está siendo mostrada en ese momento en la webview y qué enlaces son abiertos por el usuario, puedes enviar como un parámetro una clase que implemente la interfaz eMMaWebViewInterface y su método oneeMMaWebviewClick(String url). Así recibirás la etiqueta de la URL cada vez que esta se descargue.

Cerrar Banner

eMMa.closeBanner();

Usa closeBanner para poder retirar su último banner manualmente. Esto será posible cuando haya un banner que cerrar.

Extra: puede usar una mezcla de todos estos métodos para así pasar más parámetros. Ve el apéndice con todas las opciones de cabecera de EMMA

 

Usando EMMA Startview 

EMMA StartView es un formato de Comunicación In-App que muestra una webview en HTML cuando se abre una app o en pantallas concretas de esta.

EMMA_14.png

Para habilitarla en tu app, necesitas ejecutar primero el método starteMMaSession.

checkForWebview(Context ctx);

La StartView se presentará en el elemento raíz y se puede utilizar en el método de actividad onCreate() para mostrarlo la primera vez, en onResume() para lanzarlo cada vez que se inicie la actividad de la app, o cuando lo estime oportuno.

Revisar WebView

Usa checkForWebview para mostrar si el StartView configurado en la plataforma de EMMA aparece a continuación en la app y que para que esto ocurra de forma automática.

eMMa.checkForWebview(this);

StartView con botón de cierre 

Si lo deseas puedes incluir un botón de cierre en la webview.

eMMa.checkForWebview(this, myButton);

StartView con parámetros

Es posible pasar un Map<String,String> de parámetros (key-value pair) que se enlazarán a la URL como GET parámetros. Esto es útil en caso de que necesites pasar ciertos datos desde la app a la StartView con una landing page.

eMMa.checkForWebview(this, myParams);

StartView con etiqueta

Puedes pasar una etiqueta (label) de la StartView en caso de que trabajes con más de una StartView en la app y necesites distinguirlas.

eMMa.checkForWebview(this, myLabel);

StartView con interferencia

eMMa.checkForWebview(this, myButton, myLabel, myParams, myWebviewInterface);

Opción para poder determinar qué URLs están siendo mostradas en ese momento en la app y qué enlaces presionan los diferentes usuarios. Puedes pasar como un parámetro una clase que implemente la interfaz eMMaWebViewInterface y su método oneMMaWebViewClick(String url) para recibir la etiqueta de la URL cada vez que una nueva se descargue.

public class MyClass implements eMMaWebViewInterface {
@Override
public void oneMMaWebviewClick(String url) {
}
}

Cerrar StartView 

eMMa.closeWebview();

Cerrar la StartView que se muestra. Este método es útil si el usuario realiza un clic de redirección y quieres que la StartView se cierre por si misma sin necesidad de que el usuario lo haga expresamente.

Extra: puede usar una mezcla de todos estos métodos para así pasar más parámetros. Ve el apéndice con todas las opciones de cabecera de EMMA.

 

Usando EMMA Adball 

EMMA AdBall te permite mostrar un pequeño gráfico circular en tu aplicación que el usuario puede desplazar libremente por la pantalla de inicio de la app y también cerrarla. Si se presiona sobre este aparece un pop-up con contenido HTML.

EMMA_15.png

Si deseas habilitar el AdBall necesita al menos implementar el primer método. Se puede configurar siguiendo estas indicaciones.

Revisar AdBall 

eMMa.checkForAdBall(context);

Se debe utilizar checkForAdBall para revisar que los AdBalls configurados en la plataforma de EMMA aparecerán después en la aplicación.

AdBall con etiqueta

eMMa.checkForAdBall(context, labelString);

Determine dónde desea situar el AdBall como contexto. Si lo deseas puedes pasar un custom String que etiquete el AdBall en caso de que utilice más de un AdBall en su app y necesite distinguirlos.

AdBall con parámetros 

eMMa.checkForAdBall(context, myParams);

Es posible pasar un Map<String,String> de parámetros (key-value pair) que se enlazarán a la URL como GET parámetros. Esto es útil en caso de que necesites pasar ciertos datos desde la app a la webview del AdBall.

AdBall con interferencia

eMMa.checkForAdBall(context, myLabel, myParams, myWebviewInterface);

Opción para poder determinar qué URLs están siendo mostradas en ese momento en la app y qué enlaces presionan los diferentes usuarios. Puedes pasar como un parámetro una clase que implemente la interfaz eMMaWebViewInterface y su método oneMMaWebViewClick(String url) para recibir la etiqueta de la URL cada vez que una nueva se descargue.

Close AdBall 

eMMa.closeAdBall();

Usa closeAdBall cuando quiera cerrar su último AdBall manualmente. Esto se hará únicamente cuando haya una AdBall que poder cerrar.

Extra: puedes usar un conjunto de todos estos métodos para así pasar más parámetros. Ve el apéndice con todas las opciones de cabecera de EMMA .

 

Usando EMMA Dynamic Tab

La DynamicTab te permite mostrar información HTML en una sección de su app, sólo si ya usas un TabHost o tabs en el ActionBar de tu app.

 EMMA_16.png

Si utilizas un TabHost con Activities:

checkForPromoOnTabHost(Context ctx, TabHost mTabHost, TabSpec mTabSpec,
Map<String,String> params);

Usa checkForPromoOnTabHost para revisar que el DynamicTab configurado en la plataforma de EMMA aparece después en la app y lo hace automáticamente. Puedes pasar los siguientes parámetros:

ctx:

Objeto de contexto.

mTabHost:

TabHost donde desea incluir la nueva sección.

mTabSpec:

(Opcional) TabSpec para personalizar su nueva sección

params:

(Opcional) Mapa de parámetros (key-value pair) que se enlazarán a la URL como parámetros GET, lo cual es útil si quieres pasar información de la app a la webview que se despliegue.

Extra: puedes usar métodos abreviados si no necesitas todos los parámetros. Ve el apéndice con todas las opciones de cabecera de EMMA .

Nuevo e importante: el título y la imagen del nuevo tab puede ser especificado en la plataforma de EMMA . Si así se hace, esta configuración prevalecerá sobre otra que sea local. En versiones de Android >3, la imagen de la tab ya no se soporta.

Añade la Activity eMMaTabWebView a tu AndroidManifest.xml:

.
.
.
android:label="eMMaPromoTab">

Si utilizas un TabHost con fragmentos o tabs en el ActionBar:

checkForPromoFragment(eMMaPromoFragmentInterface context);

Usa checkForPromoFragment para revisar que el DynamicTab configurado en la plataforma de EMMA aparece después en la app. Si efectivamente se añade, llamará al método eMMaPromoFragmentInterface'sonAddeMMaTab(String url, String title, String imageUrl), el cual debería implementar añadiendo el Fragment a su TabManager o TabListener (como con el resto de fragmentos).

Para crear este Fragment puede añadir a su proyecto la clase eMMaFragmentWebView, y pasar la URL dada.

public class Main extends FragmentActivity implements eMMaPromoFragmentInterface {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
eMMa.starteMMaSession(this, "YOURSESSIONKEY");
eMMa.checkForPromoFragment(this);
.
.
.
}
@Override
public void onAddeMMaTab(String url, String title, String imageUrl) {
/* Use one of this methods to create the Fragment and add it to your
* TabHost or ActionBar just like the other Fragments.
*/
//Method 1
Fragment f1 = eMMaFragmentWebView.newInstance(url);
//Method 2
Bundle bundle = new Bundle();
bundle.putString(“url”, url);
String className = eMMaFragmentWebView.class.getName();
Fragment f2 = Fragment.instantiate(this, className, bundle);
}
}

 

Usando EMMA Strip

El EMMA Strip te permite mostrar un banner de texto sobre donde se sitúa habitualmente el Status Bar con un mensaje para sus usuarios. Este puede ser desplegado en cualquier pantalla de la app.

 EMMA_17.png

Revisar Strip

eMMa.checkForStrip(context);

Emplear checkForStrip para confirmar que los Strips configurados en EMMA se despliegan a continuación en la aplicación.

Strip con etiqueta

eMMa.checkForBanner(context, labelString)

Si lo deseas puedes pasar un custom String que etiquete los Strips en caso de que utilice más de uno y necesites distinguirlos. 

Extra: es posible utilizar un conjunto de los anteriores métodos para así pasar más parámetros. Revisa para ello el apéndice con todas las opciones de los EMMA Header.

 

Usando EMMA Coupons

EMMA Coupons te permite obtener, verificar, canjear cupones que se hayan definido y configurado en la plataforma de EMMA.

EMMA_18.png

Obtener Coupons 

eMMa.getCoupons(contexto)

Con esta llamada, obtendremos toda la información de los coupons disponibles para el usuario, según las condiciones que se hayan configurado en la plataforma de EMMA .

El parámetro contexto debe ser de tipo eMMaCouponsInterface.

getCoupons llama a eMMaCouponsInterface.onCouponsReceived(ArrayList<eMMaCoupon>) en el caso de que el usuario tenga disponibles coupons para canjear o a eMMaCouponsInterface.onCouponsFailure() si el usuario no tiene coupons disponibles.

eMMaCoupon contiene toda la información relativa al coupon: id (identificador interno de eMMa), código, número máximo de canjeos, número de veces canjeado, título, descripción, imagen …

Detalles de un Coupon

eMMa.getCoupon(contexto, int couponId)

Con esta llamada, obtendremos la información relativa a un coupon concreto.

El parámetro contexto debe ser de tipo eMMaCouponsInterface.

El parámetro couponId debe ser el identificador interno de EMMA de un coupon, identificador que se puede obtener de una llamada a getCoupons hecha con anterioridad.

getCoupon llama a eMMaCouponsInterface.onSingleCouponReceived(eMMaCoupon) en el caso de que el coupon indicaco exista o a eMMaCouponsInterface.onCouponsFailure() en caso contrario.

eMMaCoupon contiene toda la información relativa al coupon: id (identificador interno de eMMa), código, número máximo de canjeos, número de veces canjeado, título, descripción, imagen …

Revisar la validez de un Coupon 

eMMa.getCouponValidRedeems(contexto, int couponId)

Con esta llamada podemos comprobar si el usuario puede canjear el coupon indicado.

El parámetro contexto debe ser de tipo eMMaCouponsInterface.

El parámetro couponId debe ser el identificador interno de EMMA de un coupon, identificador que se puede obtener de una llamada a getCoupons hecha con anterioridad.

getCouponValidRedeems llama a eMMaCouponsInterface.onCouponValidRedeemsReceived(int numRedeems), donde numRedeems indica el número de veces que todavía puede ser canjeado el coupon o -1 en caso de error. 

Canjear un coupon 

eMMa.redeemCoupon(contexto, int couponId)

Con esta llamada, el usuario canjea el coupon indicado.

El parámetro contexto debe ser de tipo eMMaCouponsInterface.

El parámetro couponId debe ser el identificador interno de EMMA de un coupon, identificador que se puede obtener de una llamada a getCoupons hecha con anterioridad.

redemmCoupon llama a eMMaCouponsInterface.onCouponRedemption(boolean success), donde success indica si se ha canjeado el coupon.

Cancelar un coupon

eMMa.cancelCoupon(contexto, int couponId)
eMMa.cancelCoupon(contexto, int couponId, int cancelCount)

Con esta llamada se puede cancelar el canjeo de un coupon realizado con anterioridad.

El parámetro contexto debe ser de tipo eMMaCouponsInterface.

El parámetro couponId debe ser el identificador interno de EMMA de un coupon identificador que se puede obtener de una llamada a getCoupons hecha con anterioridad.

Opcionalmente se puede indicar un parámetro cancelCount si se quiere cancelar más de un canjeo realizado con anterioridad, si no se indica, se cancelará una vez el coupon.

cancelCoupon llama a eMMaCouponsInterface.onCouponCancelled(boolean success), donde success indica si se ha cancelado el coupon. 

 

EMMA Whitelist

Versión mínima del SDK: 2.5.6 o superior

Con esta funcionalidad podemos limitar las urls que abrirá el SDK de EMMA, de modo que en las comunicaciones In-App, sólo se mostrarán en un Webview aquel contenido que empiece por alguna de las urls que hayamos indicado en la whitelist.

Si no indicamos ninguna url en la whitelist, cualquier url está permitida.

Esta funcionalidad afectaría a los Push (Rich URL), Banners, StartViews, AdBalls y DynamicTabs.

Las comunicaciones (Banners, StartViews, AdBalls y DynamicTabs)  pueden cargar contenido externo a la app mediante un Webview y para los Banners, AdBalls y DynamicTabs podrían cargar imágenes externas que también serían controladas por la whitelist.

Para un Push con Rich URL, si ésta no cumple, no se abriría la Webview correspondiente, pero el push sí que llega a la aplicación, hay que tener en cuenta que si en vez de una url se emplea un deeplink, el scheme del deeplink debe ser añadido a la whitelist para poder abrirlo.

Cómo se usa 

Debemos llamar a este método después del starteMMaSession y antes de llamar a cualquier método relativo a las comunicaciones In-App.

eMMa.setWhitelist(List<String> urls);

Ejemplos

Si mi whitelist es “http://mydomain.com”.

List<String> whitelist = Arrays.asList("http://mydomain.com");
eMMa.setWhitelist(whitelist);

Ejemplo 1:

Subimos al dashboard de EMMA un Banner con Target URL https://mydomain.com

El Banner no se mostrará, deberíamos añadir a la whitelist https://mydomain.com

Ejemplo 2:

Configuramos en el dashboard de EMMA una StartView con StartView URL http://www.mydomain.com

La StartView no se mostrará, deberíamos añadir a la whitelist http://www.mydomain.com

Ejemplo 3:

Configuramos en el dashboard de EMMA un Banner con Target URL http://mydomain.com/my/url y SmartPhone Banner URL http://subdomain.mydomain.com/my/image

El Banner no se mostrará, la url de la imagen no cumple con la whitelist, deberíamos añadir a la whitelist http://subdomain.mydomain.com

Ejemplo 4:

Subimos al dashboard de EMMA un Banner con Target URL http://mydomain.com/my/url/

El Banner se mostrará porque la url introducida en el campo Target URL empieza por el mismo protocolo y dominio que la url de la whitelist

Ejemplo 5:

Configuramos en el dashboard de EMMA una StartView con StartView URL http://mydomain.com/mypage.html&param=value

La StartView se mostrará porque la url intoducida en el campo StartView URL empieza por el mismo protocolo y dominio que la url de la whitelist

 

Depurando el código

Este paso es opcional. Si necesitas ver el log de EMMA, habilítelo antes de starteMMaSession llamando:

eMMa.setDebuggerOutput(true);

Ten en cuenta que EMMA no trabaja estrictamente en tiempo real. Se puede tardar hasta una hora en ver sus datos.

¿Tiene más preguntas? Enviar una solicitud

0 Comentarios

El artículo está cerrado para comentarios.