Ver la Versión Completa : Notificaciones push
garciam202
25/10/16, 17:16:46
Aquí va mi duda:
Es posible compartir mediante notificaciones push contenido compuesto por videos, imágenes, texto...?
Me explico. Tendría ejercicios compuestos por ese contenido multimedía que desearía enviar por completo mediante notificaciones push para su visualización.
Sino es posible, que otras alternativas tendría?
Gracias de antemano.
kriogeN
25/10/16, 22:06:07
El tamaño máximo que puede tener una notificación Push con FCM (o GCM) es de 4 kbs. Y 2 kbs en el caso de iOS 8+ (bien sea con APNS o con FCM).
Así que respondiendo a tu pregunta, no puedes enviarlo DENTRO de la notificación (quizás una imagen muy pequeña si). Pero si puedes hacer que el servicio que lee la notificación descargue algo de un servidor al recibirla, y mostrarla una vez descargado. Así que básicamente en la notificación envías una ruta de descarga, te la descargas, y después la muestras con el contenido ya preparado.
garciam202
27/10/16, 02:58:11
El tamaño máximo que puede tener una notificación Push con FCM (o GCM) es de 4 kbs. Y 2 kbs en el caso de iOS 8+ (bien sea con APNS o con FCM).
Así que respondiendo a tu pregunta, no puedes enviarlo DENTRO de la notificación (quizás una imagen muy pequeña si). Pero si puedes hacer que el servicio que lee la notificación descargue algo de un servidor al recibirla, y mostrarla una vez descargado. Así que básicamente en la notificación envías una ruta de descarga, te la descargas, y después la muestras con el contenido ya preparado.
Entiendo. Parece la mejor solución para enviar ese contenido.
Otra duda importante que tengo a raíz de esto es la siguiente:
Tengo entendido que es totalmente necesario tener instalada la App para poder recibir sus notificaciones. Pero en mi caso habría una persona tan sólo que utilizase la App y el resto solo me interesaría que recibiesen las notificaciones y pudiesen ver ese contenido mulimedía de una determinada forma. Había pensado en algo de este tipo:
Diseñar la App principal con la que realices modificaciones sobre la BBDD y otra App para los usuarios que deben recibir la notificación que se limite a mostrar ese contenido de la forma que me interese. Algo así como que los usuarios que quieran recibir las notificaciones se registren en la App "visor" y la App "principal" envié notificaciones a los primeros viendo a quien es en una BBDD compartida con el registro en el GCM o algo así.
No se si mi propuesta es viable y sino lo es que otra alternativa tendría.
Gracias.
mocelet
27/10/16, 08:46:12
Algo así como que los usuarios que quieran recibir las notificaciones se registren en la App "visor" y la App "principal" envié notificaciones a los primeros viendo a quien es en una BBDD compartida con el registro en el GCM o algo así.
Las notificaciones las envías desde el servidor de la aplicación, no desde la "app principal". La app de hecho es que ni siquiera debería tener acceso directo a la base de datos por cuestiones de seguridad entre otras.
Modificar los datos, añadir ejercicios, etc. lo puedes hacer con una app, con una interfaz web o con cualquier cosa que sepa comunicarse con el servidor (yo haría la interfaz de edición web en vez de app, obligar a escribir ejercicios en un móvil es un rollete).
El servidor será el que notifique a quien tenga que notificar extrayendo los identificadores de la base de datos.
garciam202
27/10/16, 10:58:55
Las notificaciones las envías desde el servidor de la aplicación, no desde la "app principal". La app de hecho es que ni siquiera debería tener acceso directo a la base de datos por cuestiones de seguridad entre otras.
Modificar los datos, añadir ejercicios, etc. lo puedes hacer con una app, con una interfaz web o con cualquier cosa que sepa comunicarse con el servidor (yo haría la interfaz de edición web en vez de app, obligar a escribir ejercicios en un móvil es un rollete).
El servidor será el que notifique a quien tenga que notificar extrayendo los identificadores de la base de datos.
Es una aplicación para tablet. Los ejercicios no requerirían de mucha escritura.
Los identificadores a los que debe comunicar el servidor deben estar previamente registrados desde la app no?
Entonces entiendo que si sería posible mi propuesta si ambas apps, tanto la "principal" como el "visor" comparten servidor no?
Perdon sino te he entendido bien.
mocelet
27/10/16, 12:05:23
Correcto, cuando la app se registra en el servicio de notificaciones recibe un identificador y ese identificador se lo pasas al servidor para que lo guarde en la base de datos y pueda recuperarlo cuando necesite enviarle una notificación a ese usuario.
Sobre tener apps principal y visor siempre puedes tener la misma donde las funciones de edición solo estén disponibles para usuarios autenticados con el rol de profesor o similar. Eso ya depende de lo que sea más fácil para ti y para los usuarios.
garciam202
27/10/16, 13:10:44
Correcto, cuando la app se registra en el servicio de notificaciones recibe un identificador y ese identificador se lo pasas al servidor para que lo guarde en la base de datos y pueda recuperarlo cuando necesite enviarle una notificación a ese usuario.
Sobre tener apps principal y visor siempre puedes tener la misma donde las funciones de edición solo estén disponibles para usuarios autenticados con el rol de profesor o similar. Eso ya depende de lo que sea más fácil para ti y para los usuarios.
Había pensado también en esa opción de distinguir en función del rol. El problema es que debería capar bastante funcionalidad, aunque no lo descarto. En principio la opción que más me atraía en caso de ser viable es la de dos apps aunque no se si es muy elegante o la opción que tu me propones es mejor.
Tu entonces me recomendarías el tema roles no?
Gracias por tu ayuda.
mocelet
27/10/16, 13:31:12
Desde la ignorancia del contexto de la app, entiendo que si hay ejercicios habrá alumnos que estarán autenticados en el sistema. Y docentes que serán lo que propongan los ejercicios o incluso los corrijan, que también tendrán que estar autenticados incluso si tienes una app separada para editar (¿no va a poder editar cualquiera que se baje la app de edición, no?)
Tener roles y permisos parece lo más natural, pero vamos, que ya depende de los detalles de lo que estés haciendo. Si es matar moscas a cañonazos igual no compensa.
garciam202
27/10/16, 13:38:47
Desde la ignorancia del contexto de la app, entiendo que si hay ejercicios habrá alumnos que estarán autenticados en el sistema. Y docentes que serán lo que propongan los ejercicios o incluso los corrijan, que también tendrán que estar autenticados incluso si tienes una app separada para editar (¿no va a poder editar cualquiera que se baje la app de edición, no?)
Tener roles y permisos parece lo más natural, pero vamos, que ya depende de los detalles de lo que estés haciendo. Si es matar moscas a cañonazos igual no compensa.
En otro contexto pero si es lo que comentas. Te situó un poco:
Habrá un entrenador que diseñe ejercicios y unos jugadores que deben recibirlos y solo poder visualizarlos con todo su contenido de una determinada forma.
Imagino que lo de los roles encaja mejor aquí no?
Los jugadores se registrarían con alguna condición de manera que aparecerían en la app como eso, jugadores y el entrenador tendría todos los permisos. No?
mocelet
27/10/16, 13:52:02
Encaja totalmente
garciam202
27/10/16, 14:43:04
Encaja totalmente
Gracias por tu ayuda.
Una última duda (espero jaja) y no te molesto más.
Yo como entrenador, solo querría que mis ejercicios se enviasen a mis jugadores y no a todos los que se registren en la app con rol jugador.
Para esto requeriría un registro especial para que el GCM supiese a quien enviárselo?
mocelet
27/10/16, 15:03:29
Tienes que autenticar a tus usuarios (jugadores) y en la base de datos guardar qué identificador de GCM/FCM le corresponde a cada usuario.
Al GCM le da igual a quién avises, cuando tengas que notificar tendrás que darle una ristra de identificadores.
El registro es igual, lo que sí es importante es que tengas guardado a quién pertenece cada identificador para que las cosas lleguen a quien tiene que llegar.
garciam202
27/10/16, 15:48:12
Tienes que autenticar a tus usuarios (jugadores) y en la base de datos guardar qué identificador de GCM/FCM le corresponde a cada usuario.
Al GCM le da igual a quién avises, cuando tengas que notificar tendrás que darle una ristra de identificadores.
El registro es igual, lo que sí es importante es que tengas guardado a quién pertenece cada identificador para que las cosas lleguen a quien tiene que llegar.
Muchísimas gracias. Me ha quedado todo clarisimo. De momento esto es todo.
kriogeN
27/10/16, 15:56:14
Tienes que autenticar a tus usuarios (jugadores) y en la base de datos guardar qué identificador de GCM/FCM le corresponde a cada usuario.
Al GCM le da igual a quién avises, cuando tengas que notificar tendrás que darle una ristra de identificadores.
El registro es igual, lo que sí es importante es que tengas guardado a quién pertenece cada identificador para que las cosas lleguen a quien tiene que llegar.
Una de las novedades de FCM es crear "listas de notificación", envías una notificación a una lista y automáticamente notifica a todos los que están suscritos a esa lista. Quizás para este caso puede ser interesante.
Dexafree
28/10/16, 00:07:18
Una de las novedades de FCM es crear "listas de notificación", envías una notificación a una lista y automáticamente notifica a todos los que están suscritos a esa lista.
En la traducción a español que han hecho desde Firebase creo que lo han llamado "Temas", pero sigues necesitando un servidor que lance las notificaciones a ese tema (o manualmente).
No se cuán escalable será (ni cuantos te permitirán en el plan gratuito), pero la verdad es que suena a caso de uso bastante a tener en cuenta para el caso que comenta el compañero (no deja de ser un select con joins de las tablas de usuarios, pero si la propia plataforma te lo da hecho, mejor que mejor).
garciam202
28/10/16, 12:11:24
Me apunto vuestro comentario.
En la app yo tendría guardados unos usuarios que serían los jugadores que luego se registrarían en ela GCM para recibir las notificaciones. Con lo cual solo habría que enviar las notificaciones a los que yo tengo almacenados.
Lo de la lista que comentáis quizá me facilite tener que hacer ese "join" entre mis jugadores almacenados y los registrados en el GCM no?
garciam202
01/11/16, 19:24:29
Tienes que autenticar a tus usuarios (jugadores) y en la base de datos guardar qué identificador de GCM/FCM le corresponde a cada usuario.
Al GCM le da igual a quién avises, cuando tengas que notificar tendrás que darle una ristra de identificadores.
El registro es igual, lo que sí es importante es que tengas guardado a quién pertenece cada identificador para que las cosas lleguen a quien tiene que llegar.
Entiendo.
El GCM aparte de distribuir la información y enviar notificaciones a quien lo requiere, podría indicarle que a su vez actualizase un calendario "interno" en la aplicación?
El entrenador daría de alta un entrenamiento y esta notificación se enviaría a todos los jugadores registrados en el GCM que pertenezcan a la plantilla y ademas su calendario se actualizara con el entrenamiento dado de alta por el entrenador y podrían ver su contenido. El GCM seria capaz de realizar esa acción o solo permite notificar pero no actualizar información dentro de la app?
mocelet
01/11/16, 19:37:50
GCM es solo para notificar algo a un usuario de la app, no es una base de datos ni guarda nada.
El escenario típico es que tengas un servidor con su base de datos MySQL o similar y ahí guardes los eventos, entrenamientos o lo que sea.
El entrenador sube los eventos y los usuarios los consultan, y residen en la base de datos.
GCM solo te ayudaría a notificar de novedades a los usuarios para que la app se conecte al servidor y se baje los ejercicios nuevos o simplemente decirle al usuario que hay ejercicios nuevos y bajarlos cuando se abra la app.
Si no necesitas un aviso instantáneo te puedes ahorrar usar GCM y que la app se conecte al servidor al abrirla para ver si hay datos nuevos, igual que si entraras a una web para ver si hay novedades. Ya depende del escenario.
kriogeN
01/11/16, 19:40:08
Entiendo.
El GCM aparte de distribuir la información y enviar notificaciones a quien lo requiere, podría indicarle que a su vez actualizase un calendario "interno" en la aplicación?
El entrenador daría de alta un entrenamiento y esta notificación se enviaría a todos los jugadores registrados en el GCM que pertenezcan a la plantilla y ademas su calendario se actualizara con el entrenamiento dado de alta por el entrenador y podrían ver su contenido. El GCM seria capaz de realizar esa acción o solo permite notificar pero no actualizar información dentro de la app?
El GCM por si mismo no hace nada, simplemente envía información al móvil, con un tamaño máximo de 4 kbs. Ni siquiera muestra la notificación por si mismo (cosa que iOS si hace, pero en contrapartida no puedes ejecutar servicios en segundo plano hasta que no inicias la app mediante la notificación)
Cuando el móvil recibe esa información se despierta y ejecuta un servicio, ese servicio (que programas tú) es el encargado de leer la información y hacer lo que te de la gana, el 99% de las veces crear la notificación y mostrarla.
Así que básicamente, si se puede, si la información cabe en 4 kbs. Y si no cabe, siempre puedes simplemente notificar al móvil para que lea del servidor el entrenamiento y se actualice. No olvides que si el trabajo va a ser costoso tendrás que iniciar un WakeLock y cerrarlo al terminar.
EDIT: Se adelantó mocelet.
garciam202
01/11/16, 20:22:10
GCM es solo para notificar algo a un usuario de la app, no es una base de datos ni guarda nada.
El escenario típico es que tengas un servidor con su base de datos MySQL o similar y ahí guardes los eventos, entrenamientos o lo que sea.
El entrenador sube los eventos y los usuarios los consultan, y residen en la base de datos.
GCM solo te ayudaría a notificar de novedades a los usuarios para que la app se conecte al servidor y se baje los ejercicios nuevos o simplemente decirle al usuario que hay ejercicios nuevos y bajarlos cuando se abra la app.
Si no necesitas un aviso instantáneo te puedes ahorrar usar GCM y que la app se conecte al servidor al abrirla para ver si hay datos nuevos, igual que si entraras a una web para ver si hay novedades. Ya depende del escenario.
El aviso lo necesito.
En resumen. Tengo un servidor con mi base de datos MySQL que almacena los entrenamientos que da de alta el entrenador. Una vez dado de alta se envía la notificación a los jugadores mediante GCM indicando que existe una modificación en la app. El jugador accede a la app y esta se comunica con el servidor donde tengo almacenados los entrenamientos y en función de eso actualiza su calendario "reconstruyendo" la información necesaria.
garciam202
01/11/16, 20:23:52
El GCM por si mismo no hace nada, simplemente envía información al móvil, con un tamaño máximo de 4 kbs. Ni siquiera muestra la notificación por si mismo (cosa que iOS si hace, pero en contrapartida no puedes ejecutar servicios en segundo plano hasta que no inicias la app mediante la notificación)
Cuando el móvil recibe esa información se despierta y ejecuta un servicio, ese servicio (que programas tú) es el encargado de leer la información y hacer lo que te de la gana, el 99% de las veces crear la notificación y mostrarla.
Así que básicamente, si se puede, si la información cabe en 4 kbs. Y si no cabe, siempre puedes simplemente notificar al móvil para que lea del servidor el entrenamiento y se actualice. No olvides que si el trabajo va a ser costoso tendrás que iniciar un WakeLock y cerrarlo al terminar.
EDIT: Se adelantó mocelet.
Me ha servido igual. Creo que lo voy entendiendo mejor. A ver si el resumen que pongo arriba es correcto.
garciam202
29/11/16, 18:13:09
GCM es solo para notificar algo a un usuario de la app, no es una base de datos ni guarda nada.
El escenario típico es que tengas un servidor con su base de datos MySQL o similar y ahí guardes los eventos, entrenamientos o lo que sea.
El entrenador sube los eventos y los usuarios los consultan, y residen en la base de datos.
GCM solo te ayudaría a notificar de novedades a los usuarios para que la app se conecte al servidor y se baje los ejercicios nuevos o simplemente decirle al usuario que hay ejercicios nuevos y bajarlos cuando se abra la app.
Si no necesitas un aviso instantáneo te puedes ahorrar usar GCM y que la app se conecte al servidor al abrirla para ver si hay datos nuevos, igual que si entraras a una web para ver si hay novedades. Ya depende del escenario.
Buenas mocelet.
Me gustaría preguntarte una duda que tengo. He estado buscando por internet pero no encuentro la solución clara.
Estoy tratando de crear una base de datos mysql en un servidor para luego acceder a ella desde la aplicación android. Esto podría hacerlo con XAMPP y luego realizar la conexión a la base de datos que cree en phpmyadmin desde mi app?
mocelet
30/11/16, 01:13:26
Conectar directamente la app a la base de datos no es nada recomendable.
En su lugar tendrás que crear una página php o en cualquier otro lenguaje que sirva de interfaz (API) para la app. La app se conecta por HTTP al servidor php y este internamente con MySQL.
garciam202
30/11/16, 16:35:34
Conectar directamente la app a la base de datos no es nada recomendable.
En su lugar tendrás que crear una página php o en cualquier otro lenguaje que sirva de interfaz (API) para la app. La app se conecta por HTTP al servidor php y este internamente con MySQL.
Vale, es lo que me suponía.
Mi idea era hacer un servicio rest en java que luego accediese internamente a una base de datos mysql.
Después la app consumiría ese servicio rest.
Esta forma la verías mas adecuada?
mocelet
30/11/16, 16:46:25
Mi idea era hacer un servicio rest en java que luego accediese internamente a una base de datos mysql.
Perfecto. Si vas a enviar contraseñas o datos personales acuérdate de usar HTTPS o le harás un flaco favor a los usuarios.
garciam202
30/11/16, 16:58:41
Perfecto. Si vas a enviar contraseñas o datos personales acuérdate de usar HTTPS o le harás un flaco favor a los usuarios.
Entendido.
Mi problema esta en la creacion de la base de datos.
He mirado y dice de crearla sobre phpmyadmin o en mysql workbench. No se que metodo sera mas conveniente o si existen otras alternativas donde crear una base de datos mysql.
Gracias nuevamente.
mocelet
30/11/16, 18:16:59
La base de datos MySQL créala como quieras o te sea más fácil, todas las cosas que citas son herramientas visuales para no andar tecleando comandos directamente. Al final vas a tener una base de datos con un nombre, un usuario con permisos de lectura/escritura y una dirección IP y un puerto al que conectar.
Tampoco duele mucho conectarse por telnet a la base de datos y escribir CREATE DATABASE... etc. Al fin y al cabo tendrás que familiarizarte con SQL tarde o temprano.
garciam202
01/12/16, 19:07:57
Finalmente la he creado sobre phpmyadmin.
Una duda. Es necesaria alguna implementacion especifica del servicio rest para luego ser accedida desde android? Habia pensado en implementarlo con la api JAX RS de Jersey y un servidor Tomcat. Pero no estoy seguro si luego sera la mejor forma de acoplar a la app android.
mocelet
02/12/16, 00:00:16
Te digo lo mismo, para Android va a ser conectarse por HTTP a una dirección y obtener una serie de datos, típicamente un JSON. Cómo lo tengas implementado es transparente, y si la URI es de una forma u otra también da igual.
Es una conexión HTTP sin más. Como si mañana te cansas y lo implementas en node.js con express y cambias mysql por mongodb. Mientras no cambies el API (el formato de las URIs y los datos) a tu app le dará igual.
vBulletin® v3.8.1, Copyright ©2000-2025, Jelsoft Enterprises Ltd.