2016-07-16 4 views
1

Ich weiß, dass diese Frage vorher gepostet wurde, aber das ist mein Fall:Gibt es eine Entsprechung für den Android-Dienst in iOS?

Ich benutze iBeacons, um eine lokale Push-Benachrichtigung auszulösen, wenn der Benutzer eine Region eingibt (wenn die App nicht im Speicher ist), Die lokale Benachrichtigung löst die Anzeige der gewünschten Informationen erfolgreich aus.

Was ich will ist, dass ich einen Web-Service aufrufen und das Ergebnis in der Benachrichtigung anzeigen möchte, während die App nicht im Speicher ist, das wurde auch erfolgreich durchgeführt.

Das Problem ist, dass ich möchte, dass die Benachrichtigung einmal ausgelöst wird, dass, wenn der Benutzer die Region eingegeben und verlassen hat und er wieder eingegangen ist er keine Anthere Benachrichtigung erhalten habe, habe ich eine Flagge erstellt, um das zu verfolgen und es funktioniert gut in der Laufzeit (während die App läuft), aber ich weiß nicht, wie das funktioniert, während die App nicht läuft (ist nicht im Speicher), habe ich es versucht, und manchmal die Benachrichtigung auslöst und manchmal nicht.

+0

Es gibt keine Dienste, aber Sie sollten keine benötigen. Sie können einfach den Beacon-Region-Status mit Core-Daten oder NSUserDefaults persistent machen – Paulw11

+0

Ja, das kann getan werden, aber ich möchte wissen, wie dieser Zustand verwaltet wird, während die App nicht im Vordergrund ist. Warum die Benachrichtigung manchmal auslöst und manchmal nicht?! –

+0

Beacon Halt kann im Hintergrund langsamer sein. Wenn sich Ihre App im Hintergrund befindet, kann sie beendet und neu gestartet werden, wenn das Beacon erkannt wird. Aus diesem Grund müssen Sie Ihre Daten persistieren, Sie können sich nicht auf In-Memory-Daten verlassen – Paulw11

Antwort

0

CoreLocation verwaltet den Status, wenn eine App nicht ausgeführt wird. Für jede CLBeaconRegion, die von einer App registriert wird, verfolgt das Framework intern, ob es in der Region ist (Beacons wurden innerhalb der letzten 30 Sekunden des Scans entdeckt) oder nicht.

Wenn sich dieser Status ändert, startet iOS die App, die die Region im Hintergrund registriert hat, und Überwachungsrückrufe werden ausgelöst.

Weitere anwendungsspezifische Zustandserhaltung ist in der benutzerdefinierten Codierung möglich. Eine App kann ein Flag darüber speichern, ob sie eine Benachrichtigung in NSUserDefaults gesendet hat, wie von @Paulw vorgeschlagen.

Testen und Debuggen von App-Starts über Beacon Detection kann schwierig sein. Ich empfehle, NSLog-Anweisungen in didFinishLaunchingWithOptions und in den CoreLocation-Callback-Methoden hinzuzufügen. Sie können diese Log-Anweisungen in XCode Organizer -> Geräte suchen, während iOS Ihre App anleitet.

Verwandte Themen