Saltar al contenido

Usar Parse con Swift – Notificaciones

09/05/2015
Usar-Parse-con-Swift-Notificaciones-0

Te voy a enseñar como usar la plataforma Web Parse con Swift.

Mediante una serie de artículos, aprenderemos a usar este increíble backend.

Aprenderás a Usar Parse con Swift, en esta entrada veremos como enviar Notificaciones Push.

USAR PARSE CON SWIFT – NOTIFICACIONES

Enviar notificaciones a los diferentes usuarios que han descargado tu App no es algo sencillo.

Para empezar debes configurar en tu servidor una serie de características para que Apple apruebe el envío de tus notificaciones.

Usar-Parse-con-Swift-Notificaciones-3

“Fijarsus” que movidon hay que hacer para trabajar con esta tecnología, aquí os dejo el enlace a la documentación oficial de Apple:

CLIC AQUÍ PARA VER LA DOC OFICIAL DE APPLE

A mi particularmente me parece una locura, sobre todo porque me gusta ahorrar tiempo en casi todo lo que hago.

MENUDO JALEO

Pues sí, no es algo sencillo que digamos.

Por que tú eres un iOS Developer.

Y aquí ya estamos hablando de algo más.

Estamos hablando de configurar algo en un servidor.

O no.

PARSE

Es aquí dónde viene Parse en nuestra ayuda.

Ya te hablé de Parse en esta entrada, dónde ya te conté las bondades de este backend.

Parse puede hacer muchas cosas por nosotros, ahorrarnos un montón de trabajo.

Y en el caso de ponernos manos a la obra para crear una App cliente/servidor también nos facilita la vida.

Usar-Parse-con-Swift-Notificaciones-0

Cada día quiero más a este jodido servicio Web.

Algunas de las cosas que nos permite hacer son:

  • Crear un sistema de Login. Login tradicional, o bien a través de Facebook o Twitter.
  • Crear tablas para guardar datos y posteriormente recuperarlos.
  • Notificaciones
  • Analítica

Hay muchas más cosas.

Para esta entrada lo que nos interesa es el servicio de notificaciones, dónde vamos a poder enviar Push Notifications a los usuarios que han descargado nuestra App.

 

Por último y para terminar esta introducción, debo decir que Parse dispone de los mejores manuales de ayuda y tutoriales para implementar sus soluciones.

Usar-Parse-con-Swift-Notificaciones

INSTALAR

Lo primero que debemos hacer para realizar este ejemplo es crear un nuevo proyecto en Xcode.

Podemos usar la plantilla Single View Application.

Para usar Parse debemos instalar su SDK en nuestro proyecto, esto es relativamente sencillo, lo puedes descargar aquí:

Enlace de descarga API Parse

Una vez descargado, solo hay que arrastrar la carpeta descargada dentro de nuestro proyecto.

AÑADIR EL SDK A NUESTRO PROYECTO

El SDK de Parse es extenso, y cada vez más.

Tiene objetos para casi todo.

Por lo que si te decides por esta solución, es muy probable que todo quede en casa.

Usar-Parse-con-Swift-Notificaciones-2

Para que el SDK de Parse funcione, debemos importar a nuestro proyecto algunos Frameworks de Cocoa.

Son los siguientes:

  • AudioToolbox.framework
  • CFNetwork.framework
  • CoreGraphics.framework
  • CoreLocation.framework
  • MobileCoreServices.framework
  • QuartzCore.framework
  • Security.framework
  • StoreKit.framework
  • SystemConfiguration.framework
  • libz.dylib
  • libsqlite3.dylib
  • Accounts.framework
  • Social.framework

CONECTAR LA APP AL SERVIDOR DE PARSE

Para que tu App se asocie a la plataforma Web, debemos hacer algunos ajustes en nuestro archivo AppDelegate.swift

Lo primero importar el Framework:

import Parse

A continuación, debemos sobreescribir el método application:didFinishLaunchingWithOptions: con el Application ID y el Client Key que Parse nos ha otorgado para esta aplicación en particular.

Es decir, cada vez que creas una nueva aplicación dentro de Parse, vas a tener un Application ID y un Client Key especifico para cada una de ellas.

Parse.setApplicationId(“AQUÍ TU APPLICATION ID”,  clientKey: “AQUÍ TU CLIENTE KEY”)

NOTIFICACIONES

Para poder enviar notificaciones a nuestra App, vamos a tener que volver a “tocar” el método application:didFinishLaunchingWithOptions: dentro de nuestro archivo AppDelegate.swift, en concreto vamos a tener que configurar de que manera vamos a recibir estas notificaciones, por lo que añadiremos lo siguiente:

// Registramos la Push Notification
if application.applicationState != UIApplicationState.Background {
 
    let preBackgroundPush = !application.respondsToSelector(“backgroundRefreshStatus”)
    let oldPushHandlerOnly = !self.respondsToSelector(“application:didReceiveRemoteNotification:fetchCompletionHandler:”)
    var pushPayload = false
    if let options = launchOptions {
        pushPayload = options[UIApplicationLaunchOptionsRemoteNotificationKey] != nil
    }
    if (preBackgroundPush || oldPushHandlerOnly || pushPayload) {
        PFAnalytics.trackAppOpenedWithLaunchOptions(launchOptions)
    }
}
if application.respondsToSelector(“registerUserNotificationSettings:”) {
    let userNotificationTypes = UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound
    let settings = UIUserNotificationSettings(forTypes: userNotificationTypes, categories: nil)
    application.registerUserNotificationSettings(settings)
    application.registerForRemoteNotifications()
} else {
    let types = UIRemoteNotificationType.Badge | UIRemoteNotificationType.Alert | UIRemoteNotificationType.Sound
    application.registerForRemoteNotificationTypes(types)
}

Lo siguiente será añadir tres funciones a nuestra clase AppDelegate.swift que serán las encargadas de recibir las notificaciones.

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    let installation = PFInstallation.currentInstallation()
    installation.setDeviceTokenFromData(deviceToken)
    installation.saveInBackground()
}
 
func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
    if error.code == 3010 {
        println(“Push notifications are not supported in the iOS Simulator.”)
    } else {
        println(“application:didFailToRegisterForRemoteNotificationsWithError: %@”, error)
    }
}
 
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
    PFPush.handlePush(userInfo)
    if application.applicationState == UIApplicationState.Inactive {
        PFAnalytics.trackAppOpenedWithRemoteNotificationPayload(userInfo)
    }
}

SUBIR TU CERTIFICADO .p12 A PARSE

Para que Parse pueda enviar notificaciones por ti y a tu App, necesitas subir tu archivo .p12.
Este archivo es un certificado que es único por cada aplicación, y lo que hace es enviar de forma inequívoca tus notificaciones a los usuarios que tienen instalada esa aplicación y no otra.
A estas alturas ya habrás deducido que para usar este servicio debes tener cuenta de desarrollador.
Pues sí.
Además, al margen de Parse, debes hacer algunos ajustes dentro de tu aplicación en iOS Dev Center.
iOS Dev Center es el sitio que Apple pone a disposición de los desarrolladores para gestionar sus certificados, además de consultar diferente documentación, o descargar versiones beta de software.
Basicamente lo que hay que hacer es entrar en el APP ID de la aplicación en cuestión, e indicar que tu App va a ofrecer el servicio de Push Notifications.
Como dije anteriormente, Parse tiene los mejores manuales y tutoriales para implementar sus servicios, así que te dejo el enlace de su Web dónde explican de forma muy clara todo lo que te acabo de contar, así como crear este archivo .p12
Eso sí, está en inglés, pero ponen capturas de pantalla, por lo que no creo que tengas problemas en seguir su explicación.

A ENVIAR NOTIFICACIONES

Pues esto es todo.
Ahora déjame darte un consejito.
¡No seas pesadito/a con las notificaciones!
Si envías demasiadas, el usuario borrará tu App, así de sencillo.
Y es que no hay nada peor que una aplicación que te “mata” a notificaciones.
Y no lo digo yo, ni esto es una opinión personal.
Hay estudios que indican que el usuario no quiere ser molestado con notificaciones.
Así que ya que sabes hacer esto, “usa tu sabiduría con sensatez, es tu responsabilidad” 😉
Cualquier duda, puedes dejarme un comentario, o también una felicitación si te ha gustado el post. 🙂