2016-10-07 2 views
0

Ich habe ein Framework, das alle Beacon Detection Logik und eine Beispiel-App, die Rahmen und bricht Framework. Ich möchte Benachrichtigungen erhalten, nachdem die App beendet wurde. Ich kann Benachrichtigungen von der App erhalten, wenn die Logik in App ist. Aber wenn die Logik im Rahmen ist, bekomme ich keine Benachrichtigungen. Was mache ich falsch?Beacon Detection im Hintergrund von Framework

import UIKit 
import CoreLocation 

extension AppDelegate: CLLocationManagerDelegate { 

    func registerForBeaconNotifications() { 
     let locationManager = CLLocationManager() 
     let region = CLBeaconRegion(proximityUUID: UUID(uuidString: "83f9daec-4cae-54f1-b64e-846f12345d05")!, major: 10, minor: 10, identifier: "iPhone 6 Beacon") 

     locationManager.delegate = self 
     region.notifyOnEntry = true 
     region.notifyOnExit = true 
     region.notifyEntryStateOnDisplay = true 

     locationManager.startMonitoring(for: region) 
     locationManager.startRangingBeacons(in: region) 

     // Register for showing notification alerts 
     UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: .alert, categories: nil)) 
    } 

    func locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, for region: CLRegion) { 
     let notification = UILocalNotification() 

     switch state { 
     case .inside: 
      notification.alertBody = "Entered region" 
      UIApplication.shared.presentLocalNotificationNow(notification) 

     case .outside: 
      notification.alertBody = "Exited region" 
      UIApplication.shared.presentLocalNotificationNow(notification) 

     default: 
      notification.alertBody = "Region unknown" 
      UIApplication.shared.presentLocalNotificationNow(notification) 
     } 
    } 
} 
+0

Es gibt viele, viele Dinge, die schief gehen könnten. Ohne den Code zu sehen, wäre jede Antwort nichts weiter als wilde Spekulation. Kannst du bitte den Code posten? – davidgyoung

+0

Ich bin mir nicht sicher, ob 'AppDelegate + BeaconMonitoring.swift' ein Link zu einer Datei sein soll, aber es kam nicht durch. Unabhängig davon, ist es bei StackOverflow üblich, einen kleinen * Auszug * Ihres Codes zu veröffentlichen, der die für Ihre Frage relevanten Teile des Codes enthält. – davidgyoung

+0

Ich war in der Mitte des Updates, der letzte Kommentar war versehentlich. Ich habe meine Frage mit Code bearbeitet. – Vinuta

Antwort

1

Um Garbage Collection zu verhindern, die Überwachung zu stoppen, muss locationManager eine Klassenvariable sein, und die Initialisierung erfolgt innerhalb einer Methode erfolgen muss. Gefällt mir:

let locationManager: CLLocationManager! 

func registerForBeaconNotifications() { 
    self.locationManager = CLLocationManager() 
    ... 
+0

Lassen Sie mich überprüfen und aktualisieren! :) – Vinuta

+0

Ich habe das versucht, kein Glück :(Alles andere, was Sie sich vorstellen können, ist falsch? – Vinuta

+0

Grund, warum es nicht funktionierte Ich benutzte Swipe-up, um App zu töten und in diesem Fall App wird nicht aufgeweckt auf Erkennung von iBeacons. Gibt es eine Lösung, um damit umzugehen? – Vinuta

Verwandte Themen