Integración iOS

¿Por qué utilizar el SDK de EMMA en tu APP?

Descarga e Integración básica

Integración Acquisition

Integración Behavior

Integración Notificaciones Push

Integración Messaging

Añadir alerta de valoración de la App

Depurando el código

Subir tu App a Appstore

 

¿Por qué utilizar el SDK de EMMA en tu App?

El SDK de EMMA proporciona una funcionalidad única para el seguimiento completo de los usuarios de tu App. Hemos desarrollado un SDK muy resistente, seguro y ligero con más de 2.000 Millones de instalaciones hasta la fecha. Y por supuesto, fácil de integrar. 

EMMA puede medir el origen de instalaciones (incluyendo Facebook, Twitter y Google), sesiones, eventos que realizan los usuarios, localización, ... con un potente módulo de segmentación para poder evaluar el ROI y la retención de tus usuarios y fidelizarlos gracias a nuestras herramientas de comunicación Push e In-App Messaging.

EMMA iOS SDK es compatible con todos los dispositivos (iPhone, iPod, iPad) con versión iOS 8 o superior.

 

Descarga e integración básica

Descarga EMMA iOS SDK

Ver el Changelog

Descarga a través de CocoaPods.

 La última versión de EMMA está disponible a través de CocoaPods:

  1. Instala CocoaPods usando
    gem install cocoapods 
  2. Si es la primera vez que usas CocoaPods, puedes opcionalmente ejecutar 
    pod setup
    para bajarte el repositorio con todos los “specs" y consultarlos en local, esto directamente creara una copia del repositorio de GitHub.
     
  3. Crea un archivo en tu proyecto Xcode llamado 
    Podfile
    A continuación añade la linea:
    pod 'eMMa' 
  4. Finalmente, ejecuta en el directorio del proyecto Xcode lo siguiente
    pod install

    Una vez hecho, CocoaPods descargará e instalará la librería de EMMA creando un nuevo archivo .xcworkspace. Por último, abrir este archivo en Xcode.

Descarga manual

Puedes obtener la última versión de EMMA aquí. Una vez descargado tienes que añadirlo a tu proyecto en Xcode.

En Xcode, vete a General >> Embedded Binaries >> Haz click en + para añadir un binario nuevo.

Haz click en Add Other y añade EMMA_iOS.framework a tu proyecto.

En Xcode, vete a General >> Linked Frameworks and Libraries >> Haz click en + para añadir una nueva librería.

Haz click en Add Other y añade EMMA_iOS.framework a tu proyecto.

Selecciona el Status de EMMA_iOS.framework como Optional.

EMMA_1.png

 

Incluir SDK en tu App (Obligatorio)

  • Inicialización del SDK & Evento Install (Requerimiento mínimo para medir) 

Esta guía te permitirá medir instalaciones orgánicas y no orgánicas de tu App.

Añade los siguientes archivos y parámetros a tu app:

  • Añade los siguientes frameworks al proyecto:
    • CoreLocation.framework
    • AdSupport.framework

Si tienes problemas ejecutando esta lib deberías eliminar todos los weak-links de las librerías. Además en Otros Linker Flags, deberías configurar las opciones -ObjC - all_load:

Nota: El SDK de EMMA soporta BITCODE. 

 

Inicialización del SDK & Evento Install (Requerimiento Mínimo)

NOTA: Este es el requerimiento mínimo para comenzar a medir instalaciones de tu App.

Importa EMMA en tu Application Delegate.

#import <EMMA_iOS/EMMA.h>

También en tu Application Delegate añade el siguiente código a la función theapplicationdidFinishLaunchingWithOptions:

[EMMA startSession:@"YOURSESSIONKEY"];

Puedes obtener tu SessionKey añadiendo tu app a My Account siguiendo estas instrucciones.

Opcional

En algunos casos es necesario cambiar la url de la API de EMMA (p.e proxies), en este caso se requiere añadir el siguiente método encima del starteMMaSession:

[EMMA setAPIeMMaURL:@"https://www.your_proxy_url.com/"];

 

Actualización a la versión 4

Las versiones previas que se actualicen a la 4 deberán realizar los siguientes cambios.

EMMA es ahora un Framework

El SDK ha cambiado de una librería estática a un framework, por lo que ha cambiado la manera de incluir las cabeceras de EMMA.

Reemplaza en todos los sitios donde uses el SDK de EMMA

#import <eMMa/eMMa.h>

por

#import <EMMA_iOS/EMMA.h> 

 

Integración Acquisition

En la sección de Acquisition podrás tener los datos de todas las campañas gestionadas con EMMA. A continuación se detalla la documentación específica para que puedas gestionar las campañas que desarrolles con Facebook y con Twitter y, además, la documentación detallada de cómo integrar la funcionalidad de Powlink.

 

Medición de Facebook App Installs y Twitter App Promotion

EMMA está 100% integrado con Facebook y Twitter para el tracking vía Appsflyer. Con esta integración serás capaz de medir el origen de los anuncios en EMMA sin necesidad de integrar el SDK propio de Facebook y Twitter.

Añade lo siguiente: (disponible aquí)

  • AppsFlyerTracker.h
  • libAppsFlyerLib.a

Si tu proyecto incluye CocoaPods puedes integrar AppsFlyer de la siguiente forma:

pod ‘AppsFlyerFramework’ 

Para inicializar en la aplicación, por favor, añade el siguiente código a la función yourdidFinishLaunchingWithOptions:

[AppsFlyerTracker sharedTracker].appsFlyerDevKey = @"EMMASOCIALKEY";
[AppsFlyerTracker sharedTracker].appleAppID = @"Your_iTunes_APP_ID";

Añade el siguiente código a tu archivo AppDelegate.m en la función atapplicationDidBecomeActive:

[[AppsFlyerTracker sharedTracker] trackAppLaunch];

El EMMA Social Key que tienes que introducir es el ID que se necesita para realizar un seguimiento de las campañas de Facebook App Install y Twitter App Promotion.

Para solicitar el EMMA Social Key debes seguir estos pasos:

1.  Haz login en la página web de EMMA y dirígete a My Account > Configuration > Edit app.

EMMA_2.png

 

 

2.  Dirígete a la zona de Media Source Settings y añade la siguiente información sobre tu aplicación:

EMMA_3.png

Para sacar el App Store ID puedes copiar el ID a través del enlace generado en AppStore, como en el siguiente ejemplo:

EMMA_4.png

Para sacar el Google Play ID puedes copiar el ID a través del enlace generado en GooglePlay, como en el siguiente ejemplo:

EMMA_5.png

Conoce cómo obtener el Facebook App ID visitando este artículo.

 

4.  Selecciona la opción Guardar (Submit) para guardar los cambios.

5.  Envíanos un email a support@emma.io y te daremos tu clave del EMMA Social Key. Recibirás un e-mail con tu clave. 

6.  Si todo se ha realizado correctamente, encontrarás las campañas de Facebook y Twitter en la sección Acquisition > AppTracker. Una vez la campaña esté activa, los datos de rendimiento entrarán automáticamente EMMA.

EMMA_6.png

 

Integración del Powlink

Para soportar Powlink en iOS, primero, es necesario configurar en el Dashboard de EMMA el subdominio en powlink.io que usará tu aplicación, y cubrir los datos del Apple Store Bundle ID y el Apple Team ID. Esto se configura en el apartado de My Account, en la sección de Media Source Settings de tu aplicación.

EMMA_7.png

Lo siguiente es crear un Provisioning Profile para tu aplicación, en tu Apple's Developer Center, para tu aplicación debes activar Associated Domains, descargar el Provisioning Profile e instalarlo en Xcode. 

Conociendo el subdominio que corresponde a tus Powlinks, en el proyecto de tu aplicación en Xcode, seleccionando el target de tu aplicación, en el apartado de Capabilities debes activar la opción de Associated Domains.

EMMA_8.png

Al activar esta opción, Xcode te pedirá que elijas un Apple Team ID, tras elegirlo podrás añadir los dominios que manejará tu aplicación, debes añadir el subdominio de powlink.io que has configurado en el dashboard de EMMA , precedido de "applinks:"

applinks:mysubdomain.powlink.io

EMMA_9.png

Ahora sólo queda manejar el Powlink dentro de tu aplicación, para ello debes implementar el método application:continueUserActivity:restorationHandler: en tu AppDelegate. Procesando los paths de los Powlinks recibidos podrás lanzar distintas partes de tu aplicación.

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * restorableObjects))restorationHandler{
    
    if ([userActivity.activityType isEqualToString: NSUserActivityTypeBrowsingWeb]) {
        NSURL *url = userActivity.webpageURL;
        //Process url. Manage Powlink path
    }
    return YES;
}

 

Integración Behavior

Con EMMA puedes realizar una integración completa del SDK que te permita conocer la localización de tus usuarios, cómo se registran en tu App, cuántas transacciones realizan y hasta sus características propias. Es decir, toda la información de tus usuarios que obtendrás en la sección de Behavior

En los siguientes artículos se especifica la integración de la medición de cada uno de estos aspectos:

 

Medición Eventos

La plataforma de EMMA hace la diferenciación entre dos tipos de eventos. Los que la plataforma incluye por defecto y los eventos Custom que quieras integrar según la estructura de tu aplicación.

Eventos por defecto

En los eventos por defecto EMMA permite medir Leads (o registros), usuarios registrados fuera de la app, registros antiguos y cualquier etiqueta que desees vincular a un usuario de cara a poder crear segmentos personalizados y los Login (usuarios que han iniciado sesión a través de un correo ya existente o bien a través de alguna plataforma social).

Sigue los siguientes pasos para su integración:

Sign Up/Registros/Leads

[EMMA registerUserID:USER_ID forMail:MAIL]

RegisterUser mide un registro completo de un dispositivo en la base de datos de EMMA para un user_id (NSString) y un email (NSString)

Login

[EMMA loginUserID:USER_ID forMail:MAIL]

LoginUser recoge los datos del usuario en la base de datos de EMMA para un user_id (NSString) y un email (NSString). Cuando se loguea puedes usar [eMMa loginDefault] para recoger otro Sign In del usuario con los mismos datos.

Eventos custom

Con EMMA puedes medir cada acción del usuario como un evento personalizable.

[EMMA trackEvent:@"EVENT_TOKEN"];

Usa trackEvent para contar el número de veces que ciertos eventos suceden durante una sesión en tu app. 

Esto puede ser útil para medir cuántas veces los usuarios convierten en diferentes acciones, por ejemplo. Existe una limitación de medición de 30 eventos por app. 

Puedes obtener los EVENT_TOKENS creándolo en la plataforma de EMMA. Si un token no existente es enviado a EMMA se devolverá un error. 

Medición transacciones

EMMA permite medir cualquier transacción o compra que se realice en tu app. 

Iniciar transacción

[EMMA startOrder:YOUR_ORDER_ID customerId:CUSTOMER_ID totalPrice:TOTAL_PRICE coupon:COUPON extras:EXTRAS currencyCode:CURRENCY_CODE]

Inicia una transacción. Puedes añadir los siguientes parámetros:

YOUR_ORDER_ID

: NSString con el ID de la transacción.

CUSTOMER_ID

: NSString con el ID de cliente. Si no lo envías EMMA usará el ID del login (si existe).

TOTAL_PRICE

: Etiqueta con el precio total. 

COUPON

: NSString with your coupon if needed.

EXTRAS

: NSDictionary con hasta 20 parámetros extra (ej: categoría de producto). Cada parámetro extra podrá ser usado posteriormente para filtrar en EMMA.

CURRENCY_CODE

: NSString con un código de moneda válido (EUR,USD,..) Si el código de moneda no es válido será usado EUR.

Puedes usar métodos abreviados si no necesitas todos los parámetros. Puedes encontrarlos en eMMa.h.

 

Añadir Productos a la transacción

[EMMA addProduct:PRODUCT_ID name:PRODUCT_NAME qty:QUANTITY price:PRICE extras:YOUR_EXTRAS]

Añade productos a la transacción iniciada. startOrder siempre debe ser usado con anterioridad.Puedes pasar los siguientes parámetros:

PRODUCT_ID

: NSString con el ID del producto.

NAME

: NSString con el nombre de producto.

QTY

: Etiqueta con la cantidad de producto.

PRICE

: Etiqueta con el precio del producto.

EXTRAS

: NSDictionary con hasta 20 parámetros extra como la moneda, la categoría...

 

Medición de la transacción

[EMMA trackOrder]

Mide la transacción finalizada. Este método debe ser usado siempre después de startOrder y de que todos los productos hayan sido añadidos.

El orden de medición debe ser siempre startOrder>addProduct(*distinct products)>trackOrder

 

Cancelación de la transacción

[EMMA cancelOrder:ORDER_ID]

Cancela la transacción por el ID de la misma. Si tu app permite la cancelación de las transacciones este método actualizará los datos de transacciones en EMMA.

 

Medición Tags

[EMMA trackExtraUserInfo:YOUR_NSDICTIONARY]

Este método actualiza o añade parámetros extra de cara a obtener mejor segmentación en el filtrado "Users with tag". Puede ser usado en el registro, en el login o en cualquier otra sección de la app donde se recoja información del usuario. 

Si quieres usar la EMMA RULE On his Birthday envía la fecha de cumpleaños con el método para el TAG en el siguiente formato: 

Nombre: BIRTHDAY

Valor: YYYY-MM-DD

 

Medición localización

Si tu app tiene los permisos requeridos, puedes medir la localización de cada dispositivo usando el siguiente código:

[EMMA trackLocation];

 

Información del usuario [Get User Info]

Get User ID

[EMMA getUserID:^(id result) {
NSLog(@"ID:%@",result); // Your code
}];

Este método devuelve el EMMA ID como un NSString. Este ID es único para cada usuario y puede ser usado para filtrar cuando se envían comunicaciones. 

Get User Info

[EMMA getUserInfo:^(id result) {
NSLog(@"Info:%@",result); // Your code
}];

Este método devuelve toda la información del usuario en un formato JSON. El JSON incluye los siguientes parámetro, todos en formato de NSDictionary con todos los valores NSString:

id El mismo ID único que en el método (eMMa.getUserID)
udid ID único por instalación de la app (IDFA/AAID habitualmente)
emma_build EMMA version"]">Identifica la versión del SDK de EMMA que se está usando
email Email del usuario en caso de que el registro o el login estén integrados
customerid ID asignado al usuario tras el registro o login
created_at Momento en el que el usuario ha sido creado
updated_at La última vez que el usuario actualizó la información
registred_at Momento en el que el usuario se registró
fisrt_login Momento en el que el usuario realizó su primer login
last_login Momento en el que el usuario realizó su último login
device Dispositivo del usuario
app_version Versión de la app
os_version Versión del sistema operativo
rated Si el usuario ha puntuado la app
token Identificador del push (token)
inactive Si el usuario está inactivo para recibir notificaciones push
latitude  Latitud del usuario en el caso de que se permita y mida la geolocalización
longitude  Longitud del usuario en el caso de que se permita y mida la geolocalización
emma_city  Ciudad del usuario en el caso de que se permita y mida la geolocalización
emma_country  País del usuario en el caso de que se permita y mida la geolocalización
emma_state  País del usuario en el caso de que se permita y mida la geolocalización
emma_device_id ID único del dispositivo.
emma_referrer_id ID de la campaña de la que el usuario proviene (si ha llegado a través de una campaña del EMMA AppTracker)
loyal_user_at
Momento en el que el usuario se convirtió en Loyal User 
loyal_buy_at Momento en el que el usuario se convirtió en Loyal Buyer 
emma_num_sessions Número de sesiones (aperturas de la app) del usuario
last_session_at Última sesión (apertura de la app) del usuario
tag_name Nombre y valor de todos los tags del usuario

Además, si el usuario proviene de una campaña de Facebook, se incluirán los siguientes parámetros:

eat_sub1 Nombre de la app
eat_sub2 "facebook" (Valor fijo)
eat_sub3 "Facebook's Campaign" (Valor fijo)
eat_sub4 "cpi" (Valor fijo)
eat_sub5 Nombre de la campaña en Facebook
eat_sub6 ID de la campaña en Facebook
eat_sub7 Nombre del Adgroup en Facebook
eat_sub8 ID del Adgroup en Facebook
eat_sub9 Nombre del Adset en Facebook
eat_sub10 ID del Adset en Facebook

En el caso de que el usuario provenga del AppTracker, el JSON podrá incluir los siguientes parámetros personalizados.

Para poder usar este método es necesario tener contratada la feature Raw Export. 

 

Integración Notificaciones Push

NOTA: Para diferenciar una notificación de nuestro sistema de push respecto otros sistemas, el payload enviado por EMMA contiene un flag denominado "eMMa". 

EMMA te permite añadir un potente sistema de Notificaciones Push fácil de integrar. La plataforma también permite enviar info a través de las notificaciones y generar cualquier acción dentro de tu app gracias a ellas.

Para que las notificaciones Push funcionen correctamente en tu aplicación deberás integrar los siguientes puntos:

 

Certificados Push iOS

1.  El primer paso es solicitar el certificado a la entidad emisora de certificados. Abre el Keychain desde Aplicaciones> Utilidades.

EMMA_10.png

2.  A continuación, introduce tu e-mail y añade el nombre para el nuevo certificado. Selecciona "Guardar en el disco".

EMMA_11.png

3.  Se generará un archivo llamado “CertificateSigningRequest.certSigningRequest”. Debes actualizarlo en tu cuenta de desarrollador de Apple.

    • Dirígete al portal Provisioning de iOS.
    • App IDs
    • Clica en  ‘Configure’ al lado de tu App.
    • Clica en ‘Enable for Apple Push Notification service’.
    • Clica en el botón ‘Configure’ detrás de Development.
    • Clica en ‘Continue
    • Actualiza el archivo ”CertificateSigningRequest.certSigningRequest”.

4.  Se generará el certificado aps_developer_identity.cer. Haz doble clic en él para guardarlo en tu Keychain.

5.  Repítelo para producción: Ahora tendrás que regenerar un perfil de desarrollo Provisioning para tu aplicación, dado que el actual no será consciente de que las capacidades de las notificaciones Push. 

    • Dirígete a Provisioning en la barra lateral y selecciona Edit, luego Modify después de tu App. Tendrás que cambiar algunas cosas para que se regenere un nuevo perfil Provisioning, por ejemplo, sólo puedes anular la selección de uno de tus dispositivos de desarrollo.
    • Entonces haz click en Submit.
    • Refresca la página: Tu perfil Provisioning debería estar listo para descargar.  
    • Ahora entra Organizer, Xcode y elimina tu antiguo perfil Provisioning. Arrastra el nuevo perfil en Xcode para instalarlo.
    • Ahora tendrás que cambiar las entradas de la firma de codificación en Build Settings para reflejar su nuevo perfil Provisioning. Asegúrate de cambiar la configuración de firma de código en "Targets", así como de proyectos.
    • Finalmente, deberás generar dos p12 para cada certificado. Dirígete al Keychain y busca tu certificado de desarrollo Push de Apple.
    • Entonces, con el botón derecho, expórtalo. Deberás poner la contraseña, esta contraseña debe ser proporcionada con tus p12 para la instalación en el servidor de EMMA. 
    • Haz clic en la flecha y repite el proceso para tu clave privada. Ahora tendrás dos p12, uno para el certificado y otro para tu clave.
    • Repite esto para producción utilizando la misma contraseña. 

6.  Haz login en EMMA, dirígete a My Account > Configuration > Edit app.  

EMMA_12.png

 

7.  Dirígete a la sección de la configuración del O.SiOS Push certificates para subir tus certificados. Selecciona Upload certificates para cargar tus archivos de Dev y Prod certificates (archivo .p12) junto a las contraseñas y selecciona Submit para que se guarden. 

EMMA_13.png

 

 

Usando EMMA Notificaciones Push

Una vez generados los certificados de tu app, ya puedes empezar a integrar las Notificaciones Push:

[EMMA startPushSystem:LAUNCH_OPTIONS]

Arranca el sistema Push desde

applicationDidFinishLaunching

Necesitas pasar los métodos launchOptions después de iniciar el EMMA session.

LAUNCH_OPTIONS

: NSDictionary recibido desde DidFinishLaunching

Puedes establecer las opciones del Push con los siguientes métodos:

[EMMA setPushSystemDelegate:YOUR_DELEGATE]

: NSObject que obtendrá la info del push enviada a través del EMMA dashboard. Esto sólo es necesario si necesitas realizar acciones extra en tu app dependiendo del Push recibido.

[EMMA setPushSystemOptions:(eMMaPushSystemOptions)options]

: eMMaPushSystemDisableAlert -> Inhabilita que se muestren las alertas de las Notificaciones Push recibidas.

Para añadir los métodos de las notificaciones(solo iOS 10) tenemos que implementar el delegado del framework UserNotifications:

Swift

import UserNotifications 

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate,UNUserNotificationCenterDelegate {
...
}

Objective-C

#import <UserNotifications/UserNotifications.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate,UNUserNotificationCenterDelegate>
@end

Para añadir el delegado al SDK:

Swift

 EMMA.setPushNotificationsDelegate(self)

Objective-C

 [EMMA setPushNotificationsDelegate:self];

Es también necesario añadir esto métodos en tu AppDelegate:

Swift

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
	EMMA.handlePush(userInfo)
}
	
func application(_ application: UIApplication, didRegister notificationSettings: UIUserNotificationSettings) {
	application.registerForRemoteNotifications()
}
	
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
	EMMA.registerToken(deviceToken)
}
	
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
	NSLog("Error registering notifications " + error.localizedDescription);
}
	
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter,  willPresent notification: UNNotification, withCompletionHandler   completionHandler: @escaping (_ options:   UNNotificationPresentationOptions) -> Void) {
	EMMA.handlePush(notification.request.content.userInfo)
}
	
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
	EMMA.handlePush(response.notification.request.content.userInfo)
}

Objective-C

 -(void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [EMMA registerToken:deviceToken];
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler{
    [EMMA handlePush:userInfo];
}


- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
    //register to receive notifications
    [application registerForRemoteNotifications];
}

-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@"Error: %@", error);
}


#ifdef __IPHONE_10_0
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{
    [EMMA handlePush:notification.request.content.userInfo];
}

-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{
    [EMMA handlePush:response.notification.request.content.userInfo];
}
#endif

Cambios en iOS 10

Para registrar el token es necesario activar las Notificaciones Push en Capabilities.

EMMA_14.png

 

Push Tag

[EMMA checkPushTag:(NSString *)pushTag withBlock:(EMMAPushTagBlock)block]

EMMAPushTagBlock definition

typedef void(^EMMAPushTagBlock)(NSString* pushTag, NSString* pushTagID);

Ejemplo

[EMMA checkPushTag:@"Account" withBlock:^(NSString *pushTag, NSString *pushTagID) {
//Redirects to Accounts tab
[self performSegueWithIdentifier:@"AccountSegue" sender:self];
}];

Por otra parte, ahora puedes medir todos los mensajes enviados por los Push y mostrar en una alerta custom más de una vez. Para hacer esto tienes que añadir este método en tu delegate especificado en eMMaPush Message.

Push Message

-(void)pushMessage:(NSString*)pushMessage{
//Do whatever you want with pushMessage
}

Puedes usar métodos abreviados si no necesitas todos los parámetros. Puedes encontrarlos en EMMA.h.

Rich Push, sonidos personalizados en las notificaciones push

Para usar sonidos personalizados en las notificaciones que envíes con EMMA, tienes que añadir los archivos de sonido .caf que quieras a tu aplicación, en la raíz del paquete de tu aplicación o en Library/Sounds/. Recuerda que debes emplear para los sonidos los mismos nombres de archivo en iOS y Android.

Rich Push URL uso DeepLinking

Puedes redireccionar las aperturas de las notificaciones push a una sección en tu app. Para ello debes usar una estructura como esta: 

scheme://host/page1/page2/page3

De cara a habilitar tu app para recibir scheme deep link debes:

1) Ir a Xcode > App Target > Info > URL Types e introducir tu custom scheme.

EMMA_15.png

 2) Añadir este método a tu AppDelegate.m:

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation: (id)annotation{ //Manage by url return YES; }

  

 

iOS Rich Push Notification

En iOS 10 se han introducido las Rich Push Notifications, las cuales permiten añadir imagen, video, audio o gifs como adjuntos en las notificaciones push.

Las Rich Push Notifications se habilitan mediante una Notification Service Extension, un binario aparte dentro del paquete de tu aplicación. Antes de mostrar una nueva notificación push, el sistema llamará a tu Notication Service Extension permitiéndote modificar el contenido y los adjuntos que serán mostrados.

Creando la Notification Service Extension

Para crear la Notification Service Extension en tu proyecto, en Xcode eliges File -> New -> Target y eliges la plantilla de la Notification Service Extension.

EMMA_16.png

EMMA_17.png

 

Puedes nombrar la extensión a tu gusto, la llamaremos RichPushExtension para este tutorial. Asegúrate de incluir la extensión en tu aplicación.

EMMA_18.png

 

Al pulsar en Finish se te preguntará para activar la extensión, haz click en Activate para finalizar.

                             EMMA_19.png

 

Al acabar estos pasos, tres nuevos archivos han sido añadidos al directorio con el nombre de la extensión que hemos creado (RichPushExtension en nuestro caso): NotificationService.h, NotificationService.m and Info.plist.

EMMA_20.png

 

Por último asegúrate de que estan habilitadas las notificaciones push para la extensión que hemos creado. Selecciona tu nueva extension (RichPushExtension), elige Capabilities y activa Push Notifications.

EMMA_21.png

 

Cambios en el código

Abre el archivo NotificationService.m. Elimina todo el código de la plantilla y pega el código que indicamos a continuación:

#import "NotificationService.h"

@interface NotificationService ()

@property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);
@property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;

@end

@implementation NotificationService

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];
    
    // Check for rich attachment
    NSDictionary *userInfo = [self.bestAttemptContent userInfo];
    if (userInfo == nil) {
        [self taskComplete];
        return;
    }
    
    NSString *urlImagePush = [userInfo objectForKey:@"media-attachment"];
    if (urlImagePush == nil) {
        [self taskComplete];
        return;
    }
    
    NSString *typeImage = [self fileExtensionForMediaUrl:urlImagePush];
    if (typeImage == nil) {
        [self taskComplete];
        return;
    }
    
    // load the attachment
    [self loadAttachmentForUrlString:urlImagePush
                            withType:typeImage
                   completionHandler:^(UNNotificationAttachment *attachment) {
                       if (attachment) {
                           self.bestAttemptContent.attachments = [NSArray arrayWithObject:attachment];
                       }
                       [self taskComplete];
                   }];
    
}

- (void)serviceExtensionTimeWillExpire {
    // Called just before the extension will be terminated by the system.
    // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
    [self taskComplete];
}

- (void)taskComplete {
    self.contentHandler(self.bestAttemptContent);
}

- (void)loadAttachmentForUrlString:(NSString *)urlString withType:(NSString *)type
                 completionHandler:(void(^)(UNNotificationAttachment *))completionHandler  {

    __block UNNotificationAttachment *attachment = nil;
    NSURL *attachmentURL = [NSURL URLWithString:urlString];
    
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    [[session downloadTaskWithURL:attachmentURL
                completionHandler:^(NSURL *temporaryFileLocation, NSURLResponse *response, NSError *error) {
                    if (error != nil) {
                        NSLog(@"NSE ERROR. %@", error.localizedDescription);
                    } else {
                        NSFileManager *fileManager = [NSFileManager defaultManager];
                        NSURL *localURL = [NSURL fileURLWithPath:[temporaryFileLocation.path stringByAppendingString:type]];
                        [fileManager moveItemAtURL:temporaryFileLocation toURL:localURL error:&error];
                        
                        NSError *attachmentError = nil;
                        attachment = [UNNotificationAttachment attachmentWithIdentifier:@"" URL:localURL options:nil error:&attachmentError];
                        if (attachmentError) {
                            NSLog(@"NSE ERROR. %@", attachmentError.localizedDescription);
                        }
                    }
                    completionHandler(attachment);
                }] resume];
}

- (NSString *)fileExtensionForMediaUrl:(NSString *)url {
    NSString *ext = nil;
    //EMMA always send pngs without extension in filename
    if ([url rangeOfString:@"emma.io"].location != NSNotFound) {
        ext = @"png";
    } else if ([url rangeOfString:@"jpg"].location != NSNotFound) {
        ext = @"jpg";
    } else if ([url rangeOfString:@"jpeg"].location != NSNotFound) {
        ext = @"jpg";
    } else if ([url rangeOfString:@"png"].location != NSNotFound) {
        ext = @"png";
    } else if ([url rangeOfString:@"gif"].location != NSNotFound) {
        ext = @"gif";
    }
    
    if (ext != nil) {
        ext = [@"." stringByAppendingString:ext];
    }
    return ext;
}

@end

 

Integración Messaging

Messaging incluye 7 formatos comunicativos diferentes que puedes integrar para impactar a tus usuarios:

En muchos de estos formatos comunicativos puedes delimitar las url's de redirección que quieres introducir. Con la funcionalidad de EMMA Whitelist puedes delimitar qué contenido quieres que se muestre en las webviews programadas. 

Revisar Campaña 

[EMMA inAppMessage: (InAppType) type andRequest:(EMMAInAppRequest *) request];

Usa inAppMessage para confirmar si se muestra la Campaña creada en la plataforma de EMMA correspondiente al Type especificado

En EMMAInAppRequest se pueden definir lo siguientes atributos:

EMMAInAppRequest* request = [EMMAInAppRequest new];
request.nateiveAdTemplateId = @"nativeAdTemplateId";
request.label = @"label";
request.inAppMessageId = @"inAppMessageId";
 

*En los siguientes pasos se especificará cuales son los atributos que deben usarse para cada tipo de campaña

Campaña con etiqueta

EMMAInAppRequest* request = [EMMAInAppRequest new];
request.label = @"label";
[EMMA inAppMessage: AdBall andRequest: request];

Si lo deseas puedes pasar un custom String que etiquete la Campaña en caso de que utilices más de una Campaña del mismo tipo en tu app y necesites distinguirlas.

Añadir interfaz

[EMMA addInAppDelegate:(id<EMMAInAppMessageDeletage>) delegate];
EMMAInAppRequest* request = [EMMAInAppRequest new];
request.label = @"label";
[EMMA inAppMessage: AdBall andRequest: request];

Si lo deseas puedes pasar añadir una (o varias) interfaz para recibir los diferentes eventos referentes a las Campañas de tu app.

 

Usando EMMA Banner

Los Banners de EMMA te permiten mostrar un banner en tu app con información promocional customizada. El banner será mostrado en función de la configuración que establezcas en el dashboard de EMMA. Es una comunicación que permite mostrarle al usuario una webview externa con contenido HTML o redireccionar a otra pestaña de la aplicación (vía deeplink). 

EMMA_22.png

Para mostrar los Banners en tu app necesitas al menos integrar el primer método descrito a continuación:

IMPORTANTE: Se recomienda hacer la llamada dentro:

viewDidLayoutSubviews

Check Banner

[EMMA inAppMessage:Banner andRequest: nil];

Usa checkForBanner para mostrar los Banners programados en el dashboard de EMMA . YOUR_VIEWCONTROLLER es tu top view controller donde tú decides cómo quieres mostrar el ViewController.

Banner auto Creation

[EMMA setBannerAutoCreation:(BOOL) autoCreation];

Establece el parámetro para autocrear el Banner cuando se está volviendo de background, y SÍ, se creará el Banner automáticamente al volver de background.

Banner con label

EMMAInAppRequest* request = [EMMAInAppRequest new];
request.label = @"label";
[EMMA inAppMessage: Banner andRequest: request];

Usa el checkForBanner para chequear si el Banner mostrado fue añadido al EMMA dashboard.YOUR_VIEWCONTROLLER es tu top view controller donde tu decides como quieres mostrar el ViewController. Si quieres puedes pasar un custom NSString que etiquete el Banner en caso de que uses más de un Banner en tu app y necesites distinguirlos. El block se invocará cuando el banner se muestre o cuando no haya banners disponibles.

NOTA: No puedes usar el parámetro de autocreación usando la LABEL porque el Banner etiquetado está anexado a una parte específica de la app, y no al inicio.

 

 

Usando EMMA Startview

La Startview de EMMA te permite mostrar información en HTML al inicio de tu como una webview.

EMMA_23.png

Para permitir el uso de Startviews debes integrar al menos el primer método:

StartView será presentado en:

UIViewController

Por defecto EMMA usará:

[[[UIApplication sharedApplication] keyWindow] rootViewController]

Pero puedes establecer tu propio EMMA RootViewController usando:

[EMMA seteMMaRootViewController:YOUR_VIEW_CONTROLLER]

Si ambos son nulos, la Startview no será mostrada.

Ahora la Startview quedaría integrada por defecto pero puedes customizarla usando los siguientes métodos:

StartView Options

[EMMAsetStartViewOptions:(EMMAStartViewOptions)options];

Listado de opciones:

eMMaStartViewManualCall

Establece la Startview de forma manual. Útil para el uso de labels. También puedes inhabilitar el check de la Startview al volver del background.

eMMaStartViewOpenLinksInSafari

Establece que la redirección de la Startview se realice en un navegador independiente.

Usa esta estructura si quieres usar el ManualCall y el OpenLinksInSafari al mismo tiempo:

[eMMa setStartViewOptions:eMMaStartViewOpenLinksInSafari|eMMaStartViewManualCall]; 

 

 

Usando EMMA Adball

EMMA AdBall te permite mostrar un pequeño gráfico circular en su aplicación que el usuario puede desplazar libremente por la pantalla de inicio de la app y también cerrarla. Si se presiona sobre este aparece un pop-up con contenido HTML.

EMMA_24.png

Si deseas habilitar el AdBall necesitas al menos implementar el primer método. Se puede configurar siguiendo estas indicaciones.

Check AdBall

[EMMA inAppMessage: AdBall andRequest: nil];

Se debe utilizar checkForAdBall para revisar que los AdBalls configurados en la plataforma de EMMA aparecerán después en la aplicación.

Comprobar si se está mostrando el AdBall

[EMMA isAdBallShowing];

Utilizar para comprobar si el AdBall se está mostrando en la pantalla del dispositivo. Devuelve BOOL true si se está mostrando en la pantalla.

 

Usando EMMA Dynamic Tab

El EMMA tabBar View (DynamicTab) te permite mostrar información en HTML en una nueva sección de su aplicación (sólo en el caso de que ya utilice un TabBar en su app). El nuevo TabBar Item puede ser creado localmente o en la plataforma de EMMA.

EMMA_25.png

Si se realiza de ambas formas, prevalecerá el TabBar Item dinámico creado directamente en EMMA .

Para habilitar esta posibilidad en su app necesitará implementar al menos el primer método. Se puede configurar siguiendo estas indicaciones:

[EMMA inAppMessage: PromoTab andRequest: nil];

DynamicTab TabController

[EMMA setPromoTabBarController:(UITabBarController*)tabBarController];

Establece el UITabBarController donde se encontrará el DynamicTab. Si no se define ningún UITabBarController, la DynamicTab no se ejecutará.

Dynamic Tab Index

[EMMA setPromoTabBarIndex:(NSInteger) index];

Fija el índex donde se mostrará el DynamicTab si no se define en la plataforma de eMMa.

Dynamic Tab TabBarltem

[EMMA setPromoTabBarItem:(UITabBarItem*) tabBarItem];

Establece la UITabBarItem a mostrar si no se define en la plataforma de eMMa.

Dynamic Tab AutoCreation

[EMMA setPromoTabBarAutoCreation:(BOOL) autoCreation];

Fija el parámetro de autocreación del TabBar cuando se abre la app desde el background. Si es así, creará automáticamente un DynamicTab cuando el usuario provenga del background.

Nuevo e importante

El índex del ítem del TabBar y el ítem propiamente dicho puede ser especificado en la plataforma de EMMA. Como se indicaba anteriormente, la configuración en EMMA prevalecerá siempre sobre la configuración local.

 

Usando EMMA Strip

El EMMA Strip te permite mostrar un banner de texto sobre donde se sitúa habitualmente el Status Bar con un mensaje para sus usuarios. Este puede ser desplegado en cualquier pantalla de la app.

EMMA_26.png

Check Strip

[EMMA inAppMessage: Strip andRequest: nil];

Emplear checkForStrip para confirmar que los Strips configurados en EMMA se despliegan a continuación en la aplicación.

Strip with AutoCreation

[EMMA setStripAutoCreation:(BOOL) autoCreation];

Si desea revisar el Strip automáticamente en cada puesta en marcha o tras una apertura desde background necesita pasar un TRUE Boolean. Por defecto esto no se realizará, por lo que debe decidir dónde y cuándo se mostrará el Strip.

Strip with label

EMMAInAppRequest* request = [EMMAInAppRequest new];
request.label = @"label";
[EMMA inAppMessage: Strip andRequest: request];

Si lo desea puede pasar un custom NSString que etiquete los Strips en caso de que utilice más de uno y necesite distinguirlos. No obstante, tenga en cuenta que no podrá utilizar el parámetro de autocreación usando estas labels porque los Strips etiquetados se encuentran adscritos a una pantalla específica de la app, no al inicio de esta.

Extra

Es posible utilizar una mezcla entre los anteriores métodos para así pasar más parámetros. Revise para ello el apéndice con todas las opciones de los EMMA Header.

 

Usando EMMA Coupons

EMMA Coupons te permite obtener, verificar, canjear cupones que se hayan definido y configurado en la plataforma de EMMA.

EMMA_27.png

Obtener Coupons

[EMMA addCouponDelegate:(id<EMMACouponDelegate>) delegate]
[EMMA inAppMessage: Coupons andRequest: nil];

Con esta llamada, obtendremos toda la información de los coupons disponibles para el usuario, según las condiciones que se hayan configurado en la plataforma de EMMA.

En el block response, obtendremos un diccionario con la información relativa a cada coupon disponible para el usuario. Para cada coupon se dispone de la siguiente información: id (identificador interno de EMMA), código, número máximo de canjeos, número de veces canjeado, título, descripción, imagen …

[EMMA sendImpression: EMMACampaignType.kCampaignCoupon withId: id];
[EMMA sendClick:EMMACampaignType.kCampaignCoupon withId: id];
 

Detalles de un Coupon

EMMAInAppRequest* request = [EMMAInAppRequest new];
request.inAppMessageId = @"couponId";
[EMMA inAppMessage: Coupons andRequest: request];

Con esta llamada, obtendremos la información relativa a un coupon concreto.

El parámetro couponId debe ser el identificador interno de EMMA de un coupon, identificador que se puede obtener de una llamada a Coupons hecha con anterioridad.

En el block response, obtendremos un diccionario con la información relativa al coupon consultado: id (identificador interno de EMMA), código, número máximo de canjeos, número de veces canjeado, título, descripción, imagen …

Revisar la validez de un Coupon

EMMAInAppRequest* request = [EMMAInAppRequest new];
request.inAppMessageId = @"couponId";
[EMMA inAppMessage: CouponValidRedeems andRequest: request];

Con esta llamada podemos comprobar si el usuario puede canjear el coupon indicado.

El parámetro couponId debe ser el identificador interno de EMMA de un coupon, identificador que se puede obtener de una llamada a checkForCoupons hecha con anterioridad.

En el block response, nos indicará el número de veces que el usuario todavía puede canjear el coupon.

Canjear un coupon

EMMAInAppRequest* request = [EMMAInAppRequest new];
request.inAppMessageId = @"couponId";
[EMMA inAppMessage: RedeemCoupon andRequest: request];

Con esta llamada, el usuario canjea el coupon indicado.

El parámetro couponId debe ser el identificador interno de EMMA de un coupon, identificador que se puede obtener de una llamada a Coupons hecha con anterioridad. 

Para enviar la impresión y el click en el cupón hay que añadir los siguientes métodos en la app, donde se realizan ambas acciones:

Cancelar un coupon

EMMAInAppRequest* request = [EMMAInAppRequest new];
request.inAppMessageId = @"couponId";
[EMMA inAppMessage: CancelCoupon andRequest: request];

Con esta llamada se puede cancelar el canjeo de un coupon realizado con anterioridad.

El parámetro couponId debe ser el identificador interno de EMMA de un coupon identificador que se puede obtener de una llamada a checkForCoupons hecha con anterioridad.

Opcionalmente se puede indicar un parámetro count si se quiere cancelar más de un canjeo realizado con anterioridad, si no se indica, se cancelará una vez el coupon.

 

Usando EMMA NativeAd

EMMA NativeAd te permite obtener la información de un NativeAd correspondiente a una plantilla que se haya definido y configurado en la plataforma de EMMA.

Formatos-integracion-iOS.png

Obtener NativeAd 

[EMMA addInAppDelegate:(id<EMMAInAppMessageDelegate>) delegate]
EMMAInAppRequest* request = [EMMAInAppRequest new];
request.nativeAdTemplateId = @"templateId";
[EMMA inAppMessage: NativeAd andRequest: request];

Con esta llamada, obtendremos toda la información del NativeAd disponible para el usuario referente al templateId, según las condiciones que se hayan configurado en la plataforma de EMMA.

Se llama a onReceived:EMMANativeAd* nativeAd en el caso de que exista un NativeAd correspondiente a la plantilla con identificador “templateId”.

EMMANativeAd contiene todos los campos configurados en EMMA para esta plantilla de NativeAd, para obtenerlos se usará el siguiente método: 

NSString* title = [nativeAd getField:@"Title"];

Una vez obtenidos todos los campos requeridos, ya se puede crear la vista para pintar este NativeAd en pantalla en función del diseño que se le quiera aplicar. Una vez pintado el NativeAd en pantalla es necesario llamar a este método:

[EMMA sendImpression: NativeAd withId: @"templateId"];

Abrir un NativeAd

[EMMA openNativeAd: @"templateId"];

Con esta llamada, se mostrará el contenido del link configurado en el NativeAd desde la plataforma de EMMA.

 

EMMA Whitelist

Versión mínima del SDK: 3.1.7 o superior

Con esta funcionalidad podemos limitar las urls que abrirá el SDK de EMMA , de modo que en las comunicaciones In-App, sólo se mostrarán en un Webview aquel contenido que empiece por alguna de las urls que hayamos indicado en la whitelist.

Si no indicamos ninguna url en la whitelist, cualquier url está permitida.

Esta funcionalidad afectaría a los Push (Rich URL), Banners, StartViews, AdBalls y DynamicTabs.

Las comunicaciones (Banners, StartViews, AdBalls y DynamicTabs)  pueden cargar contenido externo a la app mediante un Webview y para los Banners, AdBalls y DynamicTabs podrían cargar imágenes externas que también serían controladas por la whitelist.

Para un Push con Rich URL, si ésta no cumple, no se abriría la Webview correspondiente, pero el push sí que llega a la aplicación, hay que tener en cuenta que si en vez de una url se emplea un deeplink, el scheme del deeplink debe ser añadido a la whitelist para poder abrirlo.

Cómo se usa

Debemos llamar a este método después del starteMMaSession y antes de llamar a cualquier método relativo a las comunicaciones In-App.

[EMMA setWhitelist:(NSArray*)urls];

Ejemplos

Si mi whitelist es “http://mydomain.com”.

[EMMA setWhitelist:@[@"http://mydomain.com"]; 

Ejemplo 1:

Subimos al dashboard de EMMA un Banner con Target URL https://mydomain.com

El Banner no se mostrará, deberíamos añadir a la whitelist https://mydomain.com

Ejemplo 2:

Configuramos en el dashboard de EMMA una StartView con StartView URL http://www.mydomain.com

La StartView no se mostrará, deberíamos añadir a la whitelist http://www.mydomain.com

Ejemplo 3:

Configuramos en el dashboard de EMMA un Banner con Target URL http://mydomain.com/my/url y SmartPhone Banner URL http://subdomain.mydomain.com/my/image

El Banner no se mostrará, la url de la imagen no cumple con la whitelist, deberíamos añadir a la whitelist http://subdomain.mydomain.com

Ejemplo 4:

Subimos al dashboard de EMMA un Banner con Target URL http://mydomain.com/my/url/

El Banner se mostrará porque la url introducida en el campo Target URL empieza por el mismo protocolo y dominio que la url de la whitelist

Ejemplo 5:

Configuramos en el dashboard de EMMA una StartView con StartView URL http://mydomain.com/mypage.html&param=value

La StartView se mostrará porque la url intoducida en el campo StartView URL empieza por el mismo protocolo y dominio que la url de la whitelist

 

Añadir alerta de valoración de la App

EMMA te hace más sencillo añadir una alerta para conseguir mayores valoraciones positivas en tu app. 

Crear una Alerta de Valoración

[EMMA addRateAlertForAppStoreURL:APP_STORE_URL]

Puedes establecer las siguientes opciones siguiendo estos métodos:

[EMMA setRateAlertFreq:TIME_FREQUENCE]

: Int especificando las horas entre alerta. Por defecto, 72 horas.

[EMMA setRateAlertTitle:TITLE]

: NSString que especifica el título para la alerta. Por defecto "Rate this App"

[EMMA setRateAlertMessage:MESSAGE]

: NSString que especifica el mensaje de la alerta. Por defecto “If you like our app, please rate it on App Store!”

[EMMA setRateAlertCancelButton:CANCEL]

: NSString que especifica el título del botón de cancelación. Si se pulsa la alerta no volverá a mostrarse. Por defecto “No, thanks”

[EMMA setRateAlertLaterButton:LATER]

: NSString que especifica el título del botón "Más tarde". Cada vez que se pulsa la alerta se retrasará multiplicando el tiempo de frecuencia por el número de veces de visualización de la misma. Por defecto: “Later”

[EMMA setRateAlertRateItButton:RATE_IT]

: NSString que especifica el título del botón de valoración. Si se pulsa la alerta no será mostrada nunca más. By default: “Rate it now!”

[EMMA setRateAlertShowAfterUpdate:APP_UPDATE]

: Bool que permite que la alerta se muestre de nuevo en el caso de la app se actualice y el usuario ya la hubiese puntuado (varias valoraciones por un mismo usuario)

Puedes usar métodos abreviados si no necesitas todos los parámetros. Puedes encontrar estos métodos en el EMMA.h.

 

Depurando el código

Este paso es opcional. Si necesitas ver el log de EMMA, puedes habilitarlo (antes del starteMMaSession) haciendo una llamada a:

[EMMA setDebuggerOutput:TRUE]

 

Subir tu App a AppStore

En 2014 Apple cambió su políticas de medición. La nueva política afecta directamente a la recogida del identificador para anunciantes (IDFA). Apple ha establecido que la recogida del IDFA está permitido en los siguientes supuestos: límite de frecuencia, eventos de conversión, estimar el número de usuarios únicos, seguridad y fraude y depuración del código.

EMMA  recoge este identificador para conocer los eventos de conversión y para la estimación de los usuarios únicos así que, en este caso, la obtención del IDFA está alineada con la política de Apple.

Para seguir todas las reglas de Apple es necesario que selecciones las siguientes opciones en iTunes Connect cuando estés subiendo tu app:

EMMA_28.png

Teniendo seleccionadas estas casillas, EMMA podrá trabajar a pleno rendimiento y podrás usar la funcionalidad POWLINK sin romper ninguna política de Apple.

Si quieres inhabilitar el tracking del IDFA debes marcar las mismas casillas y llamar al siguiente método:

IMPORTANTE
El tracking del IDFA está siempre habilitado por defecto en EMMA . Si no quieres recoger el IDFA usa el siguiente método para inhabilitarlo:

[EMMA setUseIDFA:BOOL];

De todas formas tienes que marcar las casillas específicas del IDFA en iTunes Connect.

BOOL le dice a EMMA  cuando usar el tracking IDFA. Si es NO, el VendorID será usado. Puede estar habilitado/inhabilitado para futuras actualizaciones de la app.

 

¿Tiene más preguntas? Enviar una solicitud

0 Comentarios

El artículo está cerrado para comentarios.