iOS: ¿notifications PUSH como un "desencadenador" para el sondeo de web services?

Estoy empezando a aprender OBJ-C pero tengo una aplicación de meta final que estoy trabajando para build; esta aplicación será una aplicación maestra / detallada en el iPad que se requerirá para mantenerse actualizado con un service web en "time real". También necesitará enviar datos al DB de MySQL remoto cuando uno de los múltiples usuarios (en iPads separados) realice ciertas acciones dentro de la aplicación.

EDITAR: Como lxt ha aclarado tan útilmente: "" ¿Es apropiado usar las notifications push como una señal para sondear un service web? ", La respuesta es tipo de".

El ejemplo que he imaginado a los efectos de esta pregunta es un Widget Inventory Manager que tiene un deviseio "entrante" que fluye a la vista de la tabla y "contenedores de almacenamiento de deviseio" a los que los usuarios arrastrarán y soltarán el deviseio en la vista de detalle .

Al igual que:

introduzca la descripción de la imagen aquí

NOTA: Mi aplicación NO se exige que se mantenga actualizada cuando no está en primer plano. Puede dormir de forma feliz hasta que se lance de nuevo; En ese momento, tendría que actualizarse con los datos más recientes. Kyle ha proporcionado una respuesta para este aspecto específico del problema usando applicationWillEnterForeground:

Para lograr esto sin sobrecargar mi server de web services, he imaginado una solución que combina el sondeo de web services y las notifications PUSH para activar las encuestas cuando un usuario (iPad) realiza algún cambio en los datos. Entonces, el flujo sería así:

  1. Una encuesta "por defecto" del service web dispararía cada minuto, independientemente de las acciones que pueda realizar un usuario.

  2. Cuando un usuario arrastra un artículo de deviseio desde la vista de tabla y lo deja en una bandeja de almacenamiento que iniciaría una notificación de PUSH a cualquier otro iPad conectado a la misma count general y desencadenar una encuesta de service web para actualizar sus datos.

En resumen: cada vez que un usuario en el iPad "A" cambia cualquier cosa, se envía una notificación PUSH al iPad "B", iPad "C", etc. Cuando B, C, D, etc. reciben el PUSH, luego sondean el server para actualizar sus datos.

La alternativa a esto es hacer que cada iPad en la count dispare encuestas de service web cada 15 segundos; que me parece un ancho de banda muy costoso (y con frecuencia no daría lugar a cambios en los datos).

Mi pregunta es less de un "¿Cómo puedo …?" y más de un "¿Cómo debo …?". Me doy count de que StackOverflow puede encontrar esto un tanto "subjetivo", pero creo que esta es una pregunta muy valiosa teniendo en count que he pasado dos días investigando esta práctica específica (usando notifications PUSH para activar el sondeo de web services) y encontré exactamente cero artículos relevantes.

Gracias por tomarse el time para leer esto. Cualquier ayuda sería apreciada. El código de ejemplo y / o la información específica del marco / kit sería muy apreciada. Pero realmente en este momento solo necesito saber si esta es una buena idea o no.

Actualizado para iOS 7

Entonces, la esencia de su pregunta parece ser "¿es apropiado usar las notifications push como una señal para hacer una encuesta a un service web?", La respuesta es sí, con algunas cosas de las que tener en count. Antes de iOS 7, su aplicación debería haber estado en primer plano para que esto funcione. Ahora, puede usar Actualizar aplicación de background para activar su sondeo de service web en segundo plano después de recibir un post de inserción.

Los propios Apple usan notifications automáticas para desencadenar llamadas de service web: es como las pases en Passbook se actualizan de manera remota. Cuando hay disponibles pases actualizados, se envía una notificación push, que luego hace que iOS llame al service web apropiado enlazado en el pase para download la nueva carga útil.

Algunas cosas para recordar: la primera es que la notificación push no está garantizada (no necesariamente un problema), pero tampoco tiene garantías sobre cuándo será entregada. En la mayoría de los casos, espero que sea instantáneo, pero no siempre es así. Además, cualquier usuario que haya optado por recibir notifications push no obtendrá ningún beneficio de esta function.

Lo que está buscando no es un problema enormemente novedoso, y existen algunas soluciones existentes que podría usar en lugar de utilizar las notifications automáticas para activar las actualizaciones. Puede usar un sistema basado en socket (bastante complicado) o una encuesta larga HTTP (less complicada). También existen services de terceros que existen para lograr esto realmente fácilmente: uno de estos services es Pusher .

Una de las grandes ventajas de estas tres alternativas (tomas de stream, sondeos largos, services de terceros) es que, por lo general, son neutrales en la plataforma, y ​​puede utilizarlos con otros clientes con facilidad (a diferencia de APNS). Si fuera yo, utilizaría uno de estos enfoques a través de las notifications push, pero con la actualización de la aplicación en segundo plano en iOS 7 podría encontrar que push puede soportar todo lo que quieras hacer.

Solo mis dos centavos de todos modos, espero que te sea útil.

Recientemente tuvimos una discusión sobre esto para un proyecto. La respuesta que concluimos con: NO.

Razones:

  • Las notifications push no están garantizadas. Podrían llegar en 5 segundos, podrían llegar en 15 minutos, o nunca podrían llegar.
  • No se garantiza que los usuarios tengan una connection de datos activa, por lo que requieren algún tipo de lógica y un process de actualización a toda testing.
  • Falta de security al enviar datos confidenciales (identificaciones que podrían estar potencialmente asociadas con personas) a través de push.

También estudiamos algún tipo de connection de sockets, pero esto también tiene limitaciones, incluido el hecho de que la aplicación debe permanecer abierta durante la interacción y el mayor desgaste de la batería.

En definitiva, decidimos que esta funcionalidad era suficiente para que se activara con un clic. El intercambio no valió la pena. Sin embargo, esto no significa que no se pueda hacer, y en su situación particular puede ser la mejor manera. Recomendaría profundizar en el layout de su producto y determinar qué tan importante es esta característica para usted. Si es trivial, recomiendo NO utilizar notifications push.

ACTUALIZAR:

Otra opción posible es disparar su llamada de service web cada vez que el usuario vuelva a abrir la aplicación. Intente search en la aplicación WillEnterForeground y tal vez una solución similar a la que se encuentra aquí: applicationWillEnterForeground: reload data from ViewController .