2012-06-21 19 views
5

Estoy considerando utilizar una conexión persistente a un "servicio en la nube" desde una aplicación de Android. Esto funcionaría todo el tiempo en un servicio en segundo plano (o algo así).¿La mejor práctica para las conexiones móviles persistentes en Android?

Estoy pensando en usar soquetes web o XMPP para mantener la conexión, básicamente buscando una conexión ligera que no drene la batería. I desea poder enviar notificaciones en tiempo real a esta conexión, por lo que no se desea un sondeo periódico. Conozco C2DM y otras soluciones comerciales, pero estoy buscando rodar mi propio. Es por eso que lo que estoy investigando es una toma de red (u otra conexión liviana). Entonces, si voy por esta ruta, ¿cuáles son algunas de las mejores prácticas que debería conocer?

estoy pensando en cosas como:

  1. cómo evitar que la batería se agote,
  2. cómo manejar los cambios de dirección IP, etc.?
+1

Merece la pena leer los documentos de Android: http://developer.android.com/training/efficient-downloads/index.html – pawelzieba

+4

Debe dividir esto en preguntas separadas para Android e iOS: las dos son completamente diferentes (en iOS no puede tener simplemente un servicio en segundo plano). – Gruntcakes

+0

@MartinH Pregunta actualizada solo para Android. –

Respuesta

10

Puede que esta no sea la respuesta que está buscando, pero creo que es posible que desee reconsiderar su arquitectura.

cosas que puede esperar de una plataforma móvil

  • Su dirección IP para cambiar aleatoriamente
  • Su conexión a internet física que se pierde al azar
  • El sistema operativo para decidir su no hacer nada útil y asesinato su proceso de
  • El tipo de conexión cambiando al azar (de WIFI a 4G a 3G a borde) y por lo tanto su IP para cambiar

Básicamente, su aplicación debe ser capaz de manejar una pérdida de conexión, porque es casi seguro que suceda.

Dicho esto, es totalmente factible dependiendo de su definición de tiempo real. Si está dispuesto a verificar continuamente que todavía hay una conexión viable, puede mantener los retrasos hasta el límite de minutos. Pero esto consumirá la batería y no hay mucho que pueda hacer al respecto.

+4

Repensar la arquitectura no es una mala respuesta :-) Este es el objetivo de publicar la pregunta, simplemente tratando de investigar la idea con los demás. Si es solo una mala idea, es una excelente respuesta. Gracias. Sin embargo, aún estoy interesado en las mejores prácticas, si se lo hiciera de todos modos. C2DM lo hace, entonces la pregunta es: ¿cómo lo hacen y cuáles son sus mejores prácticas? Los comentarios anteriores son cosas útiles para tener en cuenta. –

1

Algunas cosas simplemente no van bien juntas. Eso es "notificaciones push en tiempo real" y "evitar el drenaje de la batería". Seguro que tienes que hacer concesiones aquí.

Solo puedo recomendar probar algunas aplicaciones de Android que usan XMPP para tener una idea de cómo manejan las conexiones persistentes, los cambios de dirección IP y el consumo de batería. Si son de código abierto, también puedes ver el código y aprender de él. Yaxim, Project MAXS y Beem por nombrar algunos. Tal vez deberías echar un vistazo a XEP-0286: XMPP on Mobile Devices

Dicho esto, ¿estás seguro de que quieres reinventar la rueda cuando Google te ofrece C2DM? Que está optimizado para este caso de uso. Creo que tiene un poco de retraso, por lo que no es en "tiempo real". Pero, de nuevo, o terminará con una solución que intenta establecer una conexión persistente y agota la batería, o tendrá que vivir con algún tipo de retraso (~ 0-30 min).

+0

Excelente enlace sobre XMPP en dispositivos móviles. Algunos buenos patrones de diseño descritos en ese documento. Cosas como la compresión, y si tiene que enviar, envíe todo lo que tenga, ya que el nivel de potencia aumentará en ese punto de todos modos, etc. –

+3

La ÚNICA razón por la que estoy buscando alternativas al C2DM de Google es porque C2DM requiere que el usuario tener una cuenta de Google en el dispositivo. Estoy diseñando una función de inserción que será productizada y vendida a los bancos. Tener que explicarles que sus usuarios necesitarán cuentas de Google será una conversación algo incómoda. –

+1

Sé que esta es una vieja pregunta, pero las reglas para esto han cambiado un poco para el interruptor GCM. Los dispositivos más nuevos ya no necesitan una cuenta de Google. "Utiliza una conexión existente para los servicios de Google. Para dispositivos pre-3.0, esto requiere que los usuarios configuren su cuenta de Google en sus dispositivos móviles. Una cuenta de Google no es un requisito en dispositivos con Android 4.0.4 o superior". - http://developer.android.com/google/gcm/gcm.html –

Cuestiones relacionadas