|
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
|
Herramientas |
#1
|
||||
|
||||
Notificaciones push
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. |
|
#2
|
||||
|
||||
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. |
#3
|
||||
|
||||
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. 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. |
#4
|
||||
|
||||
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.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#5
|
||||
|
||||
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. 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. |
#6
|
||||
|
||||
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.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#7
|
||||
|
||||
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. Tu entonces me recomendarías el tema roles no? Gracias por tu ayuda. |
#8
|
||||
|
||||
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.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#9
|
||||
|
||||
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. 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? |
#10
|
||||
|
||||
Encaja totalmente
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#11
|
||||
|
||||
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? |
#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.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#13
|
||||
|
||||
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. |
#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. |
#15
|
||||
|
||||
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).
__________________
|
#16
|
||||
|
||||
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? Última edición por garciam202 Día 28/10/16 a las 12:14:44. |
#17
|
||||
|
||||
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. 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? |
#18
|
||||
|
||||
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 mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#19
|
||||
|
||||
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? 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. |
|
#20
|
||||
|
||||
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. 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. |