Ver la Versión Completa : [ SOLUCIONADO ] Dudas notificaciones push GCM y bibliotecas
mocelet
15/03/13, 17:17:45
Estoy valorando introducir notificaciones en mis apps, tanto para funciones de juego como envío de noticias, avisos de actualizaciones, etc.
Ya me he leído la documentación del GCM oficial, la del curso de sgoliver y alguna referencia más.
Dudas...
1) ¿Es necesario el permiso GET_ACCOUNTS? Hay sitios donde lo ponen como obligado (doc oficial) y otros donde no aparecen (sgoliver y otros tutoriales). ¿Es solo para comprobar que existe la cuenta de Google? He estado viendo juegos que usan notificaciones y unos lo tienen y otros no. Personalmente, es un permiso que no me gusta incluir si no es estrictamente necesario.
2) ¿Hay alguna biblioteca de servidor Java asíncrona? (o algún servidor que haga de interfaz con los sistemas de notificación de Apple, GCM, etc...) La biblioteca de servidor que ofrece Google para Java es sencilla y hace reintentos con periodicidad decreciente como manda Google. Problema: es bloqueante. El día que el servidor de GCM le pase algo, la llamada se quedará bloqueada durante minutos. Lo ideal sería que tuviera internamente una cola de mensajes y periódicamente los fuera procesando, algo que tampoco creo que cueste mucho hacerlo a mano, pero para qué reinventar la rueda...
3) ¿Cuál es la experiencia general de GCM? ¿Es fiable? Siempre veo en muchos comentarios de apps que fallan las notificaciones, y los desarrolladores proponen que se reinstale la aplicación. Reinstalar una app me parece una solución precaria, imagino que es posible detectar desde el servidor cuando un ID no es válido y comunicárselo al cliente (no por notificación evidentemente) para que vuelva a registrarse en GCM.
4) ¿El desregistro cuándo debería hacerlo? Supongo que cuando el usuario desactiva las notificaciones de mi app en preferencias, ¿verdad?
kriogeN
15/03/13, 19:28:36
Estoy valorando introducir notificaciones en mis apps, tanto para funciones de juego como envío de noticias, avisos de actualizaciones, etc.
Ya me he leído la documentación del GCM oficial, la del curso de sgoliver y alguna referencia más.
Dudas...
1) ¿Es necesario el permiso GET_ACCOUNTS? Hay sitios donde lo ponen como obligado (doc oficial) y otros donde no aparecen (sgoliver y otros tutoriales). ¿Es solo para comprobar que existe la cuenta de Google? He estado viendo juegos que usan notificaciones y unos lo tienen y otros no. Personalmente, es un permiso que no me gusta incluir si no es estrictamente necesario.
2) ¿Hay alguna biblioteca de servidor Java asíncrona? (o algún servidor que haga de interfaz con los sistemas de notificación de Apple, GCM, etc...) La biblioteca de servidor que ofrece Google para Java es sencilla y hace reintentos con periodicidad decreciente como manda Google. Problema: es bloqueante. El día que el servidor de GCM le pase algo, la llamada se quedará bloqueada durante minutos. Lo ideal sería que tuviera internamente una cola de mensajes y periódicamente los fuera procesando, algo que tampoco creo que cueste mucho hacerlo a mano, pero para qué reinventar la rueda...
3) ¿Cuál es la experiencia general de GCM? ¿Es fiable? Siempre veo en muchos comentarios de apps que fallan las notificaciones, y los desarrolladores proponen que se reinstale la aplicación. Reinstalar una app me parece una solución precaria, imagino que es posible detectar desde el servidor cuando un ID no es válido y comunicárselo al cliente (no por notificación evidentemente) para que vuelva a registrarse en GCM.
4) ¿El desregistro cuándo debería hacerlo? Supongo que cuando el usuario desactiva las notificaciones de mi app en preferencias, ¿verdad?
1) Si es obligatorio porque para poder usar GCM tienes que tener cuenta de Google, supongo que cuando haces el GCMRegistrar internamente usará tu cuenta de Google para el registro.
2) EDITO: No lo había entendido bien. En mi empresa trabajamos con Symfony, que tiene librerías para Push con Apple, C2DM, GCM, Blackberry y Windows Phone.
3) Yo nunca he tenido problemas en ninguna aplicación en la que uso GCM, supongo que será porque el GCMRegistrar.register sólo lo harán en el primer arranque de la app, y por eso se les queda pillada salvo que reinstales o borres datos. Yo lo hago cada vez que lanzo la app.
4) Ese es un caso, en mi caso como son aplicaciones cliente-servidor lo hago también cuando el usuario se "deslogea"
mocelet
15/03/13, 20:07:31
Interesantes sugerencias kriogeN, ¡gracias!
¿No tiene problemas prácticos registar la app en GCM cada vez que inicia? (pensando en millones de usuarios). Eso significaría estar continuamente cambiando el ID de registro en la base de datos de forma innecesaria para que lleguen las notificaciones. Refrescar el registro periódicamente sí parece buena idea de todas formas, o hacerlo automáticamente cuando la última notificación recibida fuera de hace mucho (sería un indicio de que dejaron de funcionar).
Los tiros de la pregunta de bibliotecas iban por ahí, en mi caso uso Java. He estado viendo que hay servidores de integración como Apache Camel o Jenkins, pero el soporte de GCM está muy verde. Idem en el framework Spring. Haré un apaño manual de momento, he visto que alguien tuvo la misma idea de adaptar la biblioteca de Google para hacerla asíncrona.
kriogeN
15/03/13, 20:29:48
Interesantes sugerencias kriogeN, ¡gracias!
¿No tiene problemas prácticos registar la app en GCM cada vez que inicia? (pensando en millones de usuarios). Eso significaría estar continuamente cambiando el ID de registro en la base de datos de forma innecesaria para que lleguen las notificaciones. Refrescar el registro periódicamente sí parece buena idea de todas formas, o hacerlo automáticamente cuando la última notificación recibida fuera de hace mucho (sería un indicio de que dejaron de funcionar).
Los tiros de la pregunta de bibliotecas iban por ahí, en mi caso uso Java. He estado viendo que hay servidores de integración como Apache Camel o Jenkins, pero el soporte de GCM está muy verde. Idem en el framework Spring. Haré un apaño manual de momento, he visto que alguien tuvo la misma idea de adaptar la biblioteca de Google para hacerla asíncrona.
El Push ID no cambia salvo que hayas hecho un unregister antes. Es decir, si yo hago 20 register seguidos sin hacer unregister entre ellos SIEMPRE te da el mismo Push ID. Al menos con todas las pruebas que he hecho.
mocelet
15/03/13, 20:52:43
El Push ID no cambia salvo que hayas hecho un unregister antes. Es decir, si yo hago 20 register seguidos sin hacer unregister entre ellos SIEMPRE te da el mismo Push ID. Al menos con todas las pruebas que he hecho.
Perfecto, dudas solucionadas entonces, ¡gracias! :D
kleiser
17/03/13, 21:28:53
Buenas!!
Quiero aprovechar este tema para no abrir otro ya que mi duda esta relacionada con el GCM y es que yo utilizo un macbook pro para programar y tambien estaba pensando en meterle GCM a alguna de mis app pero al leerme el tuto de el magnifico sgoliver he visto que utiliza visual studio y sql server (ambos de microsoft)...se les ocurre algun sustituto de ambos o tendre que utilizar el parallels o similar para simular un w7 en mi mac?si alguno de ustedes utiliza tambien un mac para programar que me ilumine si es tan amable con los programas que el usa para esto!!
Gracias a todos!!!Saludos
kriogeN
17/03/13, 23:26:00
Buenas!!
Quiero aprovechar este tema para no abrir otro ya que mi duda esta relacionada con el GCM y es que yo utilizo un macbook pro para programar y tambien estaba pensando en meterle GCM a alguna de mis app pero al leerme el tuto de el magnifico sgoliver he visto que utiliza visual studio y sql server (ambos de microsoft)...se les ocurre algun sustituto de ambos o tendre que utilizar el parallels o similar para simular un w7 en mi mac?si alguno de ustedes utiliza tambien un mac para programar que me ilumine si es tan amable con los programas que el usa para esto!!
Gracias a todos!!!Saludos
Si te refieres al servidor, como he dicho antes, nosotros usamos Symfony, que es un framework de PHP. Existen por ahí varios tutoriales de como hacer notificaciones Push con un simple PHP y XAMP.
Es decir, que puedes usarlo en cualquier SO, ya que para todos está disponible Apache y PHP. En tu caso puedes usar MAMP.
kleiser
18/03/13, 00:32:40
gracias KriogeN, estaba ojeando lo del MAMP pero he leído que es para hacer servidores locales....perdona mi ignorancia, soy nuevo en programación y en android asi que "me ahogo en un vaso de agua"!!con el MAMP creando el servidor, y siguiendo el tutorial de sgoliver para hacer la parte del cliente podré mandar una notificación de que he actualizado el texto (colgado como xml en google sites y enlazado con mi app)semanalmente para mantener a los usuarios de la app al dia de los cambios?? perdona si no me he explicado bien!
Muchísimas gracias por la ayuda que dais!!Un saludo
mocelet
18/03/13, 13:12:56
kleiser, los servicios en red e interacción con servicios de terceros no es precisamente "un vaso de agua". Para usar el GCM necesitas un servidor accesible permanentemente en internet para que la aplicación android envíe al servidor el identificador, que tendrás que guardar en una base de datos y luego consultar para generar las notificaciones. Es matar moscas a cañonazos.
Dado que no necesitas notificaciones personales, antes que meterse en el berenjenal de GCM haría que tu app de vez en cuando (una vez al día, una vez a la semana...) comprobara si el XML que tienes ha cambiado.
kleiser
18/03/13, 13:30:18
Muchas gracias por la respuesta mocelet!
Entonces tengo que cambiar el código para hacer que mi app compruebe cambios en el xml no? y de esa forma podre "generar una notificacion"?mi intencion es esa, que cuando haga cambios en el archivo xml llegue una notificacion general a todos los usuarios para asi mantenerles siempre activos con la app y al dia de los cambios!Podre encontrar en el tutorial de sgoliver que mi app compruebe esos cambios?es que en todo esto de servicios en red y eso estoy muuuy perdido!!
Gracias por la ayuda y disculpen mi novata ignorancia :-)
mocelet
18/03/13, 22:41:20
1) ¿Es necesario el permiso GET_ACCOUNTS? Hay sitios donde lo ponen como obligado (doc oficial) y otros donde no aparecen (sgoliver y otros tutoriales).
Después de recabar más info... definitivamente es un permiso que no tiene que ver nada con el GCM. En C2DM no se usaba, y en GCM tampoco.
La biblioteca cliente de GCM (el famoso GCMRegistrar, que viene con código fuente), tampoco comprueba que en el manifest esté ese permiso. El registro se hace llamando a un Intent y el resultado se recibe en un servicio, en ningún momento la app accede a ninguna cuenta, por lo que no precisa el permiso.
Así pues, no es necesario, de lo cual me alegro porque es un permiso que no me gusta incluir :)
vBulletin® v3.8.1, Copyright ©2000-2025, Jelsoft Enterprises Ltd.