Müssen Remote-Push-Benachrichtigungen UIBackgroundModes in Info.plist hinzufügen?

104

Ich habe Remote-Push-Benachrichtigungen integriert, erhalte jedoch folgende Warnung:

didReceiveRemoteNotification:fetchCompletionHandler:], aber Sie müssen immer noch " remote-notification" zur Liste Ihrer unterstützten UIBackgroundModes in Ihrem hinzufügen Info.plist.

Meine Xcode-Version ist 8.3.1. Ich möchte das wirklich hinzufügen Info.plist. Ich habe auch einige Tutorials befolgt, aber sie haben dies auch nicht erwähnt. Was soll ich wirklich tun?

user1960169
quelle

Antworten:

245

Ja, Sie sollten Hintergrundmodi / Remote-Benachrichtigungen aktivieren, um Remote-Benachrichtigungen für Hintergrundaktualisierungen verwenden zu können.

Der einfachste Weg, dies zu tun, ist über die Projekteinstellungen. Navigieren Sie zu Ziele -> Ihre App -> Funktionen -> Hintergrundmodi und aktivieren Sie Remote-Benachrichtigungen . Dadurch werden die erforderlichen Einstellungen automatisch aktiviert.

Dropdown-Liste Hintergrundmodi in den Projekteinstellungen

Tamás Sengel
quelle
3
Ich habe dieses Feld bereits überprüft, erhalte aber immer noch den gleichen Fehler.
Anuj
Anuj siehe meine Antwort unten
Joshua Cleetus
1
Ich stimme dieser Antwort nicht zu. Sie sollten Hintergrundmodi -> Remote-Benachrichtigungen nur aktivieren, wenn Sie eine Remote-Benachrichtigung verwenden, um eine Hintergrundaktualisierung durchzuführen. Bitte
lesen
1
@jzeferino Danke für den Hinweis, ich habe meiner Antwort einige Klarstellungen hinzugefügt. Beachten Sie, dass sich die ursprüngliche Frage auf die application(_:didReceiveRemoteNotification:fetchCompletionHandler:)Funktion bezog, die zum Behandeln des Datenabrufs verwendet wird.
Tamás Sengel
Das ist großartig, beantwortet aber die Frage, ob Sie die Möglichkeit für Hintergrundaktualisierungen benötigen, was Sie natürlich tun. Ich habe eine Antwort gepostet, ob Sie die Hintergrundmodi-Funktion nur für Push-Benachrichtigungen einstellen müssen (Spoiler, das tun Sie nicht).
Mobob
30

Sie können auch die benötigte info.plist (Öffnen als -> Quellcode) bearbeiten und einfügen:

<dict>
<key>UIBackgroundModes</key>
    <array>
        <string>remote-notification</string>
    </array>
Aleksandr B.
quelle
7
Es wird jetzt automatisch von Xcode hinzugefügt, wenn Remote-Benachrichtigungen in Hintergrundmodi überprüft werden
Vinoth Vino
Nicht für mich: Version 11.4.1 (11E503a)
paiego
4

Tatsächlich müssen Sie UIBackgroundModes nicht zu .plist hinzufügen, um Remote-Benachrichtigungen zu verwenden.

Ich weiß, dass ich Erben ein wenig aufspalte (die andere Antwort ist meistens großartig, und vielleicht ist ab iOS 11 etwas neu), aber die Frage bezieht sich auf Push-Benachrichtigungen, die Hintergrundaktualisierungen erfordern, und das tun sie nicht.

Der Unterschied besteht darin, dass es zwei verschiedene Methoden gibt, die Benachrichtigungen im AppDelegate akzeptieren.

Für diesen Fall müssen Sie UIBackgroundModes nicht verwenden:

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

Das Obige ersetzt das ab iOS 11 veraltete:

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

Und dieser erfordert Hintergrundmodi:

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

Das Wichtigste dabei ist, dass die erstere (und die veraltete, die sie ersetzt hat) nur ausgeführt wird, wenn sich die App im Vordergrund befindet. Letzteres wird ausgeführt, wenn sich die App im Vordergrund ODER im Hintergrund befindet. Siehe die Spezifikation für dieses spezielle Nugget:

Verwenden Sie diese Methode, um eingehende Remote-Benachrichtigungen für Ihre App zu verarbeiten. Im Gegensatz zur Anwendungsmethode (_: didReceiveRemoteNotification :), die nur aufgerufen wird, wenn Ihre App im Vordergrund ausgeführt wird, ruft das System diese Methode auf, wenn Ihre App im Vordergrund oder Hintergrund ausgeführt wird.

Wenn Sie Push-Benachrichtigungen benötigen, entscheiden Sie daher, ob Sie im Hintergrund ausgeführt werden müssen. Nur wenn Sie beide benötigen, sollten Sie die in der Warnung vorgeschlagene Methode implementieren.

Mobob
quelle
3

Es ist mir sogar passiert, nachdem ich den Hintergrundmodus für Remote-Benachrichtigungen in den Funktionen eingestellt habe. Das Problem war, dass ich drei Ziele hatte, eines für die Produktion, eines für die Qualitätssicherung und eines für die Inszenierung. Ich musste in allen drei Zielen Remote-Benachrichtigungen festlegen, wodurch die Warnung behoben wurde.

Joshua Cleetus
quelle