Integración SDK singular para mParticle

El SDK de Singular está disponible como un kit para mParticle. Después de integrar el kit, mParticle reenviará las sesiones de su aplicación a Singular, activando el proceso de atribución de instalación de aplicaciones de Singular cuando sea relevante.

Las funciones opcionales incluyen el reenvío de eventos dentro de la aplicación, el seguimiento de los ingresos, la compatibilidad con SKAdNetwork (en dispositivos iOS) y la gestión de enlaces profundos y enlaces profundos diferidos.

Guía para Equipos de ingeniería
Requisitos previos Este artículo asume que ya tienes el SDK de mParticle integrado en tu aplicación.

Pasos para la integración en iOS

1

Obtenga su Clave SDK de Singular

En su cuenta de Singular, vaya a "Developer Tools > SDK Integration > SDK Keys" y copie su SDK Key y Secret.

Screen_Shot_2022-10-11_at_15.30.07.png

2

Añada Singular como salida de mParticle

  1. En su cuenta de mParticle, vaya a Configuración > Salidasy haga clic en Añadir salida de eventos.
  2. Seleccione Singular en la lista desplegable.
  3. En la ventana Configuración de eventos, introduzca un nombre para la configuración e introduzca la clave y el secreto de Singular que copió en el paso anterior.
  4. Haz clic en Guardar.

image__2_.png

3

Instalación del SDK de Singular

Para instalar el SDK de Singular

  1. En su aplicación, añada AdServices.framework en Vincular binario con bibliotecas y márquelo como Opcional (sólo disponible para dispositivos con iOS 14.3 y superior).
  2. Añada el pod Singular MParticle al podfile de su aplicación:

    pod 'mParticle-Singular'
  3. En el directorio del podfile, ejecute 'pod install'.
4

Importe la biblioteca Singular

Para importar la biblioteca Singular, añada la siguiente línea de código:

#import "MPKitSingular.h"
5

Inicializar el SDK de Singular

El código de inicialización del SDK debe invocarse cada vez que se abre la aplicación. Es un requisito previo para todas las funciones de atribución de Singular, y también envía una nueva sesión de usuario a Singular (las sesiones se utilizan para calcular la retención de usuarios).

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      //initialize mParticle 
      MParticleOptions *options = [MParticleOptions optionsWithKey:@"<MPARTICLE_KEY>" secret:@"<MPARTICLE_SECRET>"];
      [[MParticle sharedInstance] startWithOptions:options]; 
      return YES; 
  }
6

[OPCIONAL] Seguimiento de eventos

Singular puede recopilar datos sobre eventos in-app para ayudar a analizar el rendimiento de sus campañas y medir los KPI.

Dependiendo de su aplicación, es posible que desee realizar un seguimiento de eventos como inicios de sesión, registros, finalización de tutoriales o subidas de nivel en un juego.

El siguiente código de ejemplo informa de un evento llamado "nombre_evento" a Singular, con dos atributos personalizados. Podrás ver el recuento de ocurrencias de "nombre_evento" en tus informes de Singular.

MPEvent *event = [[MPEvent alloc] initWithName:@"event_name"
      type:MPEventTypeTransaction];
  event.customAttributes = @{@"category":@"Destination Intro",
      @"title":@"Paris"};
  [[MParticle sharedInstance] logEvent:event];
7

[OPCIONAL] Seguimiento de ingresos

Singular puede recopilar datos sobre los ingresos obtenidos a través de la aplicación para ayudar a analizar el rendimiento y el ROI de sus campañas.

Singular pondrá los datos a su disposición en informes, exportación de registros y postbacks.

Para realizar un seguimiento de los ingresos, notifique los eventos de ingresos a Singular como en el siguiente ejemplo. Este ejemplo informa de la compra de un producto dentro de la aplicación, indicando el nombre del producto, el SKU, la cantidad y el precio.

// 1. Create the products
  MPProduct *product = [[MPProduct alloc] initWithName:@"product_name" sku:@"product_sku" quantity:@10     
                                                price:@100.00];
  // 2. Summarize the transaction
  MPTransactionAttributes *attributes = [[MPTransactionAttributes alloc] init];
  attributes.transactionId = @"ransaction_id";
  attributes.revenue = @400.00;
  attributes.tax = @10.00;
  
  // 3. Log the purchase event
  MPCommerceEventAction action = MPCommerceEventActionPurchase;
  MPCommerceEvent *revenueEvent = [[MPCommerceEvent alloc] initWithAction:action product:product];
  revenueEvent.transactionAttributes = attributes;
  [[MParticle sharedInstance] logEvent:revenueEvent];

Nota: pase la divisa como un código de divisa ISO 4217 de tres letras, por ejemplo, "USD", "EUR", "INR".

8

[OPCIONAL] Añadir soporte para SKAdNetwork

SKAdNetwork es el nuevo marco de Apple para determinar la atribución de instalaciones móviles sin comprometer la privacidad del usuario final.

SKAdNetwork le permite medir el rendimiento de sus campañas de marketing de aplicaciones sin compartir la información de identificación personal del usuario.

La solución única de SKAdNetwork, SKAN, le permite implementar SKAdNetwork con un mínimo esfuerzo de ingeniería. Una vez que inicialice SKAN, cada evento que comunique a Singular se procesa automáticamente en el lado del servidor para actualizar el valor de conversión basado en su modelo de conversión predefinido. A continuación, el nuevo valor de conversión se envía a la aplicación. Este proceso se repite hasta que finaliza el periodo de medición y la aplicación envía el último valor de conversión a SKAdNetwork.

Para más información, consulte Introducción a la solución SKAdNetwork de Singulary Cómo empezar con SKAdNetwork.

El siguiente código de ejemplo habilita SKAN tras una espera de 60 segundos para el consentimiento de ATT (consulte Singular iOS SDK: Handling AppTrackingTransparency Consent).

Nota: Este código debe ejecutarse antes de inicializar mParticle.

[MPKitSingular setSKANOptions:YES isManualSkanConversionManagementMode:NO 
      withWaitForTrackingAuthorizationWithTimeoutInterval:@60.0 
      withConversionValueUpdatedHandler:^(NSInteger conversionValue) {
                    NSLog(@"conversion value %ld", conversionValue);
  }];
9

[OPCIONAL] Gestión de enlaces profundos

Los enlaces profundos son enlaces que llevan a contenidos específicos dentro de una aplicación. Cuando un usuario hace clic en un enlace profundo en un dispositivo que tiene la aplicación instalada, la aplicación se abre y muestra un producto o experiencia específica.

Los enlaces de seguimiento singularespueden incluir enlaces profundos, así como enlaces profundos diferidos(consulte nuestras Preguntas frecuentes sobre enlaces profundos y las Preguntas frecuentes sobre enlaces singularespara obtener más información).

Notas:

Manejo de enlaces profundos mediante AppDelegate:

Añade una llamada al método de inicialización SDK, incluyendo onAttributionComplete:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      //initialize mParticle 
      MParticleOptions *options = [MParticleOptions optionsWithKey:@"<MPARTICLE_KEY>" secret:@"<MPARTICLE_SECRET>"];
      options.proxyAppDelegate = NO; 
      [[MParticle sharedInstance] startWithOptions:options]; 
      return YES; 
  }

Añada también una llamada al método continueUserActivity de mParticle en continueUserActivity de AppDelegate:

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler { [[MParticle sharedInstance] continueUserActivity:userActivity restorationHandler:restorationHandler]; return YES; }

Manejo de enlaces profundos utilizando SceneDelegate:

Añada una llamada al método continueUserActivity de mParticle en continueUserActivity y willConnectToSession de SceneDelegate:

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session 
options:(UISceneConnectionOptions *)connectionOptions { NSUserActivity* userActivity = [[[connectionOptions userActivities] allObjects] firstObject]; [[MParticle sharedInstance] continueUserActivity:userActivity restorationHandler:nil]; } - (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity{ [[MParticle sharedInstance] continueUserActivity:userActivity restorationHandler:nil]; }

Pasos para la integración con Android

1

Obtenga su clave SDK de Singular

En su cuenta de Singular, vaya a "Developer Tools > SDK Integration > SDK Keys" y copie su SDK Key y Secret.

Screen_Shot_2022-10-11_at_15.30.07.png

2

Añada Singular como salida de mParticle

  1. En su cuenta de mParticle, vaya a Configuración > Salidasy haga clic en Añadir salida de eventos.
  2. Seleccione Singular en la lista desplegable.
  3. En la ventana Configuración de eventos, introduzca un nombre para la configuración e introduzca la clave y el secreto de Singular que copió en el paso anterior.
  4. Haz clic en Guardar.

image__2_.png

3

Instale el SDK

  1. Añada el servidor Maven de Singular a su buildscript como se indica a continuación. Se trata de un requisito del kit de Singular.

    repositories {
          maven { url "http://maven.singular.net"}
          ...
      }
  2. Añade la dependencia del kit al build.gradle de tu aplicación:

    dependencies {
          compile 'com.mparticle:android-singular-kit:5+'
      }
4

Inicializar el SDK

El código de inicialización del SDK debe invocarse cada vez que se abra la aplicación. Es un requisito previo para toda la funcionalidad de atribución de Singular, y también envía una nueva sesión de usuario a Singular (las sesiones se utilizan para calcular la retención de usuarios). Podrá realizar un seguimiento de las sesiones en el panel de control de mParticle, así como en los informes de Singular.

//import mParticle
  import com.mparticle.MParticle;
  import com.mparticle.MParticleOptions;
  
  public class ExampleActivity extends Activity {
      @Override
      public void onCreate() {
          super.onCreate();
          MParticleOptions options = MParticleOptions.builder(this)
                  .credentials("REPLACE ME WITH KEY", "REPLACE ME WITH SECRET")
                  .build();
          MParticle.start(options);
      }
  }
5

[OPCIONAL] Establezca el ID de usuario

El SDK de Singular puede enviar un ID de usuario desde su aplicación a Singular. Puede ser un nombre de usuario, una dirección de correo electrónico, una cadena generada aleatoriamente o cualquier otro identificador que utilice como ID de usuario.

Singular utiliza el ID de usuario en las exportaciones de datos a nivel de usuario y en las devoluciones internas de BI (si configura dichas devoluciones).

Una vez configurado el ID de usuario, se envía junto con cualquier sesión y evento. El ID de usuario persiste hasta que se desconfigura o hasta que se desinstala la aplicación.Cerrar/reiniciar la aplicación no desconfigura el ID de usuario.

IdentityApiRequest identityRequest = IdentityApiRequest.withEmptyUser()
          .email("foo@example.com")
          .customerId("123456")
          .build();
  MParticle.getInstance().Identity().login(identityRequest);
6

[OPCIONAL] Seguimiento de eventos

Singular puede recopilar datos sobre eventos dentro de la aplicación para ayudar a analizar el rendimiento de sus campañas y medir los KPI.

Dependiendo de su aplicación, es posible que desee realizar un seguimiento de eventos como inicios de sesión de usuario, registros, finalización de tutoriales o subida de nivel en un juego.

El siguiente código de ejemplo informa de un evento llamado "test_event" a Singular con información adicional (customAttributes) en formato JSONObject.

Map<String, String> customAttributes = new HashMap<String, String>();
            customAttributes.put("category", "event_category");
            MPEvent event = new MPEvent.Builder("test_event", MParticle.EventType.Navigation)
                   .customAttributes(customAttributes)
                   .build();
            MParticle.getInstance().logEvent(event);
          
7

[OPCIONAL] Seguimiento de ingresos

Singular puede recopilar datos sobre los ingresos obtenidos a través de la aplicación mediante la recepción de eventos Product.PURCHASE de mParticle.

Los ingresos del evento se calculan como cantidad * coste_producto.

Product product = new Product.Builder("extra life", "extra-life", 100.00)
          .quantity(4.0)
          .build();
  TransactionAttributes attributes = new TransactionAttributes("123123")
          .setRevenue(430.00)
          .setTax(30.00);
  
  CommerceEvent event = new CommerceEvent.Builder(Product.PURCHASE, product)
          .transactionAttributes(attributes)
          .currency("USD")
          .build();
  
  MParticle.getInstance().logEvent(event);

Nota: Pase la divisa como un código de divisa ISO 4217 de tres letras, por ejemplo, "USD", "EUR", "INR".

8

[OPCIONAL] Gestión de enlaces profundos

Los enlaces profundos son enlaces que llevan a contenidos específicos dentro de una aplicación. Cuando un usuario hace clic en un enlace profundo en un dispositivo que tiene instalada la aplicación, ésta se abre y muestra un producto o experiencia específicos.

Los enlaces de seguimiento singularespueden incluir enlaces profundos, así como enlaces profundos diferidos(consulte nuestras Preguntas frecuentes sobre enlaces profundos y las Preguntas frecuentes sobre enlaces singularespara obtener más información).

Notas:

Para gestionar los enlaces profundos, implemente AttributionListener como en el siguiente ejemplo. Tenga en cuenta que debe implementar AttributionListener en cada actividad de entrada principal.

public class ActivityDeeplink extends AppCompatActivity implements AttributionListener {
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          MParticleOptions options = MParticleOptions.builder(this)
                  .credentials("REPLACE ME WITH KEY", "REPLACE ME WITH SECRET")
                  .attributionListener(this)
                  .logLevel(MParticle.LogLevel.VERBOSE)
                  .build();
          MParticle.start(options);
      }
  
      @Override
      public void onResult(@NonNull @NotNull AttributionResult attributionResult) {
          if (attributionResult.getServiceProviderId() == MParticle.ServiceProviders.SINGULAR) {
              String deeplink = attributionResult.getLink();
              JSONObject data = attributionResult.getParameters();
              String passthrough = data.optString("passthrough", null);
              // Deal with deep link
          }
      }
  
      @Override
      public void onError(@NonNull @NotNull AttributionError attributionError) {
          // Deal with error
      }
  }