2017-02-27 6 views
0

Ich arbeite an einer App, bei der eine MQTT-Verbindung mit dem Server besteht und der Server einige Werte bezüglich der Änderungen an Gerät und Benutzeroberfläche sendet. Wenn sich die App jedoch im Hintergrund befindet, sollte der Benutzer eine lokale Benachrichtigung erhalten, dass bestimmte Werte geändert werden. Ich weiß, Hintergrund-Service ist in iOS nicht erlaubt, aber ich möchte sicherstellen, dass es keine Möglichkeit gibt, dies zu erreichen.Wie führe ich einen Dienst im iOS-Hintergrund aus, um lokale Benachrichtigungen zu erhalten?

Ich habe erfolgreich lokale Benachrichtigung mit App im Hintergrund von UIApplication.shared.beginBackgroundTask hinzugefügt, aber es funktioniert nur für 3 Minuten genau danach Apple beendet die App.

func registerBackgroundTask() { 
     backgroundTask = UIApplication.shared.beginBackgroundTask { [weak self] in 
      self?.endBackgroundTask() 
     } 
     assert(backgroundTask != UIBackgroundTaskInvalid) 
    } 
    func endBackgroundTask() { 
     print("Background task ended.") 
     UIApplication.shared.endBackgroundTask(backgroundTask) 
     backgroundTask = UIBackgroundTaskInvalid 
    } 

Und self.registerBackgroundTask() Aufruf macht den App runnable im Hintergrund für drei Minuten.

Als nächstes werde ich versuchen, dass Hintergrund Fetch und Widget Service zu laufen, Hier möchte ich nur einige Vorschläge, die gibt es eine Chance, dass einer der beiden oben funktioniert?

Antwort

0

Es klingt wie "Kommunikation mit einem externen Zubehörteil" wäre der Hintergrundmodus, der zu Ihrer Anwendung passt. Siehe Apple Docs als Referenz. Sie müssen den Backround-Modus für Ihr Projekt aktivieren und den Wert auf "externes Zubehör" einstellen. Dann können Sie fortlaufend kleine Downloads im Hintergrund durchführen. Apple nennt als Beispiel Herzfrequenzmonitore.

Bitte beachten Sie, dass die kontinuierliche Hintergrundabfrage Energieverschwendung ist und die Batterie schnell verbrauchen würde. Überprüfen Sie, ob dies für Ihre Anwendung wirklich benötigt wird. Wenn der Benutzer nur wenige Benachrichtigungen/Alarme benötigt, wären Fernmeldungen eine viel bessere Lösung. Ich verwende Remote-Benachrichtigungen in meinen eigenen Projekten und es funktioniert sehr reibungslos und zuverlässig. Zusätzlicher Vorteil ist, dass es eine App aufwecken würde, selbst wenn der Benutzer sie vorher geschlossen hat.

+0

Eigentlich gibt es Socket-Verbindung in MQTT mit dem Server und nach der Verbindung erstellt Server sendet Gerätestatus über ein Zeitintervall und ich weiß nicht, wie dies im Hintergrund-Modus mit jedem oben genannten Modus, dass Apple bietet –

+1

External Accessories müssen das externe Zubehör-Framework unterstützen . Siehe https://developer.apple.com/reference/externalaccessory. Bei einem generischen MQTT-Gerät ist dies nicht möglich. Um dieses Gerät mit iOS verwenden zu können, müssen Sie es mit iOS kompatibel machen, indem Sie es zu einem "externen Zubehörteil" machen oder indem Sie Remote-Benachrichtigungen verwenden. Wenn Sie das Gerät nicht ändern können, benötigen Sie einen eigenen kleinen Server dazwischen, der das MQTT ausführt und es in iOS/Hintergrund-kompatiblen Datenverkehr übersetzt. – transistor

+0

Danke für die Erklärung Ich werde darüber mit meinem Team –

1

Für mehr als 3 Minute. Sie werden jeden Modus aktivieren. Andernfalls, wenn die App in die Hintergrund-App eingeht. Nach 3 Minuten führt die Anwendung keine Aktion aus. enter image description here

+0

aber ich verwende kein Standort-Update, dann ist es richtig, dies zu tun? –

+0

Wenn Sie keine Modi verwenden. Im Hintergrund funktioniert die App nach 3 Minuten nicht. Weil Apple es Apps nicht erlaubt, länger als ein paar Minuten im Hintergrund zu laufen. –

+0

Ja, ich weiß, wenn ich keine Modi verwende Apple erlaubt nicht, dass Apps weiterhin im Hintergrund laufen, aber hier möchte ich wissen, dass meine Situation in irgendeinem Modus ist, den ich benutzen kann? –

Verwandte Themen