2017-09-25 4 views
0

Ich würde gerne wissen, ob etwas wie das ist tatsächlich mit Eddystone Beacon Tracking auf iOS möglich.Eddystone Beacon Hintergrund Tracking für iOS

Ich arbeite gerade an einer App, die Eddystone Beacons scannen sollte. Die Grundidee der App ist: - Benutzer öffnet die App; - Benutzer registriert sich zu einem bestimmten Zeitpunkt (in der Zukunft) für das Meeting; - Starten Sie BT 5 Minuten vor Beginn des Meetings. - Wenn Beacons gefunden werden, führen Sie eine Netzwerkanforderung aus und zeigen Sie dem Benutzer eine Benachrichtigung an.

Wenn die App im Vordergrund steht, gibt es kein Problem. Rufen Sie einfach

func startScan() { 
    if centralManager.state == .poweredOn { 
     let services = [CBUUID(string: "FEAA")] 
     let options = [CBCentralManagerScanOptionAllowDuplicatesKey: true] 
     centralManager.scanForPeripherals(withServices: services, options: options) 
    } 
} 

Ein es wird mit dem Scannen beginnen. Dann, wenn das Beacon gefunden wird und ich die richtigen Daten vom Server bekomme, werde ich den Scan stoppen.

Also die Frage wäre, wenn es irgendwie möglich ist, den Start des Scans zu planen, auch wenn die App im Hintergrund ist? Natürlich, wenn es getötet wird, können wir damit nichts anfangen.

Eine Idee war eine „stille lokale Benachrichtigung“ zu schaffen, aber dann nach der Lektüre über die Apple-Dokumentation scheint es, wie

func userNotificationCenter(_ center: UNUserNotificationCenter, 
          willPresent notification: UNNotification, 
          withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { 
} 

genannt wird, nur wenn App im Vordergrund?

Jede Hilfe oder Anregung wäre willkommen.

Antwort

1

Sie können nicht planen, dass ein Bluetooth-Scan zu einem bestimmten Zeitpunkt gestartet wird, wenn die App nicht im Vordergrund ausgeführt wird. Und es gibt keinen zuverlässigen Weg, um Ihre App mit Benachrichtigungen (remote oder lokal) zu einem bestimmten Zeitpunkt zu starten. Stille Remote-Benachrichtigungen sind möglich, können jedoch einige Minuten dauern.

Was Sie tun können, ist die Suche nach dem Eddystone Service UUID einzurichten, so dass Sie einen einmaligen Entdeckungs-Callback von CoreBluetooth erhalten, wenn Ihre App im Hintergrund ist und ein Beacon zum ersten Mal sieht. Der wichtigste Haken ist, dass dies auch nicht super schnell ist. Die Erkennung kann innerhalb von ein paar Sekunden erfolgen, etwas wahrscheinlicher in einer oder zwei Minuten, nachdem sich das Funkfeuer in der Nähe befindet.

+0

Ok danke für die Klarstellung. Ich hatte Angst, dass es nicht möglich sein wird, das Programm für eine bestimmte Zeit zu planen, wenn die App im Hintergrund läuft. – Karlis

+0

Aber wie wäre es mit stiller Push-Benachrichtigung? https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html#//apple_ref/doc/uid/TP40008194-CH10-SW1 Es gibt ein Beispiel für die Konfiguration einer automatischen Push-Benachrichtigung. Denken Sie nur daran, ob ein solcher Fall vom App-Store genehmigt werden würde: 1. Senden Sie eine stumme Push-Benachrichtigung. 2. Starten Sie die Hintergrundaufgabe, um die Überwachung für Beacons zu starten – Karlis

Verwandte Themen