Le notifiche push remote richiedono l'aggiunta di UIBackgroundModes in Info.plist?


104

Ho integrato le notifiche push remote, ma ricevo questo avviso:

didReceiveRemoteNotification:fetchCompletionHandler:], ma è comunque necessario aggiungere " remote-notification" all'elenco dei messaggi supportati UIBackgroundModenel file Info.plist.

La mia versione di Xcode è 8.3.1. Voglio davvero aggiungere questo a Info.plist. Ho seguito anche alcuni tutorial ma non hanno nemmeno menzionato questo. Cosa dovrei fare veramente?

Risposte:


245

Sì, è necessario abilitare Modalità in background / Notifiche remote per poter utilizzare le notifiche remote per gli aggiornamenti in background.

Il modo più semplice per farlo è tramite le impostazioni del progetto. Vai su Target -> La tua app -> Funzionalità -> Modalità in background e controlla le notifiche remote . Ciò abiliterà automaticamente le impostazioni richieste.

Elenco a discesa Modalità in background in Impostazioni progetto


3
Ho già controllato quel campo ma ricevo ancora lo stesso errore.
Anuj

Anuj vedi la mia risposta di seguito
Joshua Cleetus

1
Non sono d'accordo con questa risposta. È necessario abilitare solo le modalità in background -> Notifiche remote se si utilizza una notifica remota per eseguire un aggiornamento in background. Fare riferimento ai documenti qui Configurazione di una notifica di aggiornamento in background
jzeferino

1
@jzeferino Grazie per l'avviso, ho aggiunto qualche chiarimento alla mia risposta. Si noti che la domanda originale riguardava la application(_:didReceiveRemoteNotification:fetchCompletionHandler:)funzione, che viene utilizzata per gestire il recupero dei dati.
Tamás Sengel

Questo è fantastico, ma risponde alla domanda se hai bisogno della funzionalità per gli aggiornamenti in background, cosa che ovviamente fai. Ho pubblicato una risposta sulla necessità di impostare la funzionalità delle modalità in background semplicemente per le notifiche push (spoiler, non lo fai).
mobob

30

Puoi anche modificare il file info.plist necessario (Apri come -> Codice sorgente) e incollare:

<dict>
<key>UIBackgroundModes</key>
    <array>
        <string>remote-notification</string>
    </array>

7
Ora viene aggiunto automaticamente da Xcode durante il controllo delle notifiche remote in modalità in background
Vinoth Vino

1
Non per me: versione 11.4.1 (11E503a)
paiego

4

In effetti, non è necessario aggiungere UIBackgroundModes a .plist semplicemente per utilizzare le notifiche remote.

So che sto dividendo un po 'gli eredi (l'altra risposta è per lo più ottima, e forse qualcosa è nuovo di iOS 11), ma la domanda si riferisce alle notifiche push che richiedono aggiornamenti in background, e non lo fanno.

La differenza qui è che ci sono due diversi metodi che accettano le notifiche su AppDelegate;

Questo non richiede l'utilizzo di UIBackgroundModes:

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

Quanto sopra sostituisce il deprecato a partire da iOS 11:

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

E questo richiede la capacità delle modalità in background:

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

La cosa fondamentale qui, è che il primo (e quello deprecato che ha sostituito) viene eseguito solo quando l'app è in primo piano. Quest'ultimo verrà eseguito se l'app è in primo piano O in background. Vedi le specifiche per questo specifico nugget:

Usa questo metodo per elaborare le notifiche remote in arrivo per la tua app. A differenza del metodo application (_: didReceiveRemoteNotification :), che viene chiamato solo quando l'app è in esecuzione in primo piano, il sistema chiama questo metodo quando l'app è in esecuzione in primo piano o in background.

Quindi, se hai bisogno di notifiche push, decidi se è necessario eseguire in background - solo se hai bisogno di entrambi dovresti implementare il metodo suggerito dall'avviso.


3

A me è successo anche dopo aver impostato la modalità in background delle notifiche remote nelle funzionalità. Il problema era che avevo tre obiettivi, uno per la produzione, uno per qa e uno per la messa in scena. Ho dovuto impostare notifiche remote in tutti e tre i target e questo ha risolto l'avviso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.