Notificaciones Push para IOS (parte 1)

Mar 30, 2014 | iOS | 0 Comentarios

Una semana más proponemos una solución a algunos de los problemas que nos hemos ido encontrando a lo largo del desarrollo de los diferentes proyectos que hemos llevado a cabo.

En los siguientes post’s vamos a hablar de las notificaciones push para iPhone y iPad, ya que son muy útiles y no parece una tarea muy sencilla de realizar. Sin embargo, una vez se comprende el procedecimiento que nos exige Apple, serán muy fáciles de implementar.

Para poder realizarlas es necesario registrar el token o identificador asociado a nuestro móvil en un servidor, para ello vamos a dar dos opciones:

  • Petición al servidor mediante GET
  • Petición al servidor mediante POST

En este post, las vamos a describir detalladamente, evidentemente tienen muchisimas más utilidades. En definitiva se utilizan para solicitar datos a un servidor o enviarle datos.

Para facilitar su entendimiento vamos a crear 2 proyectos independientes.

Para empezar creamos un nuevo proyecto en xCode como «Empty Application» y lo llamaré «PeticionesGET»

Añadimos un StoryBoard al proyecto con el «UIViewController» principal desde el cual se realizarán las peticiones.

Creamos el controlador que realizará las peticiones y se lo asignamos al «UIViewController» del Storyboard

Notificaciones Push para IOS (parte 1)

Las peticiones al servidor se realizan de forma asincrona, por que nuestra aplicación podrá seguir ejecutandose sin problema. Cuando todos los datos se hayan recibido completamente, se ejecutará un método que indicará el fin de la recepción de los datos.

Para poder realizar las peticiones y recibir los datos del servidor hemos de indicar que el controlador es el delegado que los procesará. Para ello, utilizamos «NSURLConnectionDelegate» y «NSURLConnectionDataDelegate»

@interface PeticionesGETViewController : UIViewController<NSURLConnectionDelegate, NSURLConnectionDataDelegate>

@end

Para poder recibir los datos hemos de implementar los métodos de «NSURLConnectionDelegate»

 

#pragma methods NSURLConecciont delegate

-(void) connection:(NSURLConnection *) connection didReceiveData: (NSData *) datos

Va recibiendo los datos y los almacena en una variable

-(void) connectionDidFinishLoading:(NSURLConnection *)connection

Fin de la recepción de datos

-(void) connection:(NSURLConnection *) connection didFailWithError: (NSError *)error

En caso de producirse un error se ejecutaría este método

 

También necesitaremos las siguientes variables:

 

NSURLRequest *request => Objeto request

NSURLConnection *connectionInProgress => Objeto para la conexion

NSMutableData *data => Objeto para almacenar lo datos

 

A continuación, se realiza la petición:

A la url se le podrían pasar los parámetros que se quisiese por get, por ejemplo:

www.miurl.com/?token=9089786tyfgjhbknjliuoy675&usuario=1

// Se construye la url a la cual se va a realizar la conexión

NSURL *url = [NSURL URLWithString:@»https://www.appandweb.es»];

// Se crea el objeto request indicado el tiempo de espera (segundos). En caso de superarlo, daría error

request = [NSURLRequest requestWithURL: url cachePolicy: NSURLRequestReloadIgnoringCacheDatatimeoutInterval: 30];

// Se comprueba si hay una conexión anterior y se cancela en caso de haberla. Para evitar duplicidad de peticiones

if (connectionInProgress) {

[connectionInProgress cancel];

}

// Se crea la instanca que guardará los datos

data = [[NSMutableData alloc] init];

// Se crea e inicia la conexión

connectionInProgress = [[NSURLConnection alloc] initWithRequest: requestdelegate: self

startImmediately:YES];

Conforme se van recibiendo los datos se ejecuta el primer método que los va insertando en la variable data

-(void) connection:(NSURLConnection *) connection didReceiveData:

(NSData *) datos{

[data appendData:datos];

}

Una vez que se hayan recibido todos los datos se ejecutara la siguiente función:

-(void) connectionDidFinishLoading:(NSURLConnection *) connection{

// La conexión ha finalizado. Ya se pueden realizar las acciones deseadas

NSString *xmlCheck = [[NSString alloc] initWithData: data encoding: NSISOLatin1StringEncoding];

if (xmlCheck != NULL && ![xmlCheck  isEqual: @»»]) {

// Mostraría el código de la pagina

NSLog(@»%@», xmlCheck);

}

}

En caso de producirse un error, se ejecuta el método de error:

-(void) connection:(NSURLConnection *) connection didFailWithError:

(NSError *) error{

connectionInProgress = nil;

data = nil;

NSString *errorString = [NSStringstringWithFormat:@»Conexión fallida: %@»,

[error localizedDescription]];

NSLog(@»%@», errorString);

}

Notificaciones Push para IOS (parte 1)

Para realizar la petición post vamos a crear otro proyecto que se llame «peticionesPOST» que contendrá los mismos métodos y variables que el anterior.

Cambiará la forma en que se crea la petición al servidor. Para empezar se crea un diccionario de pares valor-clave que contendrá los datos que se quieren enviar al servidor.

 

NSDictionary *params = [[NSDictionaryalloc] initWithObjectsAndKeys:

@»valor», @»clave»,

@»valor», @»clave»,

@»valor», @»clave»,nil];

NSURL *url = [NSURL URLWithString:@»url-peticion»];

NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];

[self connectionPOST:urlRequest withParams:params];

 

Se crea que genera la petición:

 

– (BOOL)connectionPOST: (NSURLRequest *)aRequest withParams:

(NSDictionary *)aDictionary {

// Se comprueba si el diccionario esta vacío

if ([aDictionary count] > 0) {

// Se crea la petición y se indica que es de tipo POST

requestPOST = [[NSMutableURLRequest alloc] initWithURL:[aRequest URL]];

[requestPOST setHTTPMethod:@»POST»];

// Necesitamos un string para añadir las claves y los valores

NSMutableString *postString = [[NSMutableString alloc] init];

// Se extraen las claves

NSArray *allKeys = [aDictionary allKeys];

for (int i = 0; i < [allKeys count]; i++) {

NSString *key = [allKeys objectAtIndex: i];

NSString *value = [aDictionary objectForKey: key];

// Se añade al String los pares de clave valor

[postString appendFormat:( (i == 0) ? @»%@=%@» : @»&%@=%@» ),

key, value];

}

// Se añade los datos a la petición

[requestPOST setHTTPBody: [postString dataUsingEncoding: NSUTF8StringEncoding]];

data = [[NSMutableData alloc] init];

if (connectionInProgress) {

[connectionInProgress cancel];

}

connectionInProgress = [[NSURLConnection alloc] initWithRequest: requestPOST

delegate: self startImmediately:YES];

postString = nil;

request = nil;

return YES;

} else {

return NO;

}

}

Además hemos de implementar las mismas funciones delegadas de «NSURLConnectionDelegate»:

#pragma methods NSURLConecciont delegate

-(void) connection:(NSURLConnection *) connection didReceiveData:(NSData *) datos

Va recibiendo los datos y los almacena en una variable

-(void) connectionDidFinishLoading:(NSURLConnection *)connection

Fin de la recepción de datos

-(void) connection:(NSURLConnection *) connection didFailWithError: (NSError *)error

En caso de producirse un error se ejecutaría este método

 

Con esto ya tendriamos la petición POST realizada.

 

 

Puedes encontrar los códigos en los siguientes enlaces petición GET y petición POST

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

.Estás en el punto de partida?

Contacta con nosotros y cuéntanos tu proyecto.

Mapa de ubicación dentro de la sección método App&Web
Estamos en:

C/ Gracia, 12 1ª Planta Granada (18004) Granada

623 02 64 34

 contacto@appandweb.es

Follows
Shares
Share This
¿Necesitas ayuda?