logo indigitall
/SDK /Push app /iOS
EN

 | ES

SDK de iOS

Guía avanzada para configurar el SDK de iOS


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.


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>


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

Opciones que debes tener en cuenta


Hay dos modos de gestionar los permisos de localización:


A continuación te explicamos cómo configurar los permisos de localización en modo automático.


Hay que añadir el parámetro locationPermissionMode cuando se inicialice el SDK. Esto se hace mediante el siguiente extracto de código:


let config = INConfig(appKey: "<YOUR-APP-KEY>")
config.locationPermissionMode = .automatic
Indigitall.initialize(config: config);
INConfig *config;
config.appKey = @"<YOUR-APP-KEY>";
config.locationPermissionMode = PermissionModeAutomatic;
[IndigitallObjc initializeWithConfig:config success:nil failed:nil];


1.2. 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(code: "YOUR_EXTERNAL_ID") { (response) in
    switch response {
        case .success(let device):
            //DO SOMETHING
        case .failed(let error):
            //LOG ERROR
    }
}
//Recuerda poner aquí tu código externo
[IndigitallObjc setExternalCodeWithCode:@"YOUR_EXTERNAL_ID" 
    success:^(INDevice *device) {
        //DO SOMETHING
    } failed:^(INError* error){
        //LOG ERROR
    }];


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


Para suscribirte a estos callbacks tienes que:


Indigitall.initialize(appKey: "<YOUR_APP_KEY>", 
    onIndigitallInitialized: { (permission, device) in
        //DO SOMETHING
    }, onNewUserRegistered: { (device) in
        //DO SOMETHING
    }, onErrorInitialized: { (error) in
        //LOG ERROR
    }
[IndigitallObjc initializeWithAppKey:@"<YOUR_APP_KEY>" 
    onIndigitallInitialized:^(NSArray<NSString *> * permissions, INDevice * device) {
        //DO SOMETHING
    }, onNewUserRegistered:^(INDevice * device) {
        //DO SOMETHING
    }, onErrorInitialized:^(INError * error) {
        //LOG ERROR
    }];


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 elemento que imprime logs sobre el estado de los permisos y la información del dispositivo.


Indigitall.initialize(appKey: "<YOUR_APP_KEY>", 
    onIndigitallInitialized: { (permission, device) in
        print("onIndigitallInitialized push permission: \(permission[0])")
        print("onIndigitallInitialized location permission: \(permission[1])")
        print("onIndigitallInitialized DEVICE: \(device.deviceID ?? "X")")
    }, onNewUserRegistered: { (device) in
        //DO SOMETHING
    }, onErrorInitialized: { (error) in
        //LOG ERROR
    }
[IndigitallObjc initializeWithAppKey:@"<YOUR_APP_KEY>" 
    onIndigitallInitialized:^(NSArray<NSString *> * permissions, INDevice * device) {
        NSLog(@"onIndigitallInitialized Device: %@",device.deviceID);
        NSLog(@"onIndigitallInitialized Permission push: %@", permissions[0]);
        NSLog(@"onIndigitallInitialized Permission location: %@",permissions[1]);
    }, onNewUserRegistered:^(INDevice * device) {
        //DO SOMETHING
    }, onErrorInitialized:^(INError * error) {
       //LOG ERROR
    }];


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.


Indigitall.initialize(appKey: "<YOUR_APP_KEY>", 
    onIndigitallInitialized: { (permission, device) in
        //DO SOMETHING
    }, onNewUserRegistered: { (device) in
        print("onNewUserRegistered DEVICE: \(device.deviceID ?? "X")")
    }, onErrorInitialized: { (error) in
        //LOG ERROR
    }
[IndigitallObjc initializeWithAppKey:@"<YOUR_APP_KEY>" 
    onIndigitallInitialized:^(NSArray<NSString *> * permissions, INDevice * device) {
        //DO SOMETHING
    }, onNewUserRegistered:^(INDevice * device) {

        NSLog(@"onIndigitallInitialized Device: %@",device.deviceID);
    }, onErrorInitialized:^(INError * error) {
       //LOG ERROR
    }];


2.3. Se ha producido un error


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


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


Indigitall.initialize(appKey: "<YOUR_APP_KEY>", 
    onIndigitallInitialized: { (permission, device) in
        //DO SOMETHING
    }, onNewUserRegistered: { (device) in
         //DO SOMETHING
    }, onErrorInitialized: { (error) in
        print("ERROR: \(error.message)")
    }
[IndigitallObjc initializeWithAppKey:@"<YOUR_APP_KEY>" 
    onIndigitallInitialized:^(NSArray<NSString *> * permissions, INDevice * device) {
        //DO SOMETHING
    }, onNewUserRegistered:^(INDevice * device) {
        //DO SOMETHING
    }, onErrorInitialized:^(INError * error) {
       NSLog(@"Error: %@", error.message);
    }];


3. Administrar dispositivo


3.1. Consultar información y estado del dispositivo


Puedes usar el método getDevice para obtener la información que ha registrado el SDK en referencia al dispositivo.


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


Indigitall.getDevice { [weak self] (response) in
    switch response {
        case .success(let device):
            print("Device: \(device.deviceID ?? "")\nStatus: \(device.enabled ?? false)")
        case .failed(let error):
            print("Error: \(error.message)")
    }
}
[IndigitallObjc getDeviceWithSuccess:^(INDevice *device){
        NSLog(@"DEVICE: %@ \nStatus: %d", device.deviceID, device.enabled);
    } failed:^(INError* error){
        NSLog(@"ERROR: %@", error.message);
    }];


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 enableDevice y disableDevice.


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


Indigitall.enableDevice { [weak self] (response) in
    switch response {
        case .success(let device):
            print("Device: \(device.deviceID ?? "")\nStatus: \(device.enabled ?? false)")
        case .failed(let error):
            print("Error: \(error.message)")
        }
}

Indigitall.disableDevice { [weak self] (response) in
    switch response {
        case .success(let device):
            print("Device: \(device.deviceID ?? "")\nStatus: \(device.enabled ?? false)")
        case .failed(let error):
            print("Error: \(error.message)")
        }
}
[IndigitallObjc enableDeviceWithSuccess:^(INDevice *device){
        NSLog(@"Device: %@ \nStatus: %d",device.deviceID,device.getEnabled);
    } failed:^(INError* error){
        NSLog(@"ERROR: %@", error.message);
    }];

[IndigitallObjc disableDeviceWithSuccess:^(INDevice *device){
        NSLog(@"Device: %@ \nStatus: %d",device.deviceID,device.getEnabled);
    } failed:^(INError* error){
        NSLog(@"ERROR: %@", error.message);
    }];


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 INTopics, 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 { (response) in
    switch response {
        case .success(let topics):
            print("TOPICS: \(topics)")
            self.topics = topics
        case .failed(let error):
            print("Error: \(error.message)")
    }
}
[IndigitallObjc topicsListWithSuccess:^(NSArray<INTopic*>* topics){
        NSLog(@"TOPICS: %@",topics);
    } failed:^(INError* error){
        NSLog(@"ERROR: %@", error.message);
    }];


4.2. Gestionar suscripción


Para gestionar la suscripción del dispositivo a uno o varios grupos, existen dos métodos: subscribe y unsubscribe.

Opcionalmente ambos reciben un objeto TopicsCallback como tercer parámetro, que devolverá el listado de todos los Topic del proyecto.


Indigitall.subscribe(to: [Topic, Topic], completion: { [weak self] (response) in
    switch response {
        case .success(let topics):
            self?.topics = topics
        case .failed(let error):
            print(error.message)
    }
})

Indigitall.unsubscribe(to: [Topic.code, Topic.code], completion: { [weak self] (response) in
    switch response {
        case .success(let topics):
            self?.topics = topics
        case .failed(let error):
            print(error.message)
    }
})
[IndigitallObjc subscribeTopicsWithTopics:@[Topic[0], Topic[1]] success:^(NSArray<INTopic *> *topics){
        topics=topics.self;
    } failed:^(INError* error){
        NSLog(@"ERROR: %@", error.message);
    }];

[IndigitallObjc subscribeTopicsCodesWithTopics:@[Topic[0].code, Topic[1].code] success:^(NSArray<INTopic *> *topics){
        topics=topics.self;
    } failed:^(INError* error){
        NSLog(@"ERROR: %@", error.message);
    }];


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(eventCustom: "YOUR_CUSTOM_EVENT", completion: { (response) in
    switch response {
        case .success(let success):
            print("Success: \(success)")
        case .failed(let error):
            Utils.showalert(with: error)
    }
})
[IndigitallObjc sendCustomEvent:@"YOUR_EVENT_ID" success:^(NSString *response){
        NSLog(@"Response: %@",response);
    } failed:^(INError* error){
        NSLog(@"ERROR: %@", error.message);
    }];


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.


Crea una vista de UIView en tu 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.

@IBOutlet weak var myBanner: UIView!
@property (weak, nonatomic) IBOutlet UIView *myBanner;


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


Indigitall.showInApp(for: "myBanner_CODE", on: myBanner, didLoad: { (inAppView) in
    inAppView.didTouch = {
        // DO SOMETHING
    }
    inAppView.viewLoaded = {(view, inAppId) in
        // DO SOMETHING
    }
}) { (error) in
    // LOG ERROR
}
[IndigitallObjc showInAppFor:@"myBanner_CODE" on:myBanner didLoad:^(INInAppView *inAppView){
    inAppView.didTouch = ^(){
        // DO SOMETHING    
    };
    inAppView.viewLoaded = ^(UIView* view, NSString* inAppId){  
        // DO SOMETHING
    };
} failed:^(INError* error){
    // LOG ERROR
}];


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.


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.


Indigitall.showPopup(for: "myInApp_code_popup", didAppear: {
    // DO SOMETHING
}, didCancel: {
    // DO SOMETHING
}, didClicked: {
    // DO SOMETHING
}) { (error) in
    // LOG ERROR
}
[IndigitallObjc showPopupFor:@"myInApp_code_popup-Inapp" didAppear:^(){
    // DO SOMETHING 
} didCancel:^(){
    // DO SOMETHING 
} didClicked:^(){
    // DO SOMETHING
} failed:^(INError* error){
    // LOG ERROR
}];


7. Documentación de referencia


Swiftdoc del SDK 3.1 para iOS


8. Changelog

[3.1.0] - 08/2019

Añadido