logo indigitall
/SDK /Push app /Android
EN

 | ES

SDK de Android

Guía avanzada para configurar el SDK de Android


Tabla de contenidos



1. Propiedades configurables


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.


1.1. Activar las notificaciones geolocalizadas


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)


Location path on console

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:


Ruta al fichero AndroidManifest.xml

Opciones que debes tener en cuenta


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);
}


1.2. Establecer la Activity por defecto


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);


1.3. Asociar el dispositivo a un usuario


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.


2. Callbacks que ofrece el SDK


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) {}
});


 2.1. SDK inicializado


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());
    }
});


 2.2. Nuevo dispositivo registrado


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());
    }
});


 2.3. Se ha producido un error


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);
    }
});


3. Administrar dispositivo


3.1. Consultar información y estado del dispositivo


Puedes usar el método deviceGet para obtener la información que ha registrado el SDK en referencia al dispositivo.


Debes instanciar un onjeto 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() {}
});


3.2. Habilitar / deshabilitar el dispositivo


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() {}
});


4. Grupos de interés


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.


4.1. Listar grupos


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() {}
});


4.2. Gestionar suscripción


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() {}
});


5. Enviar eventos personalizados


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).


Indigitall.sendCustomEvent(this, "YOUR_EVENT_ID");


6. Mensajes In-App


Si quieres integrar los mensajes In-App en tu aplicación, puedes hacerlo con varios formatos complementarios:


6.1. Formato banner


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.


<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 createInApp.


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.createInApp(getContext(), codes, views, new ShowInAppCallback() {
    @Override
    public void onLoad(String inAppCode, WebView webView) {
        Log.d("In-App loaded: ", inAppCode);
    }
    @Override
    public void onFail(String inAppCode, WebView webView, String message) {}
});


6.2. Formato Popup


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.myPopup)

Indigitall.createPopUp(view, getContext(), "myPopup_CODE", new ShowInAppCallback() {
    @Override
    public void onLoad(String inAppCode, WebView webView) {
        Log.d("In-App loaded: ", inAppCode);
    }
    @Override
    public void onFail(String inAppCode, WebView webView, String message) {}
});


7. Firebase Utils

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.


@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    if(remoteMessage.getData() != null){
        //Your Code
    }else{
        FirebaseUtils.pushNotificationIndigitall(remoteMessage, context);
    }
}


8. Documentación de referencia


Javadoc del SDK 3.1 para Android


9. Changelog

[3.1.0] - 08/2019

Añadido