logo indigitall
/SDK /Push app /Xamarin
EN

 | ES

SDK de Xamarin

Guía avanzada para configurar el SDK de Xamarin


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.


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

Com.Indigitall.Android.Indigitall.SetDefaultActivity(this, Java.Lang.Class.FromType(typeof("YOUR_ACTIVITY")).Name);

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


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("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.


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:


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

/>

 2.2. Nuevo dispositivo registrado


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.


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


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:


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:


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


indigitall.SendCustomEvent("YOUR_CUSTOM_EVENT");


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.

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", (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.showSInApp(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.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) =>
  {
      // 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) =>
  {
      // 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(webViewHybrid, "INAPP_CODE", (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.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) {}
});


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("", () =>
  {
    // DO SOMETHING didAppear
  }, () =>
  {
    // DO SOMETHING didCancel
  }, () =>
  {
    // DO SOMETHING didClicked
  },(error)=> {
    //Log Error
  });


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


8. Changelog

[1.2.0] - 03/2020

Añadido