¿Las notificaciones push remotas requieren agregar UIBackgroundModes en Info.plist?

104

He integrado notificaciones push remotas, pero recibo esta advertencia:

didReceiveRemoteNotification:fetchCompletionHandler:], pero aún necesita agregar " remote-notification" a la lista de sus correos UIBackgroundModeelectrónicos compatibles en su Info.plist.

Mi versión de Xcode es 8.3.1. Realmente quiero agregar esto a Info.plist. También he seguido algunos tutoriales, pero tampoco mencionaron esto. ¿Qué debo hacer realmente?

user1960169
fuente

Respuestas:

245

Sí, debe habilitar los modos en segundo plano / notificaciones remotas para poder usar notificaciones remotas para actualizaciones en segundo plano.

La forma más sencilla de hacerlo es a través de la configuración del proyecto. Vaya a Objetivos -> Su aplicación -> Capacidades -> Modos de fondo y verifique Notificaciones remotas . Esto habilitará automáticamente la configuración requerida.

Lista desplegable de modos de fondo en la configuración del proyecto

Tamás Sengel
fuente
3
Ya he comprobado ese campo pero sigo recibiendo el mismo error.
Anuj
Anuj vea mi respuesta a continuación
Joshua Cleetus
1
No estoy de acuerdo con esta respuesta. Solo debe habilitar los modos en segundo plano -> Notificaciones remotas si está utilizando una notificación remota para realizar una actualización en segundo plano. Consulte los documentos aquí Configuración de una notificación de actualización en segundo plano
jzeferino
1
@jzeferino Gracias por el aviso, agregué algunas aclaraciones a mi respuesta. Tenga en cuenta que la pregunta original era sobre la application(_:didReceiveRemoteNotification:fetchCompletionHandler:)función, que se utiliza para manejar la búsqueda de datos.
Tamás Sengel
Esto es genial, pero responde a la pregunta de si necesita la capacidad para actualizaciones en segundo plano, lo que por supuesto es necesario. Publiqué una respuesta sobre si necesita configurar la capacidad de los modos de fondo simplemente para las notificaciones automáticas (spoiler, no lo hace).
mobob
30

También puede editar el info.plist necesario (Abrir como -> Código fuente) y pegar:

<dict>
<key>UIBackgroundModes</key>
    <array>
        <string>remote-notification</string>
    </array>
Aleksandr B.
fuente
7
Ahora Xcode lo agrega automáticamente al verificar las notificaciones remotas en los modos de fondo
Vinoth Vino
1
No para mí: Versión 11.4.1 (11E503a)
paiego
4

De hecho, no es necesario que agregue UIBackgroundModes a .plist simplemente para usar notificaciones remotas.

Sé que estoy dividiendo un poco a los herederos (la otra respuesta es en su mayoría excelente, y tal vez algo sea nuevo a partir de iOS 11), pero la pregunta se refiere a notificaciones automáticas que requieren actualizaciones en segundo plano, y no es así.

La distinción aquí es que hay dos métodos diferentes que aceptan notificaciones en AppDelegate;

Este no requiere que uses UIBackgroundModes:

optional func userNotificationCenter(_ center: UNUserNotificationCenter, 
                         willPresent notification: UNNotification, 
               withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)

Lo anterior reemplaza el obsoleto a partir de iOS 11:

optional func application(_ application: UIApplication, 
didReceiveRemoteNotification userInfo: [AnyHashable : Any])

Y este requiere capacidad de modos de fondo:

optional func application(_ application: UIApplication, 
didReceiveRemoteNotification userInfo: [AnyHashable : Any], 
   fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)

La clave aquí es que la primera (y la obsoleta que reemplazó) solo se ejecuta cuando la aplicación está en primer plano. Este último se ejecutará si la aplicación está en primer plano O en segundo plano. Consulte las especificaciones de este nugget específico:

Utilice este método para procesar las notificaciones remotas entrantes para su aplicación. A diferencia del método application (_: didReceiveRemoteNotification :), 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.

Por lo tanto, si necesita notificaciones push, decida si necesita ejecutar en segundo plano; solo si necesita ambas, debe implementar el método sugerido por la advertencia.

mobob
fuente
3

Me pasó incluso después de configurar el modo de fondo de notificaciones remotas en las capacidades. El problema era que tenía tres objetivos, uno para la producción, uno para el control de calidad y otro para la puesta en escena. Tuve que configurar notificaciones remotas en los tres objetivos y eso solucionó la advertencia.

Joshua Cleetus
fuente