Yo soy la activación de un fondo búsqueda mediante el uso de la content-available bandera en una notificación de inserción. Tengo el fetch y remote-notification UIBackgroundModes habilitado.

Aquí es la aplicación que estoy utilizando en mi AppDelegate.m:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    NSLog(@"Remote Notification Recieved");
    UILocalNotification *notification = [[UILocalNotification alloc] init];
    notification.alertBody =  @"Looks like i got a notification - fetch thingy";
    [application presentLocalNotificationNow:notification];
    completionHandler(UIBackgroundFetchResultNewData);

}

Cuando la aplicación se está ejecutando en el fondo, funciona bien. (La recepción de la notificación y la aplicación activa el «mira como me llegó una notificación de» notificación local, como el código anterior debe hacer).

Sin embargo, cuando la aplicación no se está ejecutando y un empuje de recepción de la notificación con la content-available bandera, la aplicación no se inicia y la didRecieveRemoteNotification delegado método nunca es llamado.

La WWDC de Vídeo Qué hay de Nuevo Con la Multitarea (#204 de la WWDC 2013) muestra esto: Va a iOS lanzamiento de mi app en segundo plano si que fue forzado a salir por el usuario?

Dice que la aplicación es «lanzado en el fondo», cuando una notificación push es recibido con la content-available bandera.

¿Por qué es que mi aplicación no se inicia en el fondo?

Así que la pregunta real es:

Va a iOS realizar tareas en segundo plano después de que el usuario tiene la fuerza-salir de la aplicación?

¿Cómo está la comprobación de si la aplicación se inicia en el fondo?
I registro de un montón de mierda en - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
¿Cómo está el registro, sólo NSLog? Usted tendrá que configurar el Lanzamiento de un manual en la aplicación de configuración del esquema (ver respuesta)
véase el comentario en respuesta
Djd obtener una respuesta a su informe de errores? No he llegado en torno a la presentación de mi propio informe de error.

OriginalEl autor Santa Claus | 2013-09-28

6 Comentarios

  1. 207

    UPDATE2:

    Que puede conseguir esto utilizando las nuevas PushKit marco, que se introdujo en iOS 8. Aunque PushKit se utiliza para VoIP. Por lo que su uso debe ser para VoIP relacionado de lo contrario existe el riesgo de rechazo de la aplicación. (Ver esta respuesta).


    UDPDATE1:

    La documentación ha sido aclarado por iOS8. La documentación se puede leer aquí. Aquí es un extracto relevante:

    Utilizar este método para procesar las remotas las notificaciones de la aplicación.
    A diferencia de la application:didReceiveRemoteNotification: método, que es
    llama sólo cuando su aplicación se está ejecutando en primer plano, el sistema de
    llama a este método cuando la aplicación se está ejecutando en primer plano o
    de fondo. Además, si se habilita el control remoto de notificaciones
    modo de fondo, el sistema inicia la aplicación (o se sale de la
    estado suspendido) y la pone en el fondo del estado cuando un empuje
    la notificación llega. Sin embargo, el sistema automáticamente no
    inicie la aplicación, si el usuario tiene la fuerza de dejar de fumar. En esa situación, la
    el usuario debe relanzar su aplicación o reiniciar el dispositivo antes de que el sistema
    los intentos de iniciar la aplicación automáticamente de nuevo.


    Aunque este no era claro por la WWDC de vídeo, una búsqueda rápida en los foros de desarrolladores convertido a este:

    https://devforums.apple.com/message/873265#873265 (es necesario registrarse)

    También hay que tener en cuenta que si usted matar a su aplicación desde el app switcher
    (es decir, deslizar hacia arriba para matar la app), a continuación, el sistema operativo nunca va a relanzar la
    aplicación independientemente de la notificación de inserción o de fondo búsqueda. En este caso
    el usuario tiene que reiniciar manualmente la aplicación una vez y, a continuación, a partir de que
    punto en adelante las actividades en segundo plano se invoca. –pmarcos

    Que el post fue por un empleado de Apple así que creo que puedo confiar en que esta información es correcta.

    Por lo que se ve cuando la aplicación está muerto desde la app switcher (por deslizar hacia arriba), la aplicación nunca se puso en marcha, incluso para un horario de fondo recupera.

    Para mí la adición de la acción en «didFinishLaunchingWithOptions» a la hora de lanzar las opciones son no nulas hizo el trabajo. Tengo el mismo método aquí como en «didreceiveRemoteNotification»
    que interesante. El problema era que la aplicación no se inicia cuando la aplicación ha sido asesinado en el app switcher.
    La aplicación no necesita ser demostrado en el app switcher si un silencio push es recibido. Podría ser lanzado en el fondo sin necesidad de añadir a la app switcher, y que se les permita ejecutar y «hacer lo suyo» y, a continuación, salir. Las aplicaciones que mantenerse activo demasiado largo sería asesinado de la misma manera como ya lo están.
    La solución es que esta es la intención de comportamiento, y no se puede hacer nada al respecto.
    Uh, las notificaciones push no se ven afectados. Es solamente hacer las tareas en segundo plano que no funcionan después de que ha sido la fuerza de cierre.

    OriginalEl autor Santa Claus

  2. 67

    Usted puede cambiar su destino de la configuración de inicio en «Administrar» Régimen para Wait for <app>.app to be launched manually, que permite depurar por establecer un punto de interrupción en application: didReceiveRemoteNotification: fetchCompletionHandler: y el envío de la notificación de inserción para activar el fondo de su lanzamiento.

    No estoy seguro de que va a resolver el problema, pero puede ayudar a la depuración por ahora.

    Va a iOS lanzamiento de mi app en segundo plano si que fue forzado a salir por el usuario?

    así que esto ha ayudado, pero el problema persiste
    Extraño. Supongo que usted ha más que comprobado todos los flash se establecen en su plist, etc.?
    También, sé que tengo todo lo establece la derecha, porque cuando la aplicación está en el fondo, todo funciona a la perfección. Sólo cuando la aplicación no se está ejecutando en todo lo que no.
    Me pregunto si una notificación de inserción lanzamiento de activación del sistema determinado. Por ejemplo, si iOS determina que no es un buen momento para lanzar la aplicación ahora mismo se podría aplazar hasta más tarde. Tal vez probar y cierre de todos los/fondo de apps y ver qué pasa? Creo que en este punto :-/
    sólo probé. No pasó nada, como de costumbre. Yo podría preguntar en dev foros.

    OriginalEl autor runmad

  3. 33

    La respuesta es SÍ, pero no debería utilizar ‘Fondo búsqueda’ o ‘notificación Remota’. PushKit es la respuesta que deseo.

    En resumen, PushKit, el nuevo marco en ios 8, el nuevo mecanismo de notificaciones de inserción que pueden silencio lanzamiento de tu app en segundo plano sin necesidad de alerta visual símbolo, incluso, su aplicación fue asesinado, deslice rápidamente el dedo desde la app switcher, sorprendentemente usted incluso no se puede ver desde la app switcher.

    PushKit de referencia de Apple:

    La PushKit marco proporciona las clases para sus aplicaciones de iOS para
    recibir empuja desde servidores remotos. Empuja puede ser de dos tipos:
    estándar y VoIP. Estándar empuja puede entregar notificaciones así como
    en versiones anteriores de iOS. VoIP empuja a proporcionar más
    funcionalidad en la parte superior de la estándar de empuje que se necesita para VoIP apps
    para llevar a cabo en la demanda de procesamiento de la inserción antes de mostrar un
    notificación al usuario.

    Para implementar esta nueva función, consulte este tutorial: https://zeropush.com/guide/guide-to-pushkit-and-voip – lo he probado en mi dispositivo y funciona como se esperaba.

    Mira como me tienes que configurar la aplicación como el uso de VoIP. Si la aplicación no está en realidad una VoIP app, no sólo ha sido rechazada durante el proceso de revisión?
    Por desgracia, a sabiendas de que el proceso de validación por parte de Apple, sería lógico que la solicitud fue rechazada.
    Se utiliza para VoIP. Si no se utiliza VoIP para el usuario, esto aumentará en gran medida el riesgo de revisión de rechazo.
    Se ve como los grandes proveedores de utilizar este recurso como una excusa para ejecutar cosas en el fondo y Apple se está ejecutando un ojo ciego. Convertirse en Android una de las características en el tiempo.
    PushKit está reservado para VoIP, Archivo de Proveedores, y de Complicaciones relojeras. No está disponible para los casos de uso en esta respuesta se describe.

    OriginalEl autor superZhen

  4. 14

    De hecho si usted necesita la prueba de fondo búsqueda que usted necesita para activar una opción en el esquema:

    Va a iOS lanzamiento de mi app en segundo plano si que fue forzado a salir por el usuario?

    Otra manera, cómo se puede probar que:
    Va a iOS lanzamiento de mi app en segundo plano si que fue forzado a salir por el usuario?

    Aquí está lleno de información acerca de esta nueva característica:
    http://www.objc.io/issue-5/multitasking.html

    OriginalEl autor Danil

  5. 2

    He estado probando diferentes variantes de este durante días, y pensé por un día tuve que volver a iniciar la aplicación en segundo plano, incluso cuando el usuario pase a matar, pero no, no puedo repetir ese comportamiento.

    Es lamentable que el comportamiento es muy diferente a la de antes. En iOS 6, si usted mató a la aplicación de la manipulación de los iconos, podría todavía obtener re-despertado en SLC desencadenantes. Ahora, si usted matar a pasar, eso no pasa.

    Es un comportamiento diferente, y el usuario, quien continuaría a obtener información útil de nuestra aplicación, si se había matado en iOS 6, ahora no.

    Tenemos que empujar a nuestros usuarios a volver a abrir la app ahora si que han golpeado a matar y todavía están esperando algunos de los comportamiento de las notificaciones que se utilizó para dar a ellos. Estoy preocupado de que esto no sea evidente para los usuarios cuando se pase de una aplicación de distancia. Puede que, después de todo, ser, básicamente, la limpieza o el deseo de reorganizar las aplicaciones que se muestran minimizado.

    Que es exactamente lo que hicimos (applicationWillTerminate), pero no creo que se le daba a la notificación durante la memoria de purga, al menos no en iOS 7. Noté que mostró la notificación de la derecha antes de un reinicio para una actualización del sistema operativo, pero eso es tan rara que no parece tan malo.
    «En iOS 6, si usted mató a la aplicación de la manipulación de los iconos, podría todavía obtener re-despertado en SLC desencadenantes. Ahora, si usted matar a pasar, que eso no suceda.» Esto hace ahora de casualidad, fue una regresión temporal, en una primera versión de iOS 7.

    OriginalEl autor snarshad

  6. 1

    Esto podría ayudarle a

    En la mayoría de los casos, el sistema no relanzamiento de aplicaciones después de que ellos son la fuerza
    dejar de fumar por el usuario. Una excepción es la ubicación de las aplicaciones, que en iOS 8 y
    más tarde se relanzado después de ser la fuerza de cierre por el usuario. En otras
    los casos, sin embargo, el usuario debe iniciar la aplicación de forma explícita o reiniciar el
    dispositivo antes de que la aplicación puede ser lanzado automáticamente en el
    el fondo por el sistema. Cuando la protección de contraseña está habilitada en el
    dispositivo, el sistema no se inicia una aplicación en segundo plano antes de la
    primer usuario desbloquea el dispositivo.

    Fuente:
    https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

    OriginalEl autor Stanislav S.

Dejar respuesta

Please enter your comment!
Please enter your name here