modes app ios background health-kit hkobserverquery

ios - app - request in background swift



Uso adecuado de HKObserverQuery''s background update completionHandler (0)

HKObserverQuery tiene el siguiente método que admite recibir actualizaciones en segundo plano:

- initWithSampleType:predicate:updateHandler:

El updateHandler tiene un completionHandler que tiene la siguiente documentation :

Este bloque se pasa al controlador de actualización. Debe llamar a este bloque tan pronto como haya terminado de procesar los datos entrantes. Llamar a este bloque le dice a HealthKit que ha recibido con éxito los datos de fondo. Si no llama a este bloque, HealthKit continúa intentando iniciar su aplicación utilizando un algoritmo de retroceso. Si su aplicación no responde tres veces, HealthKit asume que su aplicación no puede recibir datos y deja de enviarle actualizaciones en segundo plano.

De mirar otras publicaciones, parece que hay mucha confusión en torno a este controlador. A continuación hay algunas preguntas que tengo sobre esto:

  • ¿Cuándo debería llamarse el manejador? Si se llama demasiado tarde, entonces HK podría pensar que la aplicación nunca recibió la actualización de la consulta, lo que provocó que golpeara el algoritmo de retroceso de 3 strikes de la actualización de fondo. La documentación indica que se debe llamar después de manejar otras consultas. Dependiendo de cuánto tiempo llevaría ejecutar esas consultas, parece que podría acercarse peligrosamente a las huelgas de actualización en segundo plano.
  • ¿Por qué se necesita esto? ¿No debería el sistema saber que la aplicación se ha iniciado y ha recibido la actualización de fondo? Cuando se usa CoreBluetooth en segundo plano, simplemente activa tu aplicación en segundo plano durante 10 segundos. No es necesario llamar a ningún controlador o lidiar con la actualización de fondo 3-strikes.
  • Si llegas a la actualización de fondo 3-strikes y HK deja de enviar actualizaciones, ¿es permanente? ¿Alguna vez HK comienza a enviar las actualizaciones de fondo? ¿Qué pasa si hay un error que impidió que se llame al controlador y ahora lo ha solucionado? ¿La aplicación está atascada y nunca recibe las actualizaciones? ¿O se reiniciará cuando la aplicación se reinicie o se actualice?
  • ¿HK mantiene su aplicación funcionando en segundo plano hasta que se llama al controlador? ¿Es eso parte de su propósito o solo un efecto secundario? Si es parte de su propósito, ¿por cuánto tiempo podemos correr antes de necesitar detenernos (y alcanzar el primer golpe de actualización de fondo)?