2016-05-19 17 views
4

Ich mache App. welche Bereitstellung von Funktionalität zum Abrufen von Daten nach jeder Stunde. also selbst wenn meine App beendet wird, wie kann ich diese Funktion aufrufen?Wie wird die Funktion nach jeder Stunde aufgerufen? (Swift). Hintergrund holen, wenn App beendet wird?

nach zu viel Suche fand ich Hintergrund holen von performFetchWithCompletionHandler, aber ich möchte wissen, dass diese Funktion funktioniert, wenn meine App beendet ist? Was ich meine ist, wenn meine App in geschlossenen oder abgeschlossenen Zustand ist wie kann ich Funktion automatisch aufrufen?

+2

Nicht für unendliche Zeit möglich !! – TheTiger

+0

aber backgrount fetch funktioniert, wenn meine App beendet ist? @TheTiger –

+1

Sie können Daten nur einmal abrufen, wenn der Anwendungsstatus in den Hintergrund geändert wird, aber nicht für immer. – TheTiger

Antwort

10

Sie können nichts tun, wenn Ihre App beendet ist. Apple erlaubt nichts (außer dem Empfang einer Benachrichtigung) im abgeschlossenen oder geschlossenen Zustand.

Sie sind auch für die Hintergrundausführung eingeschränkt. Sie können bestimmte Art von Aufgabe im Hintergrundmodus ausführen: Location update,Music playing, VOIP, finite length task, Newsstand downloads, etc. Sie können sich auf apple documentation für weitere Details über die Ausführung im Hintergrund beziehen.

Hope this :)

+0

"außer Benachrichtigung erhalten" <- Ich denke, das ist falsch. Sie können alle Aktionen ausführen, die Ihre App im Hintergrund starten (https://developer.apple.com/documentation/uikit/uiapplicationlaunchoptionskey). – Honey

-3

@ helfen Jack.Right Sie die Methode nach jedem rufen Sie 1 Stunde können so NSTimeInterval verwenden, es wäre hilfreich sein !!

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    UIApplication *app = [UIApplication sharedApplication]; 

    //create new uiBackgroundTask 
    __block UIBackgroundTaskIdentifier bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
     [app endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }]; 

    //and create new timer with async call: 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     //run function methodRunAfterBackground 
     NSTimer* t = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(methodRunAfterBackground) userInfo:nil repeats:NO]; 
     [[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode]; 
     [[NSRunLoop currentRunLoop] run]; 
    }); 
} 
+0

aber die Sache ist, dass, wo sollte ich meinen Code schreiben, so Methode Anruf nach jeder Stunde bekommen? NSTimeinterval funktioniert, wenn meine App beendet wird? –

+0

@ Jack.Right, wenn Sie Methodenaufruf nach dem Beenden der App möchten, dann verwenden Sie die Silent-Benachrichtigung. –

+0

Falsche Antwort. 'NSTimer' funktioniert nicht im Hintergrundmodus. – TheTiger

1

Einmal brauchte ich das gleiche, wenn ich an einem Projekt arbeite, leider habe ich keine Lösung dafür finden.

Sie können eine Aufgabe ausführen, wenn Ihre Anwendung in Background-Zustand ist (das auch mit eingeschränkten Diensten), aber Apple nicht erlauben, eine Aufgabe auszuführen, wenn App beendet wird

gehen Sie bitte über den Link.

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

und dies ist für Hintergrund ausgeführt wird. Sending Latitude and Longitude to Server when app is in background

1

Ihre App wird beendet, sobald sie keine damit verbundene Aufgabe mehr erfüllt. Apple unterstützt es nicht. Sie können Funktionen nicht aufrufen, wenn Ihre App nicht ausgeführt wird. So ist es nicht möglich Aufgrund der Apple-Regeln. performFetchWithCompletionHandler funktioniert nur, wenn Ihre Anwendung ausgeführt wird, wenn Ihre Anwendung beendet wird, führt sie keine Task aus.

0

Von dem, was ich erlebt habe:

Zunächst wird der Timer stoppt, wenn die App in den Hintergrund geht schnell Batterie zu stoppen und die Lebensdauer der Batterie erweitern sogar Netzwerk speichern bündelt Quotenverbrauch während Sie die App nicht aktiv nutzen.

Sie tun können, Hintergrund holen Aufgaben durch die folgenden in der AppDelagateZugabe „wie Sie erwähnt“:

func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { 

    //Do whatever you need 
    //This will keep running for max 3 mins 
} 

Aber das gleiche gilt für Hintergrundaufgaben holen. Sie haben maximal 3 Minuten Hintergrundaktivität, außer den Locations Services, Audio Playing, VOIP und einigen anderen Aufgaben.

Ich weiß wirklich nicht die Verwendung und die Funktionalität der App und warum müssen Sie alle 1 Stunde Daten vom Server greifen, wenn die App bereits geschlossen ist und der Benutzer nicht besorgt ist, die aktualisierten Daten zu sehen.

Aber wenn diese Daten wichtig sind, aktualisiert jede Stunde und muss den Benutzer mit den Updates "zum Beispiel die Überprüfung des Status eines bestimmten Ereignisses auf dem Server, wie eine Chat-App und der Benutzer eine Nachricht erhalten benachrichtigt ". Dann ist es besser, eine Remote-Push-Benachrichtigung an den Benutzer vom Server zu senden, wenn ein bestimmtes Ereignis stattfindet. Dadurch wird der Benutzer die App erneut im Vordergrund abrufen und die App wird die aktualisierten Daten "in meinem Fall abrufen hier die Nachricht ".

Verwandte Themen