Xamarin

Última actualización:

Prisma Campaigns proporciona una biblioteca compartida de Xamarin.Forms para su uso con C#, así como otras específicas para Android e iOS. Para que las integraciones tengan éxito es necesario implementar correctamente varias referencias (tanto a nivel compartido como para los proyectos de Android o iOS) tal como se describe en este documento, en particular en la sección Referencias de librerías.

Primeros pasos

Para comenzar, es necesario agregar el namespace PrismaSDK al comienzo del archivo XAML principal de la aplicación (usualmente App.xaml.cs) e invocar el método estático Client.load() con los siguientes parámetros:

Load(String server, String port, String appToken, String customer, String protocol)

donde

  • param String server y param String port son el nombre del servidor donde está instalado el servicio de Prisma y el puerto de escucha.
  • param String appToken: token de acceso para la aplicación actual.
  • param String customer: identificador de cliente (si está disponible) o una cadena vacía ("") en caso contrario.
  • param String protocol: protocolo de conexión (https por defecto).
using PrismaSDK;
[assembly: XamlCompilation (XamlCompilationOptions.Compile)]
namespace SDKsample
{
    public partial class App: Application
    {
        public App ()
        {
            InitializeComponent();
            Client c = Client.Load(localhost, 8080, 8e2626da-4ee1-45c7-b269-50df530dbc6e, 1234, HTTP);
            MainPage = new MainPage();
        }

Debido a que la clase Client es un singleton, devolverá la misma instancia del objeto siempre que la aplicación la utilice a través del atributo estático shared como var c = Client.shared;.

Banners

Esta sección le indicará los pasos a seguir para desplegar contenido dinámico en un banner.

En primer lugar, es preciso agregar una referencia al SDK en el encabezado de la página donde se realiza la integración (xmlns:Prisma="clr-namespace:PrismaSDK;assembly=PrismaSDK") e insertar las líneas que aparecen a continuación dentro de ContentPage:

<ContentPage xmlns= http://xamarin.com/schemas/2014/forms
             xmlns: x= http://schemas.microsoft.com/winfx/2009/xaml
             xmlns: local=clr-namespace: SDKsample
             xmlns: Prisma=clr-namespace: PrismaSDK; assembly=PrismaSDK
             x: Class=SDKsample.MainPage>

Segundo, se debe incluir un control Placeholder dentro del layout con un identificador para refencia local (phid en este caso) y un atributo PlaceholderName (HomePublicBanner, por ejemplo):

<StackLayout>
    <Prisma: Placeholder x: Name=phid PlaceholderName=HomePublicBanner></Prisma: Placeholder>
</StackLayout>

Para finalizar, habrá que implementar el método OnAppearing en la página donde se haya definido el control:

namespace SDKsample
{
    public partial class MainPage: ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }
        protected override void OnAppearing()
        {
            List<Placeholder> l = new List<Placeholder> ();
            l.Add(phid);
            Client.shared.syncView(MyPage, l, null);
        }
    }
}

donde MyPage representa la página a sincronizar y l una lista de placeholders.

Banners personalizados

Es posible crear banners desde el código de la aplicación, independiente del SDK. Para esto, se puede utilizar el parámetro handleActionparameter del método syncView. En este escenario, el callback de la interfaz se invoca al solicitar los banners para la página dada:

Action<Object> handler = r => {
                Debug.WriteLine (Initialized);
                Dictionary<String, PlaceholderContent> result = (Dictionary<string, PlaceholderContent>) r;
                PlaceholderContent content = result[MainGeneral];
                var size = content.banners.Count;
                Debug.WriteLine (Total banners found for placeholder: + size);
};
Client.shared.syncView(MyPage, l, handler);

Para recuperar las vistas desde el contenido del placeholder:

let banner = content.banners[0]
let v = banner.GetView()

o el contenido de un banner HTML:

HtmlBannerView h = (HtmlBannerView)banner;
var strBanner = h.getHTMLContent();

Para iniciar el funnel desde el banner:

let funnel = banner.GetFunnel()
funnel.start()

o desestimar un banner de una campaña:

let funnel = banner.GetFunnel ()
funnel.dismiss()

Referencias de librerías

El proyecto compartido debe referenciar los paquetes NuGet Newtonsoft.Json y PCLStorage, así como la librería PrismaSDK.dll.

Por otro lado, PrismaSDK.Android y PrismaSDK.IOS contienen renderizadores personalizados de distintos controles, por lo que es nececsario incluir uno u otro en la aplicación correspondiente.

  • Para Android, el manifiesto debe tener automatic como target. Al inicializar la actividad principal, se debe invocar el método PrismaSDK.Droid.AndroidComponents.init() de la siguiente forma:
namespace SDKsample.Droid
{
    [Activity(Label = "SDKsample", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
            PrismaSDK.Droid.AndroidComponents.init();
            ...
  • En iOS, se debe llamar el método PrismaSDK.IOS.IOSComponents.init() en el mismo lugar:
namespace SDKsample.iOS
{
    public class Application
    {
        // This is the main entry point of the application.
        static void Main (string[] args)
        {
            // if you want to uses to different Application Delegate class from AppDelegate
            // you can specify it here.
            PrismaSDK.IOS.IOSComponents.init ();
            UIApplication.Main (args, null, AppDelegate);
        }

En ambas plataformas -por propósitos de optimización-, el compilador borrará cualquier control para el cual no haya referencias previas.