Servicios push iOS: ¿es posible una notificación push invisible?

Estoy desarrollando una aplicación de iPhone que depende de los datos de una database en línea.

Para actualizar los datos en la aplicación, podría comprobar en un cierto intervalo de time si es necesaria una actualización, pero es mucho más genial si pudiera usar un service push que envía una notificación a la aplicación para informarle que es hora de una actualización.

No estoy hablando notifications push visibles aquí, solo una notificación push invisible para activar el método de actualización en mi aplicación.

¿Hay una forma estándar de hacer esto o podría usar los services de notificación push de Apple para este propósito?

Con otras palabras: ahora estoy usando pull para get actualizaciones, ¿hay alguna forma de hacer que el back-end de mi aplicación sepa que es hora de una actualización?

Edit: Y si es imposible, ¿cuál sería un buen intervalo de time para la actualización (0.03 kb si no hay actualizaciones)? ¿Es mucho para verificarlo cada 30 segundos?

Hay una documentation bien explicada en la Biblioteca en línea de Apple .

Con el service de notificación Push de Apple (APNS) puede get CUALQUIER combinación de:

  • Un post de alerta para mostrar al usuario
  • Un número para marcar el ícono de la aplicación con
  • Un sonido para jugar

Cuando digo algo me refiero a que no hay alerta, no se puede usar una placa ni sonido. Las notifications remotas están disponibles incluso si la aplicación está cerrada (pero al less una vez ejecutada, para registrarse en el service de notifications), iOS tiene la deuda de administrar el impulso y activar su aplicación.

Si quieres usar APNS necesitas

  • un server web (generará el push)
  • un CSR desde el server web
  • un certificate de Apple confiando en su server (esta es la razón de la CSR)
  • una aplicación de iOS con una ID de aplicación configurada para notifications

Todo lo relacionado con el CSR y la confianza en su server se detalla en el portal de aprovisionamiento de iOS, la sección "ID de la aplicación", la pestaña "Cómo". Pruebe este enlace .

En su server web debe estar alojado el proveedor de APNS que hará estas dos acciones:

  • Registre un token que identifique una installation concreta en un dispositivo iOS concreto. Este token se genera para el APNS de Apple y será enviado al proveedor por su aplicación. introduzca la descripción de la imagen aquí

  • Genera notifications push: se enviará desde tu proveedor a Apple APNS, un Apple APNS se enviará a tu aplicación (con una alerta y / o insignia y / o modo de silencio y / o sonido) introduzca la descripción de la imagen aquí

La notificación de APNS se enviará a su aplicación mediante el sistema de notificación remota.

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 

Puede consultar el Delegado de la aplicación Easy APNS

Como proveedor puede usar su propio desarrollador o puede usar / modificar a cualquiera que ya se pueda download como

  • APNS fácil
  • Java APNS
  • Javapns
  • etc

Entonces, la respuesta es SÍ, es posible. Usando esamples fáciles de APNS , la generación de inserción debe verse así:

 $apns->newMessage(1); $apns->addMessageCustom('acme2', array('bang', 'whiz')); $apns->queueMessage(); 

Sí, es posible con iOS 7+

Puede recibir notifications push de "background" si anula este método de UIApplicationDelegate: application (_: didReceiveRemoteNotification: fetchCompletionHandler 🙂

 func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { // do what you need ie download fresh content (max. 30 seconds) completionHandler(UIBackgroundFetchResult.NoData) } 

Como dice la documentation de este método de método:

Use este método para procesar notifications remotas entrantes para su aplicación. A diferencia de la aplicación: didReceiveRemoteNotification: método, que se llama solo cuando su aplicación se ejecuta en primer plano, el sistema llama a este método cuando su aplicación se ejecuta en primer plano o en segundo plano. Además, si habilitaste el modo de background de las notifications remotas, el sistema iniciará tu aplicación (o la despierta del estado suspendido) y la pondrá en estado de background cuando llegue una notificación remota.

No olvide activar "Búsqueda de background" y "Notificaciones remotas" en sus modos de background.

introduzca la descripción de la imagen aquí

Más información sobre la ejecución de background aquí.

No puede enviar una notificación push invisible mientras la aplicación está en segundo plano. La única forma es actualizar los datos cuando la aplicación llega al primer plano.

Verificará a un intervalo de time determinado si es necesaria una actualización o realiza una connection de extracción con el server.

Puedes recibir notifications mientras estás en primer plano, pero el server no hará ninguna diferencia si estás en segundo plano o en primer plano, a less que envíes una información al server que estás en primer plano.

Es por eso que en su caso, tal como se describe en el post anterior, es mejor consultar con el server cuando llegó de background o cuando se inicia la aplicación si hay alguna carga.

La otra opción es enviar una notificación visible para que el usuario inicie la aplicación y luego se realizará la actualización (como se describe en el párrafo anterior).

Utilice los methods de delegado applicationDidRecieveRemoteNotification para indicar a la aplicación que se registre con el service de actualización. O puede hacer que el sondeo de la aplicación sea el service de actualización durante la aplicación. En el caso de que no desee configurar las notifications push.

No creo que tu sea el enfoque correcto. Considere todas las cosas que va a build para una tarea simple: 1) server para push 2) registrarse para la notificación 3) ir en segundo plano y reanudar (el grande y complicado es el server para notifications push)

y de todos modos, cuando recibió un post, debe pedir los datos … no hay ahorros que comparen preguntar directamente.

Por lo tanto, una solución limpia puede ser: 1) preguntar al server usando el HTTP normal (usando la request asíncrona NSURL …) por ejemplo: http: // …… & lastupdate = '2012: 05: 01 18 00' pasando el la date de la última actualización obtuvimos una descarga exitosa (también puede usar una timestamp de unicx …)

2) el server comparará esa date con su última date de actualización interna: si tiene una date más nueva, responderá con XML o plist (prefiero plist …)

3) la aplicación descarga nuevos datos y actualiza la date / hora.

4) si no hay datos, la respuesta es simplemente una cadena vacía o, por ejemplo, la misma date que enviamos.

Respuesta corta a su primera pregunta: debe hacer una encuesta .

Por qué: cuando su aplicación se encuentra en segundo plano, no puede saber ninguna notificación push, a less que exista una alerta y el usuario click View o Launch , lo que no está garantizado (y tampoco desea la alerta).

También puede evitar utilizar APNS (si es solo para este propósito), debido a la sobrecarga adicional de configurar un server con certificates de Apple y todo ese jazz.

Para responder a su segunda pregunta: la frecuencia con la que desea que sus actualizaciones realmente dependan de lo que hace su aplicación. Por ejemplo, si está mostrando valores "Existencias", puede actualizar los datos cada pocos segundos. Para el clima, puede ser unas pocas horas. Para otros, puede ser días o incluso más. Depende de cuán importantes sean las actualizaciones para el usuario.