2017-05-22 4 views
2

Ich wollte Daten im Hintergrund herunterladen, auch wenn die App nicht ausgeführt wird. Ist es möglich? Ich habe versucht, Hintergrund holen, aber es funktioniert nicht. Siehe unten auf den Code:So können Sie Daten herunterladen, während die App nicht ausgeführt wird (App wird beendet)

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

    UIApplication.shared.applicationIconBadgeNumber = 9 
} 

Es aufgerufen wird, wenn App läuft, aber nicht, wenn app getötet

+0

Wenn der Benutzer Ihre Anwendung beendet dann tut es ausgeführt werden, bis der Benutzer es relauncht (es gibt eine Ausnahme für VoIP-Push- und Standort-Geofence-Eintrag). – Paulw11

+1

Mögliches Duplikat von [Wird iOS meine App in den Hintergrund bringen, wenn der Benutzer sie mit Gewalt beendet?] (Https://stackoverflow.com/questions/19068762/will-ioss-launch-my-app-into-the- -background-if-it-force-quit-by-the-user) – Scriptable

+0

Siehe https://developer.apple.com/reference/uikit/uiapplicationdelegate/1623013-application#discussion. Das besagt: Die App wird jedoch nicht automatisch vom System gestartet, wenn der Benutzer sie zwangsweise beendet hat. In diesem Fall muss der Nutzer Ihre App neu starten oder das Gerät neu starten, bevor das System versucht, Ihre App erneut automatisch zu starten. – Scriptable

Antwort

0

Leider Hintergrund holt Arbeiten für min max 3, nachdem die App deaktiviert oder im Hintergrund. Mit Ausnahme von VOIP, Ort, Audio..ect

Was Sie tun können, ist eine Remote-Push-Benachrichtigung senden „nach einem bestimmten Ereignis stattfindet, in Ihrem Backend-Server“ auf Ihre App so dass der Benutzer mit ihr interagiert und bekommt Ihre App in den Vordergrund.

Sobald die App in den Vordergrund geladen wurde, können Sie einen Observer mit einer Selektorfunktion in viewWillAppear hinzufügen, um mit dem Abrufen der benötigten Daten zu beginnen.

NotificationCenter.default.addObserver(self, selector:#selector(applicationWillEnterForeground(_:)), name:NSNotification.Name.UIApplicationWillEnterForeground, object: nil) 

Selector Funktion:

func applicationWillEnterForeground(_ notification: NSNotification) { 

    print("Fetch data") 

} 

dann in viewWillDisappear den Betrachter entfernen:

NotificationCenter.default.removeObserver(self) 
Verwandte Themen