iOS
Send Push Notifications
Implementar notificaciones push con Cloud Code en Swift
28 min
envío de notificaciones push utilizando código en la nube con swift introducción esta sección explica cómo puedes enviar notificaciones push utilizando código en la nube a través de back4app así es como se verá en cualquier momento, puedes acceder al proyecto completo construido con este tutorial en nuestro repositorio de github para completar este inicio rápido, necesitas xcode una aplicación creada en back4app sigue el tutorial de nueva aplicación parse para aprender cómo crear una aplicación parse en back4app una aplicación ios conectada a back4app nota sigue el tutorial de instalación del sdk de parse (swift) para crear un proyecto xcode conectado a back4app una aplicación ios configurada a través de tutorial de notificaciones push de back4app a través del dashboard un dispositivo ios, iphone o ipad, que ejecute ios 10 o superior una cuenta de desarrollador de apple paga 1 configura tu aplicación ios para recibir notificaciones push cada aplicación parse instalada en un dispositivo registrado para notificaciones push tiene un objeto asociado de instalación instalación el objeto instalación instalación es donde almacenas todos los datos necesarios para dirigir las notificaciones push por ejemplo, en tu aplicación, podrías almacenar qué equipos le interesan a uno de tus usuarios para enviar actualizaciones sobre su rendimiento guardar el objeto instalación instalación también es necesario para rastrear eventos de apertura de la aplicación relacionados con las notificaciones push la forma más sencilla de comenzar a enviar notificaciones es utilizando canales esto te permite usar un modelo de publicador suscriptor para enviar notificaciones los dispositivos comienzan suscribiéndose a uno o más canales, y las notificaciones pueden enviarse más tarde a estos suscriptores los canales a los que se suscribe un dado instalación instalación se almacenan en el canales canales campo del instalación instalación objeto después de eso, revisaremos el envío de notificaciones push dirigidas a un solo usuario o a un grupo de usuarios basado en una consulta de ahora en adelante, asumiremos que has completado todos los pasos del tutorial de notificaciones push de back4app a través del dashboard , incluso si utilizas el proyecto ios construido con este tutorial que está disponible en nuestro repositorio de github deberías tener las notificaciones push básicas funcionando y también ser capaz de enviar notificaciones a través de la consola de administración 2 suscribe tu dispositivo al canal de noticias primero, agregaremos un canal a tu objeto de instalación vamos a hacer esto alterando el método createinstallationonparse createinstallationonparse en nuestro archivo app delegate abre el archivo appdelegate m archivo appdelegate m , y asegúrate de que tu versión de createinstallationonparse createinstallationonparse sea la misma que el código a continuación appdelegate swift 1 func createinstallationonparse(devicetokendata\ data){ 2 if let installation = pfinstallation current(){ 3 installation setdevicetokenfrom(devicetokendata) 4 installation setobject(\["news"], forkey "channels") 5 installation saveinbackground { 6 (success bool, error error?) in 7 if (success) { 8 print("you have successfully saved your push installation to back4app!") 9 } else { 10 if let myerror = error{ 11 print("error saving parse installation \\(myerror localizeddescription)") 12 }else{ 13 print("uknown error") 14 } 15 } 16 } 17 } 18 } estamos agregando una nueva línea de código ‘installation setobject(\[“news”], forkey “channels”)’ que establecerá el array de canales del objeto de instalación para contener un canal llamado ‘news’ esto nos permitirá enviar un mensaje a todos los que se suscriban al canal llamado news news a través del código en la nube 2\ pruébalo ejecutando tu aplicación en un dispositivo físico no puedes ejecutar esto en un simulador necesitarás un token de push real para actualizar el registro de tu instalación, así que un dispositivo físico es imprescindible 3\ después de que se ejecute con éxito, deberías ver algo similar a la imagen de abajo en el instalación instalación sección de tu panel de control puedes verificarlo yendo al panel de control de tu aplicación en sitio web de back4app y luego revisando la tabla de instalaciones en la columna de canales deberías ver noticias noticias , mostrándote que ahora estás suscrito al canal de push de noticias canal de push de noticias 3 crea tu código en la nube para saber más sobre cómo comenzar con cloud code mira tutorial de cloud code para ios crea un js js archivo para poner tu cloud code debes llamarlo main js main js para que back4app sepa que aquí es donde almacenas tu código en la nube define una función en la nube, usando parse cloud define parse cloud define , para llamar a la notificación push dentro de la función llamaremos a parse push send parse push send para enviar un push al canal ‘ news news ’ es necesario usar la clave maestra en esta operación el siguiente código ejecuta estos pasos parse server 3 x // main js 1 parse cloud define("pushsample", (request) => { 2 3 return parse push send({ 4 channels \["news"], 5 data { 6 title "hello from the cloud code", 7 alert "back4app rocks!", 8 } 9 }, { usemasterkey true }); 10 }); parse server 2 x //main js 1 parse cloud define("pushsample", function (request, response) { 2 parse push send({ 3 channels \["news"], 4 data { 5 title "hello from the cloud code", 6 alert "back4app rocks!", 7 } 8 }, { 9 success function () { 10 // push was successful 11 response success("push sent"); 12 console log("success push sent"); 13 }, 14 error function (error) { 15 // push was unsucessful 16 response error("error with push " + error); 17 console log("error " + error); 18 }, 19 usemasterkey true 20 }); 21 }) 4 subir a cloud code ve a tu aplicación en sitio web de back4app y haz clic en tablero tablero encuentra el cloud code cloud code y haz clic en funciones y alojamiento web funciones y alojamiento web se ve así 3\ sube o crea un nuevo archivo (también puedes editar el main js main js archivo directamente en el navegador) luego, haz clic en desplegar desplegar como se muestra aquí 5 llamar al código en la nube desde tu aplicación ios ahora, vamos a escribir algo de código para llamar a esta función en la nube desde tu aplicación necesitarás tanto el simulador como un dispositivo físico para completar esta tarea llamarás a la función en la nube desde tu aplicación que se ejecuta en el simulador y verás la notificación aparecer en tu dispositivo físico tu dispositivo físico debe estar realmente cerrado con la pantalla de bloqueo activada para ver la notificación no aparecerá una notificación en la pantalla si estás dentro de la aplicación que la está enviando cuando recibes la notificación 2\ abre el archivo viewcontroller swift viewcontroller swift de tu proyecto necesitamos incluir parse en el controlador de vista añadiendo el siguiente código ‘import parse’ en la parte superior del archivo viewcontroller swift 3\ a continuación en el viewcontroller swift viewcontroller swift archivo llamaremos a una función de alerta desde el método viewdidappear la alerta te permitirá activar el código de cloud code que enviará un push a tu dispositivo asegúrate de incluir el siguiente bloque de código después de la viewdidload viewdidload función viewcontroller swift viewcontroller swift 1 override func viewdidappear( animated bool) { 2 asktosendpushnotifications() 3 } 4 5 func asktosendpushnotifications() { 6 let alertview = uialertcontroller(title "send a push to the news channel", message nil, preferredstyle alert) 7 let okaction = uialertaction(title "ok", style default) { (action\ uialertaction) in 8 self sendpushnotifications() 9 } 10 alertview\ addaction(okaction) 11 let cancelaction = uialertaction(title "cancel", style cancel) { (action\ uialertaction) in 12 } 13 alertview\ addaction(cancelaction) 14 if let presenter = alertview\ popoverpresentationcontroller { 15 presenter sourceview = self view 16 presenter sourcerect = self view\ bounds 17 } 18 self present(alertview, animated true, completion\ nil) 19 } 20 21 func sendpushnotifications() { 22 let cloudparams \[anyhashable\ string] = \[ ] 23 pfcloud callfunction(inbackground "pushsample", withparameters cloudparams, block { 24 (result any?, error error?) > void in 25 if error != nil { 26 if let descrip = error? localizeddescription{ 27 print(descrip) 28 } 29 }else{ 30 print(result as! string) 31 } 32 }) 33 } 4\ ejecuta tu aplicación en el simulador y cuando la alerta pida enviar el push, presiona “ok” en tu dispositivo físico deberías ver el push aparecer en la pantalla de bloqueo, así 6 llamar a cloud code desde la api rest la api rest proporciona una forma rápida y fácil de probar si tu función en la nube está funcionando simplemente usa el código a continuación en tu terminal o símbolo del sistema haz clic en para saber más sobre cómo comenzar con la línea de comandos en linux , macos o windows para probar las notificaciones push, simplemente utiliza el código rest mientras el dispositivo está cerrado 7 envía notificaciones push dirigidas utilizando un objeto de usuario en adelante, utilizaremos un proyecto de ios diferente que ya tiene características básicas de registro y acceso vamos a utilizar este proyecto de ios que podemos mostrarte cómo detectar si un usuario ha iniciado sesión, y si es así, guardar su instalación con un enlace a su id de objeto para consultas en el código en la nube puedes descargar el proyecto completo de ios construido con el tutorial de esta sección en nuestro repositorio de github pero aún tendrás que hacer toda la configuración del tutorial anterior que explica cómo enviar notificaciones desde el panel de control de back4app puedes descargar el proyecto completo de ios construido con el tutorial de esta sección en nuestro repositorio de github pero aún tendrás que hacer toda la configuración del tutorial anterior que explica cómo enviar notificaciones desde el panel de control de back4app obtén la nueva versión de la aplicación y regístrate o inicia sesión en la aplicación primero asegúrate de descargar la plantilla funcional de nuestro repositorio de github no vamos a repasar todos los pasos para construir esta aplicación, en su lugar nos enfocaremos en configurar el código en la nube y por qué funciona una vez que abras esta nueva aplicación, asegúrate de poner las credenciales de tu propia aplicación en el archivo appdelegate swift appdelegate swift 1 func application( application uiapplication, didfinishlaunchingwithoptions launchoptions \[uiapplicationlaunchoptionskey any]?) > bool { 2 let configuration = parseclientconfiguration { 3 $0 applicationid = "paste your application id here" 4 $0 clientkey = "paste your client id here" 5 $0 server = "https //parseapi back4app com" 6 } 7 parse initialize(with configuration) 8 return true 9 } 2\ esta aplicación tiene algunas diferencias importantes con respecto a la aplicación anterior cuenta con 2 secciones, una para estar conectado a tu aplicación y otra sección cuando no estás conectado a tu aplicación el siguiente gran cambio es la función ‘createinstallationonparse’ del archivo appdelegate swift hemos añadido 1 línea que almacena el id del objeto del usuario como parte del objeto de instalación de esa manera podemos saber qué usuario está asociado con qué objeto de instalación y podemos dirigirnos a ellos individualmente para notificaciones appdelegate swift 1 func createinstallationonparse(devicetokendata\ data){ 2 if let installation = pfinstallation current(){ 3 installation setdevicetokenfrom(devicetokendata) 4 installation setobject(\["news"], forkey "channels") 5 if let userid = pfuser current()? objectid { 6 installation setobject(userid, forkey "userid") 7 } 8 installation saveinbackground { 9 (success bool, error error?) in 10 if (success) { 11 print("you have successfully saved your push installation to back4app!") 12 } else { 13 if let myerror = error{ 14 print("error saving parse installation \\(myerror localizeddescription)") 15 }else{ 16 print("uknown error") 17 } 18 } 19 } 20 } 21 } 3\ dado que ahora estamos almacenando el id del objeto del usuario como parte del objeto de instalación, no queremos solicitar un nuevo token de push hasta que el usuario haya iniciado sesión no queremos solicitar un token directamente desde la función ‘application didfinishlaunchingwithoptions’ del archivo appdelegate swift, en su lugar queremos llamarlo desde la función ‘viewdidappear’ del loggedinviewcontroller en ‘viewdidappear’ llamamos a una función en el appdelegate para solicitar acceso a un token de notificación push de apple dado que solo puedes ver esta sección una vez que has iniciado sesión, podemos asumir que el usuario ha iniciado sesión cuando creamos el objeto de instalación, pero solo para estar seguros, usamos una ‘if let statement’ para deshacer el objeto parse currentuser() y recuperar el id del objeto loggedinviewcontroller swift 1 override func viewdidappear( animated bool) { 2 appdelegate? startpushnotifications() 3 } appdelegate swift 1 if let userid = pfuser current()? objectid { 2 installation setobject(userid, forkey "userid") 3 } 4\ ok, ahora, para registrarte o iniciar sesión en tu dispositivo físico (iphone o ipad) inicia la aplicación deberías ver la imagen de abajo deberías registrarte para crear un nuevo usuario o iniciar sesión si ya has creado un usuario en tu aplicación así es como se verá ahora deberías poder ver el loggedinviewcontroller debería verse así si intentas enviarte notificaciones a ti mismo, aún no funcionará porque no hemos agregado esos métodos al código en la nube así que eso es lo que haremos a continuación 8 agregar los métodos de push dirigidos al código en la nube abre tu main js main js archivo que creaste anteriormente y agrega las siguientes funciones para dirigir las instalaciones por id de usuario es necesario usar la clave maestra en esta operación parse server 3 x // main js 1 parse cloud define('sendpushtoyourself', (request) => { 2 let userid = request user id; 3 4 let query = new parse query(parse installation); 5 query equalto("userid", userid); 6 query descending("updatedat"); 7 return parse push send({ 8 where query, 9 data { 10 title "hello from the cloud code", 11 alert "back4app rocks! single message!", 12 } 13 }, { usemasterkey true }); 14 }); 15 16 parse cloud define('sendpushtoallusers', (request) => { 17 let currentuser = request user; 18 let userids = \[currentuser id]; 19 20 let query = new parse query(parse installation); 21 query containedin('userid', userids); 22 return parse push send({ 23 where query, 24 data { 25 title "hello from the cloud code", 26 alert "back4app rocks! group message!", 27 } 28 }, { usemasterkey true }); 29 }); parse server 2 x //main js 1 parse cloud define('sendpushtoyourself', function (request, response) { 2 var currentuser = request user; 3 var userid = currentuser id; 4 5 var query = new parse query("installation"); 6 query equalto("userid", userid); 7 query descending("updatedat"); 8 parse push send({ 9 where query, 10 data { 11 title "hello from the cloud code", 12 alert "back4app rocks! single message!", 13 } 14 }, { 15 usemasterkey true, 16 success function () { 17 response success("success sending a single push!"); 18 }, 19 error function (error) { 20 response error(error code + " " + error description); 21 } 22 }); 23 }); 24 25 parse cloud define('sendpushtoallusers', function (request, response) { 26 var currentuser = request user; 27 var userids = \[currentuser id]; 28 29 var query = new parse query(parse installation); 30 query containedin('userid', userids); 31 parse push send({ 32 where query, 33 data { 34 title "hello from the cloud code", 35 alert "back4app rocks! group message!", 36 } 37 }, { 38 usemasterkey true, 39 success function () { 40 response success('success sending a group push!'); 41 }, 42 error function (message) { 43 response error(error code + " " + error description); 44 } 45 }); 46 }); 9 subir a cloud code ve a tu aplicación en el sitio web de back4app y haz clic en tablero tablero encuentra el cloud code cloud code y haz clic en funciones y alojamiento web funciones y alojamiento web se ve así 3\ sube o crea un nuevo archivo (también puedes editar el archivo main js main js directamente en el navegador) luego, haz clic en desplegar desplegar como se muestra aquí 10 prueba que puedes enviar notificaciones push dirigidas a ti mismo abre tu aplicación desde el simulador mientras dejas tu dispositivo físico cerrado con la pantalla de bloqueo activada puedes probar que ambas funciones de push están funcionando presionando el botón ‘enviar push a ti mismo’ y el botón ‘enviar push a un grupo de personas’ deberías ver las notificaciones aparecer en la pantalla de bloqueo de tus dispositivos pensamientos finales ahora, deberías tener una comprensión firme de cómo enviar notificaciones push basadas en el canal de un usuario o el id de objeto de un usuario o cualquier otra consulta que implique obtener el id de objeto del usuario recuerda que para almacenar el id de objeto del usuario debes agregarlo a la instalación de push y solo solicitar un token de push cuando el usuario esté conectado al enviar notificaciones push a través de consultas, ten en cuenta que por defecto está limitado a 100 resultados y algunos usuarios pueden tener más de un objeto de instalación tampoco se recomienda enviar notificaciones push a un arreglo de objetos de instalación que sean mayores a 100 resultados podría resultar en que algunas notificaciones no se envíen si estás tratando con grandes grupos de personas, es mejor usar canales o enviar las notificaciones en solicitudes repetidas ¡está hecho! ¡en esta etapa, puedes enviar notificaciones push usando cloud code a través de back4app! ¡felicidades!