Integración del cliente iOS

Integración del cliente iOS 

Una vez configurado nuestro proyecto en la consola iOS, es necesario llevar a cabo la integración con el cliente. Para ello, describiremos los siguiente puntos de este documento:

  • Instalación
  • Uso

También puedes disponer de una documentación completa en formato JavaDoc en la web http://octopus.s-dos.es/OctopushIOSClient_1.0.0/
 

Configuración del proyecto 

Para la instalación de Octopush es necesario añadir la carpeta de Octopush a tu proyecto,  ésta contiene el framework, el archivo de configuración y la clase OctopushConfiguration. Para ello, asegúrate de que está marcado el check Add to target.

octopush_ios_1

 

Añade el framework de Octopush en el apartado Embedded Binaries para que aparezca de la siguiente forma:

octopush_ios_2

Asegúrate de que los archivos Octopush.framework y OctopushShared.framework se han añadido al apartado Linked Framework and Libraries. Si no, añádelos para que aparezcan de la siguiente forma:

 

octopush_ios_3

 

Tras añadir el framework deberemos configurar nuestro proyecto para que reciba notificaciones Push. Iremos a nuestro proyecto en el apartado Capabilities y activaremos la casilla de Push Notifications para que aparezca de la siguiente forma:

 

octopush_ios_4

Tras activar la casilla de Push Notification debemos activar también la casilla Backgound Modes y seleccionar dentro Remote notificaciones para que aparezca de la siguiente forma:

octopusho_ios_5

Por último, añade las claves facilitadas por la Web al archivo de configuración Octopush.plist e indica el modo de ejecución de la aplicación para usar la clave correcta.

octopush_ios_6

Una vez aquí, los valores dependen del entorno de desarrollo que estemos utilizando. Hay dos posibles valores:

 –  ENVIRONMENT_SERVER : servidor donde está alojada la aplicación.

 –  ENVIRONMENT_APP_KEY : clave de la aplicación .

 

Implementación 

Octopush se basa en el registro del dispositivo en los servidores de Octopush. Dicho registro puede carecer de usuario (usuario anónimo) o tener un usuario específico (normalmente está ligado a un login de la aplicación).

Cada vez que necesitemos ejecutar cualquier método de Octopush deberemos crear una clase de configuración que implemente el delegado “OctopushNotificationDelegate“. Para ello, es necesario conocer todos los pasos y configuraciones necesarias para su uso.

Configuración 

 

Para la realizar la configuración de Octopush tendremos una clase de tipo singleton que contendrá los métodos necesarios para configurarlo. Junto a los frameworks y el archivo Octopush.plist se incluye una clase de ejemplo, OctopushConfiguration, con todos los métodos necesarios implementados que puede usar directamente a su elección.

En AppDelegate importaremos la clase de configuración de Octopush (en nuestro caso

OctopushConfiguration“), llamando a un método en application:didFinishLaunchingWithOptions: que cargará la configuración de Octopush.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    [OctopushConfiguration loadConfiguration];
    
    return YES;
}

 

Para usar Octopush es necesaria una configuración previa. La configuración por defecto se compone de:

  • Limpieza del centro de notificaciones cada vez que selecciona alguna notificación.
  • Registro de la localización del usuario.
  • Registro del dispositivo al cargar la aplicación.
+ (void)loadConfiguration {
    [Octopush shared].delegate = [self sharedInstance];
}

Usuario anónimo.

Registrar

La configuración básica registra el dispositivo automáticamente cada vez que entra en la aplicación. Aún así puedes forzar a actualizar el registro del dispositivo en cualquier momento. Para ello basta con una llamada al método:

-	[Octopush registerDevice];

La llamada a este método actualizará el dispositivo con la configuración actual de Octopush.

Desregistrar

Si no quieres volver a recibir notificaciones, basta con desregistrar el dispositivo de Octopush, realizando la llamada al método:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    //Indicamos a Octopush que guarde la localización del usuario con la configuración indicada anteriormente
    [Octopush registerLocation];
}

En el caso de querer localizar los dispositivos en Octopush, se debe implementar el este método.

 

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    
    OctopushNotification *octopushNotification = [Octopush getNotificacion:userInfo];
    [self tratamientoOctopushNotification:octopushNotification fetchCompletionHandler:completionHandler];
}

Una vez el dispositivo este registrado, las notificaciones se recibirán en este método. Para implementar el tratamiento de las notificaciones se debe customizar la implementación del método.

Registrar 

La configuración básica registra el dispositivo automáticamente cada vez que entra en la aplicación. Aún así puedes forzar a actualizar el registro del dispositivo en cualquier momento. Para ello basta con una llamada al método:

[Octopush updateRegistrationDeviceWithSuccessBlock:nil failure:nil];

La llamada a este método actualizará el dispositivo con la configuración actual de Octopush.

Desregistrar 

Si no quieres volver a recibir notificaciones, basta con desregistrar el dispositivo de Octopush, realizando la llamada al método:

-	[Octopush unregisterDevice];
Localización 

La librería de Octopush cuenta con una funcionalidad de monitorización de la posición del dispositivo a la hora de recibir notificaciones. Si en algún momento quieres forzar a registrar la localización del usuario en Octopush, puedes hacerlo llamando al método:

-	[Octopush forceRegisterLocation];

Es importante darle permisos a la App para poder permitir obtener la localización, para ello deberemos añadir un campo en el info.plist de la App y mostrar un mensaje para que el usuario acepte o no el permiso de la localización. Añadiremos el campo Privacy – Location When In Use Usage Description y la descripción del mensaje para que aparezca de la siguiente forma:

octopush_ios_7

  • registerLocation: Indica si registraremos la localización del usuario.
[Octopush shared].registerLocation = YES;

 

Badge 

Es el número que aparece junto a la aplicación y, por regla general, indica el número de notificaciones pendientes de la misma. Para modificarlo es necesario llamar al método:

[Octopush setBadgeNumber:3];

Los métodos delegados de Octopush se implementarán en nuestra clase OctopushConfiguration, que serán los siguientes:

Registro
  • Método por el que entrará cuando falle el registro del dispositivo, podremos detectar cual ha sido error con el  tipo NSError.
-	- (void)octopush:(Octopush *)octopush didFailToRegisterWithError:(NSError *)error {

-	}
  • Método por el que accederá cuando el dispositivo se registre correctamente.
-	- (void)octopush:(Octopush *)octopush didRegisterWithDeviceIdentifier:(NSString *)deviceIdentifier deviceToken:(NSString *)deviceToken {

-	}
Registro de acciones 
  • Método donde se registrarán las acciones
-	- (OctopushAction *)octopush:(Octopush *)octopush willRegisterAction:(NSString *)action {

-	}
Desregistro
  • Método por el que entrará cuando se desregistre el dispositivo correctamente.
-	(void)didUnregisterFromOctopush:(Octopush *)octopush {

- }
  • Método por el que entrará cuando falle el desregistro el dispositivo, podremos detectar cual ha sido error con el  tipo NSError.
  • -	- (void)octopush:(Octopush *)octopush didFailToUnregisterWithError:(NSError *)error {
    
    -	}

A continuación presentamos un ejemplo de cómo registrar una acción. En este caso capturaremos una acción y mostraremos una alerta cuando se pulse la notificación :

  • OctopushAction *)octopush:(Octopush *)octopush willRegisterAction:(NSString *)action {
    -	
    -	    // Inicializamos un OctopushAction con la acción devuelta por el método
    -	    OctopushAction *octopushAction = [OctopushAction initializeWithIdentifier:action];
    -	    
    -	    // Localizamos la acción que deseamos darle un comportamiento
    -	
    -	    if([action isEqualToString:@“boton1"]){
    -	        // Indicaremos qué opciones queremos para la acción, en este caso le indicaremos que necesite desbloqueo y la acción sea en primer plano
    -	        octopushAction.actionOptions =  OctopushActionOptionsAuthenticationRequired | OctopushActionOptionsForeground;
    -	        [octopushAction setActionExecute:^(OctopushAction *octopushAction, OctopushActionCompletion completionAction) {
    -	            
    -	            // En este ejemplo, la acción “boton1" consistirá en mostrar una alerta   
    -	
    -	            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:action message:@"Mensaje" preferredStyle:UIAlertControllerStyleAlert];
    -	            UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cerrar" style:UIAlertActionStyleCancel handler:nil];
    -	            [alertController addAction:cancelAction];
    -	            
    -	            // Pasaremos la alerta en el bloque
    -	            completionAction(alertController, nil);
    -	        }];

 

Mostrar notificación
  • Método donde indicaremos cómo mostrar la notificación, en este ejemplo mostraremos una notificación de tipo nativa.

 

-	- (void)octopush:(Octopush *)octopush didPresentNotification:(OctopushNotification *)octopushNotification withCompletionHandler:(void (^)(OctopushNotificationPresentOptions))completionHandler {
-	    completionHandler(OctopushNotificationPresentNative);

-	}

Podremos indicar de qué tipo será la presentación de la notificación seleccionando un valor del tipo OctopushNotificationPresentOptions.

  • OctopushNotificationPresentNative : Mostrará la notificación de forma nativa (solo en iOS 10 o posteriores se podrá mostrar en primer plano).
  • OctopushNotificationPresentAlert : Mostrará la notificación en forma de alerta.
  • OctopushNotificationPresentCustom : Mostrará la notificación de manera personalizada.
  • OctopushNotificationPresentSound : Mostrará la notificación con sonido.
  • OctopushNotificationPresentBadge : Mostrará el número de distintivos.
Presentación de las notificaciones silenciosas
  • Método donde trataremos una notificación silenciosa.
-	- (void)octopush:(Octopush *)octopush didReceiveSilentNotification:(OctopushNotification *)octopushNotification withCompletionHandler:(void (^)(OctopushSilentResultType))completionHandler{
-	completionHandler(OctopushSilentResultNewData);
-	}

Podremos controlar el comportamiento de la notificación silenciosa con las opciones del tipo OctopushSilentResultType:

  • OctopushSilentResultNewData : Tipo de notificación silenciosa con datos.
  • OctopushSilentResultNoData : Tipo de notificación silenciosa sin
  • OctopushSilentResultFailed : Tipo de notificación silenciosa fallida.
Tratamiento de acciones
  • Método donde se manejan las acciones de la notificación.
-	- (void)octopush:(Octopush *)octopush handleActionFromNotification:(OctopushNotification *)octopushNotification withCompletionHandler:(void (^)())completionHandler {
-	
-	}

Este método se ejecutará al pulsar una acción de la notificación, tanto al pulsar en la notificación como en los botones de la misma. Se deben manejar las acciones dentro del método.

Un ejemplo de cómo implementar el comportamiento de una acción de la notificación:

- (void)octopush:(Octopush *)octopush handleActionFromNotification:(OctopushNotification *)octopushNotification withCompletionHandler:(void (^)())completionHandler {

    // Comprobamos si Octopush puede manejar la notificación 
    if ([Octopush canHandleNotification:octopushNotification]) {
        // Si es así, ejecutaremos la acción con su comportamiento previamente definido en el método -willRegisterAction:
        [Octopush handleNotification:octopushNotification actionCompletion:^(id object, NSError *error) {
            UIViewController *controller = [UIApplication sharedApplication].keyWindow.rootViewController;
            while (controller.presentedViewController) {
                controller = controller.presentedViewController;
            }
            // Presentamos la alerta
            [controller presentViewController:(UIAlertController*)object animated:YES completion:nil];
        }];
        completionHandler();
    } else {
        // Si la acción no la pudiera tratar Octopush, mostraríamos un mensaje por consola.
        NSLog(@"Acción no tratada”);
        completionHandler();
    }

 

Comprobación de acciones

Podremos comprobar si Octopush puede manejar una acción llamando al método canHandleNotification: pasándole una notificación de tipo OctopushNotification. Este método nos devolverá un boolean confirmando si se puede tratar la acción.

- [Octopush canHandleNotification:octopushNotification];
Ejecución de acciones

El método +handleNotification:actionCompletion: se encargará de ejecutar el bloque de la acción. Podremos comprobar el error con el objeto NSError si lo hubiese y recibiremos por parámetro un objeto de tipo id para poder tratarlo dentro del bloque si fuese necesario. Este método se podrá usar al presentar una notificación normal o una silenciosa.

[Octopush handleNotification:octopushNotification actionCompletion:^(id object, NSError *error) {

    }];
Persoanlización

Octopush permite la personalización de algunos de sus parámetros que serán actualizados en el próximo registro. Dichos parámetros son los siguientes:

  • User: Usuario que se registrará en Octopush junto al identificador de las notificaciones. Con ello, Octopush puede enviar notificaciones a un usuario determinado en los dispositivos que tenga registrado.

 

[Octopush shared].user = @"SDOS";
  • timeRegisterLocation: Indica el tiempo de espera entre actualizaciones de la localización del usuario.
[Octopush shared].timeRegisterLocation = VARIABLE_TIEMPO * 2;
  • clearNotificationCenterToRead: Indica si queremos limpiar las notificaciones cuando pulsemos una notificación desde el centro de notificaciones.
[Octopush shared].clearNotificationCenterToRead = YES;

 

Extensión

Octopush puede tratar notificaciones multimedia en iOS 10 o posterior. Para ello tendremos que crearnos un nuevo Target en nuestra app. Para crearlo debemos ir en Xcode a “File/New/Target…” y seleccionar “Notification Service Extension”  como muestra la imagen.

octopush_ios_8

 

Es importante que al crear la extensión, el identificador del paquete debe ser el mismo que el de la App pero concatenando al final “.extension” ya que si no es así ,la extension no se implementará correctamente.

Añadiremos el archivo “OctopushServiceExtension.framework” en el apartado Linked Framework and Libraries del target de la nueva extensión para que aparezca de la siguiente forma:

octopush_ios_10

En nuestra clase de la extension deberemos importar <OctopushServiceExtension/OctopushServiceExtension.h>” y hacer que la clase creada sea una subclase de OctopushNotificationService en vez de UNNotificationServiceExtension. Una vez hecho esto, únicamente añadiremos una implementación de los dos métodos que aparecen (didReceiveNotificationRequest:withContentHandler: y serviceExtensionTimeWillExpire)  llamando al método de la superclase. La implementación de la clase de la extensión debe quedar de la siguiente manera:

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {

    [super didReceiveNotificationRequest:request withContentHandler:contentHandler];
}

- (void)serviceExtensionTimeWillExpire {

    [super serviceExtensionTimeWillExpire];
}

De esta forma ya tendremos nuestra extensión que trata la notificación multimedia implementada en nuestro proyecto. Recordamos que la extension es solo compatible con iOS 10 y posteriores.

Tipos de multimedia soportado

La extensión de Octopush soporta varios tipos de multimedia

  • Imagen (JPG, GIF, PNG).
  • Video (MP4).

Los tamaños máximos de multimedia no deben sobrepasar los 5 MB en imagen y 50 MB de vídeo. Se recomienda no sobrepasar estos límites para un correcto funcionamiento.

Cuando enviemos un archivo multimedia deberá cumplir el protocolo “https:// “ obligatoriamente, en caso contrario el contenido multimedia no se mostrará.

 

 

 

 

Integración del cliente iOS