As notificações push remotas exigem adicionar UIBackgroundModes em Info.plist?

104

Eu integrei notificações remotas por push, mas estou recebendo este aviso:

didReceiveRemoteNotification:fetchCompletionHandler:], mas você ainda precisa adicionar " remote-notification" à lista de UIBackgroundModes com suporte em seu Info.plist.

Minha versão do Xcode é 8.3.1. Eu realmente quero adicionar isso Info.plist. Eu segui alguns tutoriais também, mas eles também não mencionaram isso. O que devo realmente fazer?

user1960169
fonte

Respostas:

245

Sim, você deve habilitar Modos em segundo plano / notificações remotas para poder usar notificações remotas para atualizações em segundo plano.

A maneira mais fácil de fazer isso é por meio das configurações do projeto. Navegue até Alvos -> Seu aplicativo -> Recursos -> Modos de fundo e marque as notificações remotas . Isso ativará automaticamente as configurações necessárias.

Lista suspensa Modos de fundo em Configurações do projeto

Tamás Sengel
fonte
3
Já verifiquei esse campo, mas continuo recebendo o mesmo erro.
Anuj
Anuj, veja minha resposta abaixo
Joshua Cleetus
1
Eu não concordo com esta resposta. Você só deve ativar os modos em segundo plano -> Notificações remotas se estiver usando uma notificação remota para fazer uma atualização em segundo plano. Consulte os documentos aqui Configurando uma Notificação de Atualização em
Segundo
1
@jzeferino Obrigado pelo aviso, acrescentei alguns esclarecimentos à minha resposta. Observe que a pergunta original era sobre a application(_:didReceiveRemoteNotification:fetchCompletionHandler:)função, que é usada para lidar com a busca de dados.
Tamás Sengel
Isso é ótimo, mas responde à pergunta se você precisa do recurso para atualizações em segundo plano, o que é claro que você precisa. Publiquei uma resposta sobre se você precisa definir a capacidade de modos de fundo simplesmente para notificações push (spoiler, você não precisa).
mobob
30

Você também pode editar o info.plist necessário (Abrir como -> Código-fonte) e colar:

<dict>
<key>UIBackgroundModes</key>
    <array>
        <string>remote-notification</string>
    </array>
Aleksandr B.
fonte
7
Agora é adicionado automaticamente pelo Xcode ao verificar notificações remotas em modos de fundo
Vinoth Vino
1
Não para mim: Versão 11.4.1 (11E503a)
paiego
4

Na verdade, você não precisa adicionar UIBackgroundModes a .plist simplesmente para usar notificações remotas.

Sei que estou dividindo um pouco os herdeiros (a outra resposta é excelente, e talvez algo seja novo no iOS 11), mas a pergunta se refere a notificações push que precisam de atualizações em segundo plano, e não precisam.

A diferença aqui é que existem dois métodos diferentes que aceitam notificações no AppDelegate;

Este não exige que você use UIBackgroundModes:

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

O acima substitui o obsoleto a partir do iOS 11:

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

E este requer capacidade de modos de fundo:

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

O principal aqui é que o anterior (e aquele que foi substituído por ele) só é executado quando o aplicativo está em primeiro plano. O último será executado se o aplicativo estiver em primeiro plano OU em segundo plano. Veja as especificações para este nugget específico:

Use este método para processar notificações remotas de entrada para seu aplicativo. Ao contrário do método application (_: didReceiveRemoteNotification :), que é chamado apenas quando seu aplicativo está sendo executado em primeiro plano, o sistema chama esse método quando seu aplicativo está em execução em primeiro ou segundo plano.

Portanto, se você precisar de notificações push, decida se precisa executar em segundo plano - apenas se precisar de ambas, você deve implementar o método sugerido pelo aviso.

mobob
fonte
3

Aconteceu comigo mesmo depois de definir o modo de fundo de notificações remotas nas capacidades. O problema era que eu tinha três alvos, um para produção, um para qa e um para teste. Tive que definir notificações remotas em todos os três destinos e isso corrigiu o aviso.

Joshua Cleetus
fonte