| ES
guía avanzada para configurar el SDK de Android
En esta sección encontrarás una serie de funcionalidades más avanzadas y que requieren de un desarrollo más complejo. Aconsejamos que sea un desarrollador el encargado de esta configuración.
El SDK de indigitall puede gestionar la localización del usuario. Esto te permite usar los filtros de localización en la pantalla de enviar campaña push (Campañas>Push>Nueva campaña push>Filtros>Filtros geográficos)
Una vez hayamos habilitado esta funcionalidad, el usuario final tendrá que dar su consentimiento al permiso de localización y habilitar los servicios de localización de su smartphone, para que la aplicación obtenga la ubicación exacta del usuario.
Añade los permisos de localización incluyendo esta línea en el archivo AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Puedes encontrar el archivo AndroidManifest.xml en la siguiente ruta:
Hay dos modos de gestionar los permisos de localización:
A continuación te explicamos cómo configurar los permisos de localización en modo automático.
Hay que añadir el parámetro AutoRequestPermissionLocation cuando se inicialice el SDK. Esto se hace mediante el siguiente extracto de código:
//Cuando quieres inicializar indigitall
Configuration config = new Configuration
.Builder("<YOUR-APP-KEY>", "<YOUR-SENDER-ID>")
.setAutoRequestPermissionLocation(true)
.build();
Indigitall.init(context, config);
En Android hay una clase donde se recibe el estado de los permisos después de que el usuario los haya cambiado mediante la configuración. Habría que añadir el siguiente trozo de código para capturar el estado de los permisos:
//En la clase que usas para recibir los resultados de pedir los permisos
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
Indigitall.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}
La Activity por defecto es la pantalla inicial de tu app que se lanza cuando un usuario pulsa en una notificación que no lleva deeplink. También es el punto donde debes inicializar el SDK. Se establece mediante el parámetro DefaultActivity:
//Cuando quieres iniciar indigitall
Configuration config = new Configuration
.Builder("<YOUR-APP-KEY>", "<YOUR-SENDER-ID>")
.setDefaultActivity("YOUR_ACTIVITY")
.build();
Indigitall.init(context, config);
Puedes asociar tu propio ID a cada dispositivo. De esta forma te será más sencillo e intuitivo trabajar con nuestra herramienta. Por ejemplo:
Para realizar esta asociación entre tu ID personalizado (externalId), y el identificador que maneja indigitall (deviceId), hay que invocar el método setExternalCode:
//Recuerda poner aquí tu código externo
Indigitall.setExternalCode(this, "YOUR_EXTERNAL_ID", new DeviceCallback(context) {
@Override
public void onSuccess(Device device) {
//DO SOMETHING
}
@Override
public void onFail() {
//LOG ERROR
}
});
No te preocupes por nada. Tus IDs se cifran de forma irreversible en el propio teléfono y se mandan de forma segura a nuestros servidores. Ni siquiera el equipo de indigitall puede conocer esta información.
Si se requiere recoger la información de la WiFi del usuario, además de la configuración del panel de Indigitall, deberás añadir en el manifest los permisos que se exponen a continuación, el servicio correspondiente al filtro y añadir el parámetro wifiFilterEnabled cuando se inicialice el SDK:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
// ANDROID 12 WIFI
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
//Servicio WiFi
<service
android:name="com.indigitall.android.services.WifiStatusService"
android:permission="android.permission.BIND_JOB_SERVICE" >
</service>
<receiver android:name="com.indigitall.android.receivers.WifiWakeLockReceiver">
<intent-filter>
<action android:name="AlarmReceiver.Action.NETWORK_ALARM" />
</intent-filter>
</receiver>
//Cuando quieres iniciar indigitall
Configuration config = new Configuration
.Builder("<YOUR-APP-KEY>", "<YOUR-SENDER-ID>")
.wifiFilterEnabled(true)
.build();
Indigitall.init(context, config);
Desde android 8.0 para obtener los datos de las WiFi, que estén añadidos al manifest los permisos de localización. Mas información aquí: Android Developers
Si por alguna razón no se desea mostrar la push como la muestra android nativo, dejamos esta opción para mostrar la push con nuestro layout custom. Para ello añade el siguiente código en la configuración antes de llamar al init:
//Cuando quieres iniciar indigitall
Configuration config = new Configuration
.Builder("<YOUR-APP-KEY>", "<YOUR-SENDER-ID>")
.setLayoutBasic(LayoutBasic.custom)
.build();
Indigitall.init(context, config);
Si eres CLIENTE ENTERPRISE tienes que añadir este parámetro en la configuración para que la SDK apunte al entorno correcto:
//Cuando quieres iniciar indigitall
Configuration config = new Configuration
.Builder("<YOUR-APP-KEY>", "<YOUR-SENDER-ID>")
.setUrlDeviceApi(YOUR_DEVICE_API_DOMAIN)
.setUrlInAppApi(YOUR_INAPP_API_DOMAIN)
.setUrlInboxApi(YOUR_INBOX_API_DOMAIN)
.build();
Indigitall.init(context, config);
Nuestro SDK ofrece diversos callbacks que te ayudan tener mayor control del flujo de ejecución y a implementar comportamientos personalizados.
Para suscribirte a estos callbacks tienes que:
Indigitall.init(context, config, new InitCallBack(context){
@Override
public void onIndigitallInitialized(Permission[] permissions, Device device) {}
@Override
public void onNewUserRegistered(Device device) {}
@Override
public void onErrorInitialized(String error) {}
});
El método onIndigitallInitialized del objeto InitCallBack se ejecutará cuando el SDK termine de inicializarse y el dispositivo esté preparado para recibir notificaciones de indigitall.
Recibe como parámetro:
A continuación te mostramos un ejemplo que imprime logs sobre el estado de los permisos y la información del dispositivo.
Indigitall.init(context,config, new InitCallBack(context){
@Override
public void onIndigitallInitialized(Permission[] permissions, Device device) {
super.onIndigitallInitialized(permissions, device);
Log.d("Push Permission: ", permissions[0].toString());
Log.d("Location Permission: ", permissions[1].toString());
Log.d("Device: ", device.toString());
}
});
El método onNewUserRegistered del objeto InitCallBack se ejecutará cuando el dispositivo ha sido registrado por primera vez, es decir, en la primera ejecución de la app tras ser instalada.
Recibe como parámetro el objeto Device con la información asociada al dispositivo.
Indigitall.init(context, config, new InitCallBack(context){
@Override
public void onNewUserRegistered(Device device) {
super.onNewUserRegistered(device);
Log.d("Device: ", device.toString());
}
});
El método onErrorInitialized del objeto InitCallBack se ejecutará sólo si se produce un error durante la inicialización del SDK.
Recibe como parámetro la descripción del error.
Indigitall.init(context, config, new InitCallBack(context) {
@Override
public void onErrorInitialized(String error) {
super.onErrorInitialized(error);
Log.d("Error on Indigitall.init: ", error);
}
});
Puedes usar el método deviceGet para obtener la información que ha registrado el SDK en referencia al dispositivo.
Debes instanciar un objeto DeviceCallback y pasarlo como segundo parámetro del método deviceGet. Este callback recibirá como parámetro el objeto device que contiene toda la información asociada al dispositivo.
Indigitall.deviceGet(context, new DeviceCallback() {
@Override
public void onSuccess(Device device) {
Log.d("Device: ", device.toString());
}
@Override
public void onFail() {}
});
Puedes elegir deshabilitar el dispositivo para bloquear la recepción de notificaciones. Es un método muy útil para:
Para ello, dispones de los métodos deviceEnable y deviceDisable.
Debes instanciar un onjeto DeviceCallback y pasarlo como segundo parámetro. Este callback recibirá como parámetro el objeto device que contiene toda la información asociada al dispositivo.
Indigitall.deviceEnable(context, new DeviceCallback(context) {
@Override
public void onSuccess(Device device) {
Log.d("Device: ", device.toString());
}
@Override
public void onFail() {}
});
Indigitall.deviceDisable(context, new DeviceCallback(context) {
@Override
public void onSuccess(Device device) {
Log.d("Device: ", device.toString());
}
@Override
public void onFail() {}
});
Nuestro SDK te permite clasificar a los usuarios en diferentes grupos personalizables. Esto es muy útil para:
Recuerda que primero debes definir los grupos con los que quieres trabajar en la consola de indigitall (Herramientas > Grupos de interés). Consulta nuestro manual de usuario para más info.
Usa el método topicsList para obtener la lista de grupos que están configurados en tu proyecto de indigitall. El callback de este método recibe como parámetro un array de Topics, que contiene la información de todos los grupos disponibles, además de un flag que indica si el usuario está incluido en alguno de ellos.
Indigitall.topicsList(context, new TopicsCallback() {
@Override
public void onSuccess(Topic[] topics) {
//DO SOMETHING
}
@Override
public void onFail() {}
});
Para gestionar la suscripción del dispositivo a uno o varios grupos, existen dos métodos: topicsSubscribe y topicsUnsubscribe.
Opcionalmente ambos reciben un objeto TopicsCallback como tercer parámetro, que devolverá el listado de todos los Topic del proyecto.
//topics is typeof Topic[] or typeof string[]
Indigitall.topicsSubscribe(context, topics, new TopicsCallback() {
@Override
public void onSuccess(Topic[] topics) {}
@Override
public void onFail() {}
});
//topics is typeof Topic[] or typeof string[]
Indigitall.topicsUnsubscribe(context, topics, new TopicsCallback() {
@Override
public void onSuccess(Topic[] topics) {}
@Override
public void onFail() {}
});
Tu app puede mandar información a los servidores de indigitall para identificar las acciones y eventos que suceden en ella. Esto te permite automatizar acciones de retargeting.
Para registrar estos eventos hay que llamar al método sendCustomEvent, pasando como parámetro un ID descriptivo (puedes inventarte el que más te guste) y añadir los datos que necesites.
Indigitall.sendCustomEvent(context, "YOUR_EVENT_ID", JSONObject("YOUR_CUSTOM_DATA"),object: EventCallback(context){
override fun onSuccess() {
// Do something in success function
}
override fun onError(error: Error) {
//SHOW ERROR
}
})
Si quieres integrar los mensajes In-App en tu aplicación, puedes hacerlo con varios formatos complementarios:
A continuación te contamos como instanciar uno o varios mensajes In-App en formato banner.
Recuerda que primero deberías tenerlos definidos en la consola de indigitall. Consulta nuestro manual de usuario para más info.
Crea una vista de WebView en tus layouts. El tamaño debe coincidir con el que hayas definido en la consola de indigitall (Herramientas > Esquemas In-App/In-Web). Recuerda traducir las unidades de PX a DP.
Si se configura en la consola que el banner se oculte a X segundos, hay que añadir a la llamada la activity en la que se encuentra el inApp y añadir el callback didDismissed en donde te indicará que ha transcurrido el tiempo configurado, devolviendo el webView y el código de inApp para que puedas, por ejemplo, ocultarlo.
Puedes seguir el ejemplo de a continuación:
<WebView
android:id="@+id/myBanner"
android:layout_width="230dp"
android:layout_height="33.33dp"
/>
Instancia el mensaje In-App usando el método showInApp.
WebView view = findViewById(R.id.myBanner);
Indigitall.showInApp(getContext(), "myBanner_CODE", view, new ShowInAppCallback() {
@Override
public void onLoad(String inAppCode, WebView webView) {
Log.d("InApp loaded: ", inAppCode);
}
@Override
public void onSuccess(InApp inApp) {
Log.d("In-App: ", inApp);
}
@Override
public void onFail(String inAppCode, WebView webView, String message) {}
});
//Si se configura en la campaña para que el banner se oculte a X segundos:
Indigitall.showInApp(getContext(), "myBanner_CODE", view, new InAppCallback() {
@Override
public void onLoad(String inAppCode, WebView webView) {
Log.d("InApp loaded: ", inAppCode);
}
@Override
public void onSuccess(InApp inApp) {
Log.d("In-App: ", inApp);
}
@Override
public void onFail(String inAppCode, WebView webView, String error) {
}
@Override
public void onShowTimeFinished(String inAppCode, WebView webView, int showTime) {
super.onShowTimeFinished(inAppCode, webView, showTime);
}
});
Puedes seguir el ejemplo de a continuación:
<WebView
android:id="@+id/myBanner"
android:layout_width="230dp"
android:layout_height="33.33dp"
/>
<WebView
android:id="@+id/otherBanner"
android:layout_width="250dp"
android:layout_height="36dp"
/>
Instancia los mensajes In-App usando el método showInApp.
ArrayList<WebView> views = new ArrayList<>();
views.add(findViewById(R.id.myBanner));
views.add(findViewById(R.id.otherBanner));
ArrayList<String> codes = new ArrayList<>();
codes.add("myBanner_CODE");
codes.add("otherBanner_CODE");
Indigitall.showMultipleInApp(getContext(), codes, views, new ShowInAppCallback() {
@Override
public void onLoad(String inAppCode, WebView webView) {
Log.d("InApp loaded: ", inAppCode);
}
@Override
public void onSuccess(InApp inApp) {
Log.d("In-App: ", inApp);
}
@Override
public void onFail(String inAppCode, WebView webView, String message) {}
});
//Si se configura en la campaña para que el banner se oculte a X segundos:
Indigitall.showMultipleInApp(getContext(), inAppCodeList, webViewList, new InAppCallback() {
@Override
public void onLoad(String inAppCode, WebView webView) {
Log.d("InApp loaded: ", inAppCode);
}
@Override
public void onSuccess(InApp inApp) {
Log.d("In-App: ", inApp);
}
@Override
public void onFail(String inAppCode, WebView webView, String error) {}
@Override
public void onShowTimeFinished(String inAppCode, WebView webView, int showTime) {
super.onShowTimeFinished(inAppCode, webView, showTime);
Log.d("InApp onShowTimeFinished " + inAppCode);
}
});
A continuación te contamos como instanciar un mensaje In-App en formato popup.
Recuerda que primero deberías tenerlo definido en la consola de indigitall. Consulta nuestro manual de usuario para más info.
Crea una vista de WebView en tus layouts. El tamaño debe coincidir con el que hayas definido en la consola de indigitall (Herramientas > Esquemas In-App/In-Web). Recuerda traducir las unidades de PX a DP.
ConstraintLayout view = findViewById(R.id.myPopupParentLayout)
Indigitall.showPopUp(view, getContext(), "myPopup_CODE", new ShowInAppCallback() {
@Override
public void onLoad(String inAppCode, WebView webView) {
Log.d("In-App loaded: ", inAppCode);
}
@Override
public void onSuccess(InApp inApp) {
Log.d("In-App: ", inApp);
}
@Override
public void onFail(String inAppCode, WebView webView, String message) {}
@Override
public void didClicked() {
Log.d("popUp","didClicked")
}
@Override
public void didClosed() {
Log.d("popUp","didClosed")
}
@Override
public void didDismissed() {
Log.d("popUp","didDismissed")
}
@Override
public void onShowTimeFinished(
String inAppCode,
WebView webView,
int showTime
) {
Log.d("popUp", "onShowTimeFinished")
}
});
Si quieres personalizar el icono de cerrar el Popup, puedes hacerlo con el siguiente método al que le podrás pasar un ImageButton personalizado, si quisieras usar nuestro icono, bastaría con pasar un null. El parámetro closeIconDisabled es por si no quieres mostrar ningún icono, definiendo éste a true para ocultarlo o false para mostrarlo.
ConstraintLayout view = findViewById(R.id.myPopupParentLayout)
ImageButton myImageButton = ImageButton(context);
.
.//set ImageButton params
.
boolean closeIconDisabled = false
Indigitall.showPopUp(view, getContext(), "myPopup_CODE", myImageButton, closeIcon, new ShowInAppCallback() {
@Override
public void onLoad(String inAppCode, WebView webView) {
Log.d("In-App loaded: ", inAppCode);
}
@Override
public void onSuccess(InApp inApp) {
Log.d("In-App: ", inApp);
}
@Override
public void onFail(String inAppCode, WebView webView, String message) {}
@Override
public void didClicked() {
Log.d("popUp","didClicked")
}
@Override
public void didClosed() {
Log.d("popUp","didClosed")
}
@Override
public void didDismissed() {
Log.d("popUp","didDismissed")
}
@Override
public void onShowTimeFinished(String inAppCode, WebView webView, int showTime) {
super.onShowTimeFinished(inAppCode, webView, showTime);
Log.d("InApp onShowTimeFinished " + inAppCode);
}
});
En esta sección encontrarás una serie de funcionalidades más avanzadas y que requieren de un desarrollo más complejo. Aconsejamos que sea un desarrollador el encargado de esta configuración.
Para poder obtener las notificaciones del Inbox de Indigitall, el usuario debe identificarse. Primero hay que inicializar la SDK de Indigitall para que genere nuestro identificador (deviceId) y poder asociarlo al ID personalizado que asocies a dispositivo, similar a como se explica aquí.
Para realizar las tareas de registro, se usan estos dos métodos:
//Identificación de usuario
Indigitall.logIn(this, "YOUR_EXTERNAL_ID", new DeviceCallback(context) {
@Override
public void onSuccess(Device device) {
//DO SOMETHING
}
@Override
public void onFail() {
//LOG ERROR
}
});
//Desconexión
Indigitall.logOut(this, new DeviceCallback(context) {
@Override
public void onSuccess(Device device) {
//DO SOMETHING
}
@Override
public void onFail() {
//LOG ERROR
}
});
En esta sección verás cómo se genera un token de validación para una aplicación que tenga configurado una autentificación con webhook. Para generar dicho token, se necesita añadir el JSON con la configuración.
El token tiene una fecha predeterminada de caducidad, una vez caducado en nuestro sistema, se lanzará un evento listener de tipo InboxAuthListener que indicará dicha caducidad y tendrá que devolvernos el JSON de configuración. Para recoger el listener, hay que implementarlo en la clase correspondiente, y sobreescribir el siguiente método:
public class YOUR_CLASS implements InboxAuthListener{
.
.
.
@Override
public JSONObject getAuthConfig() {
return MY_JSON;
}
Una vez hecho el registro del dispositivo correctamente, se puede empezar a realizar las peticiones del Inbox. Hay que tener en cuenta las siguientes características del Inbox, que opcionalmente son configurables.
Las notificaciones del Inbox tendrán los siguiente estados de la clase InboxStatus:
Las notificaciones también vendrán con un estado leído o 'read', para ayudar a diferenciar dichos estados.
Cada notificación vendrá asignada con un sendingId entero y único, para poder diferenciarlos y usarlos para algunas de las funcionalidades.
En el caso particular de Android, cuando llega una nueva push de Indigitall al dispositivo del cliente, se genera una acción definida en un intent, que se puede utilizar para avisar al usuario de que tiene un nuevo mensaje en el Inbox. Para recogerlo hay que implementarlo de la siguiente manera:
@Override
protected void onResume() {
super.onResume();
if (getIntent() != null && getIntent().getExtras() != null){
Bundle extras = getIntent().getExtras();
if( extras != null && extras.containsKey(Push.EXTRA_PUSH)) {
//DO SOMETHING
}
}
}
Como se ha explicado anteriormente, para obtener las notificaciones se usa el siguiente método:
Inbox.Companion.getInbox(context, new InboxCallback(context) {
@Override
public void onSuccess(Inbox inbox) {
//DO SOMETHING
}
@Override
public void onError(Error error) {
//LOG ERROR
}
});
Una vez obtenida la instancia Inbox, la usaremos para pedir la siguiente página, que se realizada con el siguiente métoto, en el caso de que no haya más páginas te lo indicará en el error con el códigoo 410:
inbox.getNextPage(context,new InboxCallback() {
@Override
public void onSuccess(Inbox inbox, newNotifications: ArrayList<InboxNotification>?) {
//DO SOMETHING
}
@Override
public void onError(Error error) {
if (error.code == 410){
//LOG NO HAY MÁS PÁGINAS
}else{
//LOG ERROR
}
}
});
Ten en cuenta que el callback del Inbox a parte de devolver el Inbox actualizado, devuelve un array que se llama newNotifications, en el que se irán las nuevas notificaciones que añadir al Inbox, para que, en caso de ser necesario, poder utilizar dicho array para moverte entre las páginas sin depender de las llamadas al Inbox.
Para obtener la información de una notificación en particular, hay que hacer la siguiente llamada con el sendingId de cada notificación:
inbox.getInfoFromNotification(context, SENDING_ID , new InboxNotificationsCallback(context) {
@Override
public void onSuccess(InboxNotification inboxNotification) {
//DO SOMETHING
}
@Override
public void onError(Error error) {
//LOG ERROR
}
});
Para editar el estado de una o más notificaciones a la vez, se realiza con el siguiente método en el que se deben indicar los sendingIds de las notificaciones a editar y el estado al que se quiere cambiar:
//Modificar una notificación
inbox.modifyStatusFromNotification(context,SENDING_ID,STATUS,new InboxNotificationsCallback(context) {
@Override
public void onSuccess(InboxNotification inboxNotification) {
//DO SOMETHING
}
@Override
public void onError(Error error) {
//LOG ERROR
}
});
//Modificar masivamente
inbox.massiveEditNotifications(context,[SENDING_IDS],STATUS,new BaseCallback() {
@Override
public void onSuccess(JSONObject json) {
//DO SOMETHING
}
@Override
public void onError(Error error) {
//LOG ERROR
}
});
Para saber el número de notificaciones que hay en el Inbox según su estado, se reliza este método:
Inbox.Companion.getMessagesCount(context, new InboxCountersCallback(context) {
@Override
public void onSuccess(InboxCounters inboxCounters) {
//DO SOMETHING
}
});
Si tienes clases personalizadas de Firebase, puede que necesites deshabilitar los siguientes servicios del SDK, definidos en el manifest.xml.
<!-- <service
android:name="com.indigitall.android.services.FirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service
android:name="com.indigitall.android.services.FirebaseInstanceIdService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service> -->
Si este es tu caso, debes agregar este código para asegurar que las notificaciones enviadas desde indigitall, se reciban y se muestren.
En el servicio asociado a la acción _com.google.firebase.INSTANCE_IDEVENT añade esta línea para registrar el push token.
@Override
public void onTokenRefresh() {
FirebaseUtils.setPushToken(context);
}
En el servicio asociado a la acción _com.google.firebase.MESSAGINGEVENT, si la notificación proviene de indigitall, las siguientes líneas de código harán que se pinte.
//Google
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if(remoteMessage.getData() != null && !FirebaseUtils.pushNotificationIndigitall(remoteMessage, context)){
//Your Code
}
}
//Huawei
override fun onMessageReceived(newRemoteMessage: RemoteMessage?) {
if(remoteMessage.getData() != null && !HMSUtils.pushNotificationIndigitall(remoteMessage, context)){
//Your Code
}
}
En el caso de que quisieras obtener el objeto push de tipo json para realizar comprobaciones o acciones que tu aplicación requiera, te dejamos este código que ayudará a su obtención:
@Override
protected void onResume() {
super.onResume();
if (getIntent() != null && getIntent().getExtras() != null){
Bundle extras = getIntent().getExtras();
if( extras != null && extras.containsKey(Push.EXTRA_PUSH)) {
Push push = new Push(extras.getString(Push.EXTRA_PUSH));
}
}
}
En el caso de la push cifrada, al objeto Push hay que pasarle el contexto como parámetro adicional:
@Override
protected void onResume() {
super.onResume();
if (getIntent() != null && getIntent().getExtras() != null){
Bundle extras = getIntent().getExtras();
if( extras != null && extras.containsKey(Push.EXTRA_PUSH)) {
Push push = new Push(context,extras.getString(Push.EXTRA_PUSH));
}
}
}
Si se decide por tratar la acción de la Push de manera independiente sin pasar por nuestra SDK, se recoge el intent de la acción en vuestra activity dónde se debe llamar al método ServiceUtils.RegisterStatistics. Para este caso se puede, por ejemplo, crear una clase que extienda de nuestro PushNotification para generar el intent con los siguientes extras:
public class MyPushNotification extends PushNotification {
Push push;
Context context;
public MyPushNotification(Push push) {
super(push);
this.push = push;
}
@Override
public void showNotification(Context context) {
this.context = context;
super.showNotification(context);
}
protected PendingIntent getIntent(PushAction action, int clickedButton) {
Intent intent = action.getIntent(context);
Intent indigitallIntent = new Intent(context, YOUR_ACTIVITY.class);
indigitallIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
indigitallIntent.putExtra(StatisticService.EXTRA_APP_KEY, PreferenceUtils.getAppKey(context));
indigitallIntent.putExtra(StatisticService.EXTRA_PUSH_ID, push.getId());
indigitallIntent.putExtra(StatisticService.EXTRA_CLICKED_BUTTON, clickedButton);
indigitallIntent.putExtra(StatisticService.EXTRA_INTENT_ACTION, intent);
indigitallIntent.putExtra(Push.EXTRA_PUSH, push.toString());
if (action.getTopics() != null && action.getTopics().length>0){
indigitallIntent.putExtra(StatisticService.EXTRA_ACTION_TOPICS, action.topicsToString());
}
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addNextIntentWithParentStack(indigitallIntent);
return stackBuilder.getPendingIntent((push.getId()*10) + clickedButton, PendingIntent.FLAG_UPDATE_CURRENT);
}
}
Una vez recogida la push como explicamos en el apartado anterior, se debe llamar al siguiente método para el registro de estadísticas:
ServiceUtils.registerStatistics(context,indigitallIntent);
Javadoc del SDK 4.8 para Android