2014-05-07 3 views
7

Mit iOS7 ist es möglich, completionHandler für Remote-Benachrichtigungen zu haben. Ist es möglich, dasselbe für UILocalNotifications zu tun?Arbeiten mit UILocalNotifications, Remote-Benachrichtigungen mit Abschlusshandler und Hintergrundabruf

Grundsätzlich möchte ich, dass ein Webservice meine Daten in regelmäßigen Zeitabständen von 30 Sekunden veröffentlicht, auch wenn die App im Hintergrund läuft. Fetch

  1. Hintergrund: Für diese hielt ich drei Optionen, aber Hilfe von jedem nicht bekommen Dies wird im Hintergrund arbeiten, aber ich kann es nicht verwenden, da es nicht zwingend notwendig ist, dass iOS immer diesen Hintergrund aufrufen Holen Sie sich meine gewünschten Zeitintervalle.

  2. Remote-Benachrichtigungen: Dies funktioniert perfekt. Aber alle 30 Sekunden muss ich eine Remote PUSH Notification posten, was überhaupt nicht praktikabel ist. Es wäre auch toll, wenn ich lokal damit umgehen könnte.

  3. UILocalNotifications: Es gibt keinen Abschluss-Handler dafür. Benutzer muss die App öffnen. Das funktioniert also auch nicht!

Gibt es noch andere Optionen? Oder sogar mit iOS7 ist es immer noch nicht möglich, lokal etwas im Hintergrund zu tun?

Bitte helfen. Vielen Dank!

+0

Warum wollen Sie Informationen an den Server so oft senden müssen, wenn der Benutzer nicht einmal bei Ihrer App suchen? – Rivera

+0

@Rivera ist etwas, das der Benutzer mit der Aufnahme beginnt, und es sollte fortgesetzt werden, selbst wenn die App im Hintergrund ist. Es stoppt nur, wenn der Benutzer es stoppt. seltsame Anforderung, ich weiß! aber das muss ich bauen! – mayuur

+0

Aufnahme was? Vielleicht können Sie lokal aufnehmen? Apple überprüft, wie viel Ihre App verbraucht, und passt an, wie oft sie Ihre Hintergrundmethode aufruft. Daher sollten Sie besser "eco" sein, indem Sie die Daten noch nicht an den Server senden. – Rivera

Antwort

5

Sie haben alle Optionen abgedeckt, und wie Sie sehen, wird dies nicht unterstützt. Aus guten Gründen ist es meistens ein kostspieliger Vorgang, die Anwendung im Hintergrund aufzuwecken (in iOS7 wird ein Snapshot erstellt, nachdem Apps ihre Hintergrundarbeit abgeschlossen haben). Wenn Sie dies alle 30 Sekunden tun, wäre dies für die Akkulaufzeit verheerend.

Da Sie nicht erwähnt haben, welche Daten Sie posten müssen, würde ich in den meisten Fällen vorschlagen, dass Sie Ihre App so umgestalten, dass sie den Batterien Ihrer Benutzer entspricht. Wenn Sie eine Standortberichterstattung benötigen, sollten Sie sich überlegen, wichtige Standortänderungen zu beachten, anstatt alle 30 Sekunden eine Aufzeichnung durchzuführen.

Missbrauch von Push-Benachrichtigungen ist möglich (beachten Sie, dass stille Remote-Benachrichtigungen durch Apple eingeschränkt sind), aber berücksichtigen Sie die Erfahrung, die Ihre Benutzer haben werden.

Wenn Sie glauben, dass diese Funktion vorhanden sein sollte und fehlt, sollten Sie eine Erweiterungsanforderung mit Apple öffnen und die Radarnummer hier posten, damit die Leute sie duplizieren können.

2

Hintergrund holen ist eine direkte Antwort für Ihr Problem. Der Hintergrundabruf initiiert den Abrufhandler, wenn das iOS regelmäßig eine Aufgabe ausführen kann. Alles, was Sie tun müssen, ist, dass Sie NSURLSession Anfrage

- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler 

NSURLConnection ist nicht mehr eine gültige API für Service-Anrufe in

initiieren oder noch unterstützt Hintergrund Tasking. NSURLSession ist eindeutig eine Ersatz-API für NSURLConnection mit seinen erweiterten iOS 7-Vorteilen.Hinzufügen von unten, Dokumentation von Apples iOS Dokumentation

NSURLSession is a replacement API for NSURLConnection. It provides 
options that affect the policy of, and various aspects of the 
mechanism by which NSURLRequest objects are retrieved from the 
network. 

Hintergrund holt Intervall eingestellt werden kann die Wiederholungsfrequenz für den Hintergrund definieren holen, aber es hält auch Faktoren der OS-Ressourcen und ausstehende Operationen

- (void)setMinimumBackgroundFetchInterval:(NSTimeInterval)minimumBackgroundFetchInterval; 

iOS 7 gibt deutlich eine bessere Möglichkeit, den Inhalt der Anwendung zu aktualisieren, aber es respektiert Gerät Ressourcen & Benutzer Priorität wie iOS im Allgemeinen tut. Hoffe das beantwortet deine Frage.

1

Eigentlich sieht alles so aus, als könnten Sie nicht mit dem Webservice in regelmäßigen Zeitabständen vom Hintergrund kommunizieren.

UILocalNotifications oder Remote Notifications müssen vom Benutzer aktiviert werden, um die App im Hintergrund zu aktivieren. EDITED: ab iOS 7.0 Remote-Benachrichtigung die App aufwachen kann, aber es ist nicht eine flexible Lösung

iOS mehr Aktivitäten im Hintergrund für Anwendungen ermöglicht, die eine der angegebenen UIBackgroundModes verwenden, finden Sie in „Tabelle 3-4 Hintergrund Modi für "apps:

Here is a link to related Apple docs

Wenn Ihre Anwendung nicht für eine der bg Modi direkt positioniert ist, ich mit Anil Kumar (Beitrag oben) einig, dass Hintergrund holen hier die nützlichste Sache ist. Es tut jedoch nicht vollständig, was Sie brauchen. [UIApplication setMinimumBackgroundFetchInterval:] Es bedeutet keine strikte Zeit. Es bedeutet nur minimales Intervall (oder gewünschte Zeit). Hier mehr Infos:

performFetchWithCompletionHandler never gets fired

Dank

+1

In Bezug auf Remote-Benachrichtigungen, dass ich falsch. Wenn der Benutzer die Anwendung im Task-Manager nicht per Swipe gelöscht hat, können Remote-Benachrichtigungen verwendet werden, um die App im Hintergrund zu aktivieren, sofern die Push-Nutzlast in korrekten Intervallen ankommt. Aber es ist eine schlechte Idee. –

+0

@LeoNatan Vereinbart, ab iOS 7.0 Remote-Benachrichtigung kann die App aufwachen. Danke fürs klarstellen. –

Verwandte Themen