Esta web ya no recibe mantenimiento. Por favor, visita documentation.indigitall.com para leer nuestra documentación actualizada.

SDK de Xamarin

guía avanzada para configurar el SDK de Xamarin

Indice

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.


1.1.1. Android


Añade los permisos de localización incluyendo esta línea en el archivo AndroidManifest.xml dentro de la carpeta Properties del proyecto de android:


<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


Hay que añadir el parámetro RequestLocationPermission cuando se inicialice el SDK en el caso de usar Xamarin.Forms y marcar con el flag de requestPermissionLocation, en el caso de usar Xamarin Classics sólamente hay que añadir el flag de requestPermissionLocation. Esto se hace mediante el siguiente extracto de código:


//Xamarin.Forms
//Cuando quieres inicializar indigitall en el proyecto iOS
  global::Xamarin.Forms.Forms.Init(this, bundle);
  DependencyService.Register<Com.Indigitall.Xamarin.Android.Indigitall>();
  Com.Indigitall.Xamarin.Android.Utils.PermissionUtils.RequestLocationPermission(this);
  // otra forma de pdefinir el setdefault: this.ComponentName.ClassName

  var app = new App();
  LoadApplication(app);

...

  public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Permission[] grantResults)
    {
        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        Com.Indigitall.Xamarin.Android.Utils.PermissionUtils.OnRequestPermissionResult(this, requestCode, permissions, grantResults);

    }

  ------------
//Inicializar el proyecto
 var indigitall = DependencyService.Get<IIndigitall>();
  if (indigitall != null)
  {
      indigitall.Init("YOUR_APPKEY", "YOUR_SENDERID", true);
  }
  ------------

//Xamarin Classics
  Com.Indigitall.Xamarin.Android.Indigitall indigitall = new Com.Indigitall.Xamarin.Android.Indigitall();
  indigitall.Init("YOUR_APPKEY", "YOUR_SENDERID", true);


1.1.2. iOS


Añade las siguientes claves en el archivo Info.plist de la aplicación.


<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Can we always use your location?</string>

<key>NSLocationAlwaysUsageDescription</key>
<string>Can we always use your location?</string>

<key>NSLocationWhenInUseUsageDescription</key>
<string>Can we use your location when using the apps?</string>

<key>UIBackgroundModes</key>
    <array>
        <string>location</string>
        <string>remote-notification</string>
    </array>


Las claves NSLocationAlwaysUsageDescription, NSLocationWhenInUseUsageDescription y NSLocationAlwaysAndWhenInUseUsageDescription se pueden personalizar editando el contenido de la etiqueta < string >.

Añade el siguiente código en el AppDelegate dentro del método FinishedLaunching



  DependencyService.Register<Com.Indigitall.Xamarin.iOS.Indigitall>();

  if (UIDevice.CurrentDevice.CheckSystemVersion(10, 0))
  {
      // iOS 10 or later
      var authOptions = UNAuthorizationOptions.Alert | UNAuthorizationOptions.Badge | UNAuthorizationOptions.Sound;
      UNUserNotificationCenter.Current.RequestAuthorization(authOptions, (granted, error) =>
      {
          if (granted)
          {
              InvokeOnMainThread(() =>
              {
                  UIApplication.SharedApplication.RegisterForRemoteNotifications();
              });
          }
      });

      // For iOS 10 display notification (sent via APNS)
      UNUserNotificationCenter.Current.Delegate = new Com.Indigitall.Xamarin.iOS.UserNotificationCenterDelegate();

  }
  else
  {
      // iOS 9 or before
      var allNotificationTypes = UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound;
      var settings = UIUserNotificationSettings.GetSettingsForTypes(allNotificationTypes, null);
      UIApplication.SharedApplication.RegisterUserNotificationSettings(settings);
  }

1.2. Establecer la Activity por defecto (Android)


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
  Com.Indigitall.Android.Indigitall.SetDefaultActivity(this, Java.Lang.Class.FromType(typeof("YOUR_ACTIVITY")).Name);

  //o también
  Com.Indigitall.Xamarin.Models.IConfiguration config = new Com.Indigitall.Xamarin.Models.IConfiguration();
  config.appKey = "<YOUR-APP-KEY>";
  config.senderId = "<YOUR-SENDER-ID>";
  config.defaultActivity = Java.Lang.Class.FromType(typeof(MainActivity)).Name;
  indigitall.Init(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:

  • Si tus usuarios se han identificado, podrías usar tu ID de usuario, o el email, o cualquier otro dato con el que estés acostumbrado a trabajar.
  • Si tus usuarios son anónimos porque no se han logado en la app, quizá dispongas de un sistema de métricas tipo Google Analytics o Commscore. Podrías usar el ID proporcionado por estas herramientas.


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("YOUR_EXTERNAL_CODE", (device) =>
{
    //Log device
}, (code, message) =>
{
    Console.WriteLine("SetExternalCode.iOS error code:" + code + " message: " + message);
});


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.


1.4. Filtro WiFi


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 el parámetro wifiFilterEnabled cuando se inicialice el SDK:


indigitall.Init("YOUR APPKEY", "YOUR SENDER ID", requestLocation: true, wifiFilterEnabled: true)

//o también
  Com.Indigitall.Xamarin.Models.IConfiguration config = new Com.Indigitall.Xamarin.Models.IConfiguration();
  config.appKey = "<YOUR-APP-KEY>";
  config.senderId = "<YOUR-SENDER-ID>";
  config.requestLocation = true;
  config.wifiFilterEnabled = true;
  config.layoutBasic = Com.Indigitall.Xamarin.Models.Layoutbasic.Custom;
  indigitall.Init(config)


  • El permiso de localización debe ser aceptado por el usuario

  • Tenga en cuenta que el tiempo de escaneo de la WiFi cuando la aplicación está en segundo plano o cerrada puede ser inexacto.


1.4.1 Permisos Android


Para poder obtener la información de la wifi en adroid se necesitan los siguientes permisos y servicios declarados en el manifest:


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


1.4.2 Permisos iOS


Así mismo, deberás añadir en las opciones del proyecto en Xcode, en Signing & Capabilities la opción Access WiFi Information:


Access WiFi Information


1.5. Layout custom


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 llamada al init:

indigitall.Init("YOUR APPKEY", "YOUR SENDER ID", requestLocation: true, wifiFilterEnabled: true, customBasic: "custom")

//o también
  Com.Indigitall.Xamarin.Models.IConfiguration config = new Com.Indigitall.Xamarin.Models.IConfiguration();
  config.appKey = "<YOUR-APP-KEY>";
  config.senderId = "<YOUR-SENDER-ID>";
  config.logDebug = false;
  config.layoutBasic = Com.Indigitall.Xamarin.Models.Layoutbasic.Custom;
  indigitall.Init(config);
  • Recuerda que a partir de android 10, el layout custom dará problemas de visualización de las imágenes si el móvil tiene activado el modo oscuro. Si no se indica el layout custom, se mostrará en modo nativo


1.6. Dominio personalizado

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
Com.Indigitall.Xamarin.Models.IConfiguration config = new Com.Indigitall.Xamarin.Models.IConfiguration();
config.appKey = "<YOUR-APP-KEY>";
config.senderId = "<YOUR-SENDER-ID>";
config.urlDeviceApi = "YOUR_DEVICE_API_DOMAIN";
config.urlInAppApi = "YOUR_INAPP_API_DOMAIN";
indigitall.Init(config);


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.


 2.1. SDK inicializado


El método onIndigitallInitialized se ejecutará cuando el SDK termine de inicializarse y el dispositivo esté preparado para recibir notificaciones de indigitall.


Recibe como parámetro:

  • Un array de objetos Permission. El primer elemento es el estado del permiso de notificaciones. El segundo elemento es el estado del permiso de localización.
  • Un objeto Device con la información asociada al dispositivo.


A continuación te mostramos un ejemplo que imprime logs sobre el estado de los permisos y la información del dispositivo.


var indigitall = DependencyService.Get<IIndigitall>();
if (indigitall != null)
{
    indigitall.Init("YOUR APPKEY", "YOUR SENDER ID", true, (permissions, device)=>
    {
        Console.WriteLine("device: " + device.deviceId);
        Console.WriteLine("device: " + permissions);
    },(device)=>
    {
        //DO SOMETHING
    },(errorCode,errorMessage)=>
    {
        //DO SOMETHING
    });

//o también

Com.Indigitall.Xamarin.Models.IConfiguration config = new Com.Indigitall.Xamarin.Models.IConfiguration();
config.appKey = "<YOUR-APP-KEY>";
config.senderId = "<YOUR-SENDER-ID>";
indigitall.Init(config, (permissions, device) =>
{
    Console.WriteLine("device: " + device.deviceId);
    Console.WriteLine("device: " + permissions);
}, (device) =>
{
    //DO SOMETHING
}, (errorCode,errorMessage) =>
{
    //DO SOMETHING
});


 />

### 2.2. Nuevo dispositivo registrado

<br />

El método **onNewUserRegistered** se ejecutará cuando el dispositivo ha sido registrado por primera vez, es decir, en la primera ejecución de la app tras ser instalada.

<br />

Recibe como parámetro el objeto _Device_ con la información asociada al dispositivo.

<br />

```javascript
var indigitall = DependencyService.Get<IIndigitall>();
if (indigitall != null)
{
    indigitall.Init("YOUR APPKEY", "YOUR SENDER ID", true, (permissions, device)=>
    {
        //DO SOMETHING
    },(device)=>
    {
        Console.WriteLine("device: " + device.deviceId);
    },(errorCode,errorMessage)=>
    {
        //DO SOMETHING
    });


 2.3. Se ha producido un error


El método onErrorInitialized se ejecutará sólo si se produce un error durante la inicialización del SDK.


Recibe como parámetro la descripción del error.


var indigitall = DependencyService.Get<IIndigitall>();
if (indigitall != null)
{
    indigitall.Init("YOUR APPKEY", "YOUR SENDER ID", true, (permissions, device)=>
    {
        //DO SOMETHING
    },(device)=>
    {
        //DO SOMETHING
    },(errorCode,errorMessage)=>
    {
        Console.WriteLine("ErrorCode: " + errorCode+" Message: "+ errorMessage);
    });


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.


El callback recibirá como parámetro el objeto device que contiene toda la información asociada al dispositivo.


indigitall.DeviceGet((device) =>
{
    if (device != null)
    {
        Console.WriteLine("Device: " + device.deviceId);
    }
},(errorCode,errorMessage)=>
    {
        Console.WriteLine("ErrorCode: " + errorCode+" Message: "+ errorMessage);
    });


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:

  • Implementar una pantalla de preferencias para que el usuario pueda habilitar / deshabilitar la recepción de notificaciones.
  • Evitar la recepción de notificaciones si el usuario no se ha logado, o no ha aceptado los términos de uso, etc.
  • Gestionar la Lista Robinson.


Para ello, dispones de los métodos deviceEnable y deviceDisable.


El callback recibirá como parámetro el objeto device que contiene toda la información asociada al dispositivo.


indigitall.DeviceEnable((device)=>{
        Console.WriteLine("Device: " + device.deviceId);        
  },(errorCode,errorMessage)=>
    {
        Console.WriteLine("ErrorCode: " + errorCode+" Message: "+ errorMessage);
    });

indigitall.DeviceDisable((device)=>{
        Console.WriteLine("Device: " + device.deviceId);        
  },(errorCode,errorMessage)=>
    {
        Console.WriteLine("ErrorCode: " + errorCode+" Message: "+ errorMessage);
    });


4. Grupos de interés


Nuestro SDK te permite clasificar a los usuarios en diferentes grupos personalizables. Esto es muy útil para:

  • Implementar una pantalla de preferencias para que el usuario pueda elegir los temas para los que quiere recibir notificaciones.
  • Etiquetar según la navegación o acciones que realice el usuario.
  • Segmentar las comunicaciones según si el usuario se ha identificado o es anónimo.
  • Segmentar en base al idioma, cultura, categoría de cliente, o en base a cualquier otro criterio que necesites.


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((topic) =>
  {
      //DO SOMETHING
  }, (errorCode, messageError) =>
  {
      //Log error
  });


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 typeof string[]
  indigitall.TopicsSubscribe(topics, (topic) =>
  {
      //DO SOMETHING
  }, (errorCode, messageError) =>
  {
      //Log error
  });

  indigitall.TopicsUnsubscribe(topics }, (topic) =>
  {
     //DO SOMETHING
  }, (errorCode, messageError) =>
  {
      //Log error
  }); 


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) y añadir los datos que necesites.


Los datos debes añadirlos en un array del modelo INHashMap como el del ejemplo que se indica a continuación.


Com.Indigitall.Xamarin.Models.INHashMap[] iNHashMap = new Com.Indigitall.Xamarin.Models.INHashMap[2];
iNHashMap[0] = new Com.Indigitall.Xamarin.Models.INHashMap("key1", "value1");
iNHashMap[1] = new Com.Indigitall.Xamarin.Models.INHashMap("key2", "value2");

indigitall.SendCustomEvent("YOUR_CUSTOM_EVENT", iNHashMap, () =>
{
    // Do something in success function
}, (ErrorDescription) =>
{
    //ERROR DO SOMETHING
});


6. Mensajes In-App


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

  • Banner. Contenido estático que está siempre visible, pero permite al usuario seguir utilizando la aplicación.
  • Popup. Contenido a pantalla completa que obliga al usuario a pulsar o descartar la información.


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.

Definir un hybridWeview en el archivo .xml. 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 _pulgadas.

//160 unidades es 1 pulgada. 64 unidades es 1 cm
<local:HybridWebView x:Name="hybridWebView" InAppId="Billboard"  WidthRequest="x" HeightRequest="y"/>


Instancia los mensajes In-App usando el método ShowInApp.


indigitall.ShowInApp(webViewHybrid, "INAPP_CODE", (inAppCode, webView, showTime) =>
  {
    //onShowTimeFinished
  }, () => {
    //did clicked
  }, (code, message) => 
  {
    //did expired
  }, (code, message) => 
  {
    //did click out
  }, (code, message) => 
  {
    //did show more
  }, (inAppId, webview) => 
  {
    //DO SOMETHING
  },(inAppId, webview, errorMessage)=> 
  {
    //LOG ERROR
  });


6.1.1. Android Xamarin Classics


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.


<android.webkit.WebView
    android:id="@+id/myBanner"
    android:layout_width="230dp"
    android:layout_height="33.33dp"
/>
<android.webkit.WebView
    android:id="@+id/otherBanner"
    android:layout_width="250dp"
    android:layout_height="36dp"
/>


Instancia los mensajes In-App usando el método showInApp.


var myBanner = FindViewById<Android.Webkit.WebView>(Resource.Id.myBanner);
var otherBanner = FindViewById<Android.Webkit.WebView>(Resource.Id.otherBanner);

  var views = new List<Android.Webkit.WebView>();
  views.Add(myBanner);
  views.Add(otherBanner);

  var codes = new List<>();
  codes.Add("myBanner_CODE");
  codes.Add("otherBanner_CODE");

Indigitall.showInApp(getContext(), codes, views, new ShowInAppCallback() {
    @Override
    public void onLoad(String inAppCode, WebView webView) {
        Log.d("InApp loaded: ", inAppCode);
    }
    @Override
    public void onFail(String inAppCode, WebView webView, String message) {}

    @Override
    public void onShowTimeFinished(String inAppCode, WebView webView, int showTime) {
        super.onShowTimeFinished(inAppCode,webView);
        Log.d("InApp onShowTimeFinished " + inAppCode);
    }
});


6.1.2. iOS Xamarin Classics


Crea una vista de WebView en el storyBoard .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 iOS points.


Instancia los mensajes In-App usando el método, tanto si quieres mostrar un inapp como varios de ellos.


IndigitallXamarin.Indigitall.ShowInApp(uiWebviewIos, "Billboard", (inAppId, webView) =>
  {
      // DO SOMETHING
  }, (inAppId, webView, message) =>
  {
      //Error DO SOMETHING
  },()=>{
      //didTouch: DO SOMETHING
  }, (inApp, showTime) =>{
    //OnShowTimeFinished: DO SOMETHING
  });

  var views = new List<UIView>();
  views.Add(myBanner);
  views.Add(otherBanner);

  var codes = new List<>();
  codes.Add("myBanner_CODE");
  codes.Add("otherBanner_CODE");

  IndigitallXamarin.Indigitall.ShowMultipleInApp(views, codes, (inAppId, webView) =>
  {
      // DO SOMETHING
  }, (inAppId, webView, message) =>
  {
      //Error DO SOMETHING
  }, (inApp, webView) =>{
      //Didtouch: DO SOMETHING
  }, (inApp, webView, showtime) =>{
      //OnShowTimeFinished: DO SOMETHING
  });

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.


Instancia los mensajes In-App del hybridWebView usando el método ShowPopUp.


indigitall.ShowPopUp(view, "INAPP_CODE", (inAppId, webview) =>
    {
    //DO SOMETHING
    },(inAppId, webview, errorMessage)=>
    {
    //LOG ERROR
    }, () =>
    {
        Console.WriteLine("DidClick");
    }, () =>
    {
        Console.WriteLine("DidClose");
    }, () =>
    {
        Console.WriteLine("DidDismissed");
    });

  //En el caso de que quieras personalizar el icono de cerrar del Popup, 
  //puedes usar el siguiente método, en el que añades un UIButton personalizado, o usar la variable **closeIconDisabled** para no mostrar ninguno:

indigitall.ShowPopUp(view, "INAPP_CODE", myIcon, false, () =>
    {
        Console.WriteLine("DidClick");
    }, () =>
    {
        Console.WriteLine("DidClose");
    }, () =>
    {
        Console.WriteLine("DidDismissed");
    }, (inAppCode, showTime)=>{
        Console.WriteLine("OnShowTimeFinished");
    }, (code, message) => 
    {
      //did expired
    }, (code, message) => 
    {
      //did click out
    }, (code, message) => 
    {
      //did show more
    }, (inAppId, webview) =>
    {
    //DO SOMETHING
    },(inAppId, webview, errorMessage)=>
    {
    //LOG ERROR
    });  


6.2.1. Android Xamarin Classics


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.


var view = findViewById(R.id.myPopup)

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 onFail(String inAppCode, WebView webView, String message) {}

    @Override
    public void onShowTimeFinished(String inAppCode, WebView webView, int showTime) {}
});

//En el caso de que quieras personalizar el icono de cerrar del Popup, puedes 
//usar el siguiente método, en el que añades un UIButton personalizado, o usar la variable **closeIconDisabled** para no mostrar ninguno:

Indigitall.ShowPopUp(view, getContext(), "myPopup_CODE", myIcon, false, 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) {}

    @Override
    public void onShowTimeFinished(String inAppCode, WebView webView, int showTime) {}
});


6.2.2. iOS Xamarin Classics

Crea una vista de WebView en el storyBoard .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 iOS points.

IndigitallXamarin.Indigitall.ShowPopup("myPopup_CODE", () =>
  {
    // DO SOMETHING didAppear
  }, () =>
  {
    // DO SOMETHING didCancel
  }, () =>
  {
    // DO SOMETHING didClicked
  }, () =>
  {
    // DO SOMETHING didDismissed
  }, (inApp, showTime) =>
  {
    // DO SOMETHING onShowTimeFinished
  },(error)=> {
    //Log Error
  });

//En el caso de que quieras personalizar el icono de cerrar del Popup, 
//puedes usar el siguiente método, en el que añades un UIButton personalizado, o usar la variable **closeIconDisabled** para no mostrar ninguno:

IndigitallXamarin.Indigitall.ShowPopup("myPopup_CODE", myIcon, false, () =>
  {
    // DO SOMETHING didAppear
  }, () =>
  {
    // DO SOMETHING didCancel
  }, () =>
  {
    // DO SOMETHING didClicked
  }, () =>
  {
    // DO SOMETHING didDismissed
  }, (inApp, showTime) =>
  {
    // DO SOMETHING onShowTimeFinished
  },(error)=> {
    //Log Error
  });


6.3. Utilidades del InApp

En el caso de que quieras mostrar el esquema InApp de diferente manera a como lo pinta nuestra SDK, ponemos a tu disposición unos métodos para que podáis customizar el "pintado", sin que se vean afectadas ni las estadísticas ni las funcionalidades del InApp.

Recogida del objeto InApp

indigitall.GetInApp("YOUR_INAPP_CODE", (inApp) =>
  {
      //do something
  }, (message) =>
  {
    //log error
  });

Comprobación si debería mostrarse el InApp

Gracias a las funcionalidades de InApp, se puede indicar que el inApp se muestre o se pulse un número de veces máximo, o si en el caso del popUp, tras realizar una acción, como pulsar al botón cerrar, no se vuelva a mostrar. Para ello podríamos hacer lo siguiente dentro del método inAppGet que hemos visto anteriormente:

indigitall.InAppWasShownWithInApp(inApp, () =>
{
    //didExpired
}, () =>
{
    //did show more
}, () =>
{
    //did clickout
}, () =>
{
    //show inapp
});

Acciones para contabilizar clicks o para no mostrar InApp nunca más

Para el caso de lo que llamamos Dismiss Forever, una vez que se realiza la acción, se debe llamar a este método:


indigitall.AddNewInAppToDismissForever(inApp);

En el caso de que se quiera mostrar un inApp sólo si hace 'x' clicks o pulsaciones sobre él hay que añadir lo siguiente:


indigitall.InAppWasClicked(inApp, intent);
  • En este método se mandan las estadísticas del click, no sólo el contador de clicks.


7. Recogida de los datos de la push


En el caso de que quisieras obtener el objeto push de tipo json para realizar comprobaciones y/o cuando el usuario haga click en la notificación y sea con la acción de abrir app te dejamos este código que ayudará a su obtención:


7.1. Android


En el caso de Android deberemos añadir este código en el MainActivity y parsearlo como objeto push para obtener la información:


var pushExtra = Com.Indigitall.Android.Models.Push.ExtraPush;
    if (Intent != null && Intent.GetStringExtra(pushExtra) != null)
    {
        Com.Indigitall.Android.Models.Push push = new Com.Indigitall.Android.Models.Push(Intent.GetStringExtra(pushExtra));
        Console.WriteLine("Push object: ", push);
    }

7.2. iOS


En el caso de iOS deberemos añadir este código en el AppDelegate de la aplicación, tanto en el método DidReceiveRemoteNotification para la acción principal, como para el método HandleAction para la acción de los botones:



//class extends UNUserNotificationCenterDelegate
[Export("userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:")]
    public override void DidReceiveNotificationResponse(UserNotifications.UNUserNotificationCenter center, UserNotifications.UNNotificationResponse response, Action completionHandler)
    {
        IndigitallXamarin.Indigitall.HandleWithResponse(response, (push, action) =>
        {
            Console.WriteLine("DidReceiveNotificationResponse push: " + push);
            Console.WriteLine("DidReceiveNotificationResponse action: " + action.App);
        });
    }

//DidReceiveRemoteNotification
Com.Indigitall.Xamarin.iOS.Indigitall.HandleActionPush(userInfo, null, (push, action) => {
                Console.WriteLine("DidReceiveRemoteNotification push: " + push);
                Console.WriteLine("DidReceiveRemoteNotification action: " + action.app);
            });

//HandleAction
Com.Indigitall.Xamarin.iOS.Indigitall.HandleActionPush(remoteNotificationInfo, actionIdentifier, (push, action) => {
                Console.WriteLine("HandleAction push: " + push);
                Console.WriteLine("HandleAction action: " + action.app);
            });


7.3. Registrar estadísticas si se trata la acción de la Push


Si se decide por tratar la acción de la Push de manera independiente sin pasar por nuestra SDK, para poder registrar las estadísticas hay que hacer lo siguiente según la plataforma.


7.3.1. Android


En el caso de Android, 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 PushNotification : Com.Indigitall.Android.Models.PushNotification
    {
        Push push;
        Context context;

        public PushNotification(Push push): base(push)
        {
            this.push = push;
        }
        public override void ShowNotification(Context context)
        {
            this.context = context;            
            base.ShowNotification(context);           
        }
    protected override PendingIntent GetIntent(PushAction action, int clickedButton){
      Intent intent = action.GetIntent(context);
      Intent indigitallIntent;
      indigitallIntent = new Intent(context, typeof(MainActivity));
      indigitallIntent.SetFlags(ActivityFlags.NewTask);
      indigitallIntent.PutExtra(Com.Indigitall.Android.Services.StatisticService.ExtraAppKey, Com.Indigitall.Android.Commons.Utils.PreferenceUtils.GetAppKey(context));
      indigitallIntent.PutExtra(Com.Indigitall.Android.Services.StatisticService.ExtraPushId, push.Id);
      indigitallIntent.PutExtra(Com.Indigitall.Android.Services.StatisticService.ExtraClickedButton, clickedButton);
      indigitallIntent.PutExtra(Com.Indigitall.Android.Services.StatisticService.ExtraIntentAction, intent);
      indigitallIntent.PutExtra(Push.ExtraPush, push.ToString());
      if (action.GetTopics() != null && action.GetTopics().Length > 0)
      {
          indigitallIntent.PutExtra(Com.Indigitall.Android.Services.StatisticService.ExtraActionTopics, action.TopicsToString());
      }
      TaskStackBuilder stackBuilder = TaskStackBuilder.Create(context);
      stackBuilder.AddNextIntentWithParentStack(indigitallIntent);

      return stackBuilder.GetPendingIntent((push.Id * 10) + clickedButton,
                  PendingIntentFlags.OneShot);  
    }


Una vez recogida la push como explicamos en el apartado anterior, se debe llamar al siguiente método para el registro de estadísticas:


Com.Indigitall.Android.Utils.ServiceUtils.RegisterStatistics(context, indigitallIntent);


7.3.2. iOS


En el caso de iOS en el método userNotificationCenter:didReceive del propio AppDelegate, para poder registrar las estadísticas hay que añadir el siguiente método:


IndigitallXamarin.Indigitall.RegisterStatistics(response);


8. Changelog

[1.13.1] - 03/2022

Correcciones

  • Mejorar el rendimiento de las llamadas a la API

[1.13.0] - 03/2022

Añadido

  • Borrar las librerías de HMS para evitar problema de publicación en Play Store

[1.12.1] - 01/2022

Correcciones

  • Añadir event click al nuevo método de añadir click de inApp

[1.12.0] - 01/2022

Añadido

  • InApp Dismiss Forever
  • Utilidades del InApp (numberOfClicks, numberOfShows)
  • Event custom para iurny
  • Interruption level iOS

[1.11.5] - 12/2021

Correcciones

  • Añadir campo platform en la petición PUT cuando push secure está activa

[1.11.4] - 12/2021

Correcciones

  • Acción Abrir URL si SO de android es 11 o superior

[1.11.3] - 11/2021

Correciones

  • Añadir campaignId en click del a push

[1.11.2] - 11/2021

Correciones

  • Actualizar versiones nativas

[1.11.1] - 10/2021

Correciones

  • Device enabled/disabled

[1.11.0] - 10/2021

Añadido

  • Compatibilidad con Android 12
  • Customer Service

[1.10.0] - 09/2021

Añadido

  • Contador de clicks en inApp

[1.9.0] - 07/2021

Añadido

  • Actualizar librerías de Huawei

[1.8.3] - 07/2021

Correciones

  • Inicialización sin el Config como parámetro

    Añadido

  • Actualizar librerías de Firebase

[1.8.1] - 06/2021

Correciones

  • Actualizar librerías de Huawei

[1.8.0] - 05/2021

Añadido

  • Nuevo método para enviar evento personalizados con datos

    Correciones

  • Recogida de datos de los dispositivos

[1.7.0] - 05/2021

Añadido

  • InApp mostrar un número de veces definido en consola
  • Configurar dominio para clientes Enterprise.

[1.6.8] - 04/2021

Añadido

  • PopUp mostrar un número de veces definido en consola
  • Ocultar PopUp transcurrido un tiempo configurado en consola

[1.6.7] - 04/2021

Correciones android

  • Ocultar icono de cerrar en popUp

[1.6.6] - 04/2021

Correciones android

  • Mejorar logs

[1.6.5] - 04/2021

Correciones android

  • Mejorar recogida de model inApp

[1.6.4] - 04/2021

Correciones android

  • Corregir action abrir app en inApp

[1.6.2] - 04/2021

Correciones iOS

  • Método de registrar estadísticas

[1.6.1] - 04/2021

Añadido

  • InApp acción abrir app
  • InApp mostrar un número de veces definido en consola
  • PopUp bordes redondeados (android)

[1.5.13] - 02/2021

Correciones android

  • Mejorar tratamiento de acciones de botones

[1.5.12] - 02/2021

Correciones android

  • Mejorar control en caso de que no se haya generado deviceId
  • Corregir extensión de la clase PushNotification en Harmony

[1.5.11] - 02/2021

Correciones

  • Mejorar funcionamiento pushes silenciosas
  • Corregir push cifrada para android anterior a android 6

[1.5.10] - 02/2021

Correciones

  • Forzar asignación de token en el objeto device del callback en HMS

[1.5.9] - 02/2021

Correciones

  • Acceso al Servicio de HMSMessagingService

[1.5.8] - 01/2021

Correciones

  • Forzar actualización de token por caducidad si no se almacena en primera instancia

[1.5.7] - 01/2021

Correciones

  • Mostrar correctamente el body en android 6.0 e inferiores

[1.5.6] - 12/2020

Correciones

  • Compilación de java actualizada

[1.5.5] - 12/2020

Correciones

  • Solicitud de localización si la petición se lanza antes de inicializar el SDK
  • Modificar modo de levantar la app con la acción abrir app por problemas con modelos Xiaomi

[1.5.4] - 12/2020

Correciones

  • Actualizar UIWebView (Deprecado) por WKWebView

[1.5.3] - 11/2020

Correciones

  • Estabilidad en solicitudes
  • Acción compartir en iPad
  • Mostrar botones en notificaciones anteriores

[1.5.2] - 11/2020

Correciones

  • Cambiar dependencias de Huawei.

[1.5.1] - 11/2020

Correciones

  • Corregir conflictos con recursos de android. (HuaweiMaps)

[1.5.0] - 11/2020

Añadido

  • Push persistente

[1.4.8] - 11/2020

Correciones

  • Controlar si objeto vacío de la push enviado vía API

[1.4.7] - 11/2020

Correciones

  • Petición info Wifi en background en iOS

[1.4.6] - 10/2020

Correciones

  • Escalar popUp y callbacks
  • Corrección en caso de que el externalCode sea nulo

[1.4.5] - 10/2020

Correciones

  • Añadir custom layout

[1.4.4] - 10/2020

Correciones

  • Corregir dependencias de HMS

[1.4.3] - 10/2020

Correciones

  • Push con imagen para los dispositivos Huawei

[1.4.2] - 09/2020

Correciones

  • Ajustar popup al tamaño de la pantalla del dispositivo

[1.4.1] - 08/2020

Correciones

  • Añadir dependencia de localización de Huawei

[1.4.0] - 08/2020

Añadido

  • Huawei Mobile Services
  • Huawei location service
  • Abrir archivos *.pkpass

[1.3.0] - 05/2020

Añadido

  • InApp y Popup
  • Filtro wifi
  • Icono personalizable de Popup

[1.2.0] - 03/2020

Añadido

  • Inapp y funcionalidades del dispositivo.