swift 和 locationManager 中的 iBeacon firedate 通知
swift and iBeacon firedate notification in locationManager
下面的代码适用于通知。但是,当我尝试应用程序时,远近之间的通知太多了。
extension AppDelegate: CLLocationManagerDelegate {
func sendLocalNotificationWithMessage(message: String!) {
let notification:UILocalNotification = UILocalNotification()
notification.alertBody = message
UIApplication.sharedApplication().scheduleLocalNotification(notification)
}
func locationManager(manager: CLLocationManager!,
didRangeBeacons beacons: AnyObject[]!,
inRegion region: CLBeaconRegion!) {
NSLog("didRangeBeacons");
var message:String = ""
if(beacons.count > 0) {
let nearestBeacon:CLBeacon = beacons[0] as CLBeacon
switch nearestBeacon.proximity {
case CLProximity.Far:
message = "You are far away from the beacon"
case CLProximity.Near:
message = "You are near the beacon"
case CLProximity.Immediate:
message = "You are in the immediate proximity of the beacon"
case CLProximity.Unknown:
return
}
} else {
message = "No beacons are nearby"
}
NSLog("%@", message)
sendLocalNotificationWithMessage(message)
}
}
这是一种使用firedate语句的方法吗?类似于:
localNotification.fireDate = NSDate(timeIntervalSinceNow: 900)
如果我输入 "func sendLocalNotificationWithMessage",它会触发所有通知。我必须以某种方式找到一种方法来放置开关?
或者通知计数器?
听起来你想做的是,如果你在过去 900 秒内发送了另一个通知,则延迟显示新通知。如果这是目标,您可以这样做:
var lastNotificationTime = 0.0
func locationManager(manager: CLLocationManager!,
didRangeBeacons beacons: AnyObject[]!,
inRegion region: CLBeaconRegion!) {
NSLog("didRangeBeacons");
var beaconVisible = false
var proximity = CLProximity.Unknown
if(beacons.count > 0) {
beaconVisible = true
let nearestBeacon:CLBeacon = beacons[0] as CLBeacon
proximity = nearestBeacon.proximity
}
else {
beaconVisible = false
}
if (NSDate.timeIntervalSinceReferenceDate() - lastNotificationTime > 900) {
lastNotificationTime = NSDate.timeIntervalSinceReferenceDate()
var message:String = ""
if beaconVisible {
switch proximity {
case CLProximity.Far:
message = "You are far away from the beacon"
case CLProximity.Near:
message = "You are near the beacon"
case CLProximity.Immediate:
message = "You are in the immediate proximity of the beacon"
case CLProximity.Unknown:
return
}
}
else {
message = "No beacons are nearby";
}
NSLog("%@", message)
sendLocalNotificationWithMessage(message)
}
}
下面的代码适用于通知。但是,当我尝试应用程序时,远近之间的通知太多了。
extension AppDelegate: CLLocationManagerDelegate {
func sendLocalNotificationWithMessage(message: String!) {
let notification:UILocalNotification = UILocalNotification()
notification.alertBody = message
UIApplication.sharedApplication().scheduleLocalNotification(notification)
}
func locationManager(manager: CLLocationManager!,
didRangeBeacons beacons: AnyObject[]!,
inRegion region: CLBeaconRegion!) {
NSLog("didRangeBeacons");
var message:String = ""
if(beacons.count > 0) {
let nearestBeacon:CLBeacon = beacons[0] as CLBeacon
switch nearestBeacon.proximity {
case CLProximity.Far:
message = "You are far away from the beacon"
case CLProximity.Near:
message = "You are near the beacon"
case CLProximity.Immediate:
message = "You are in the immediate proximity of the beacon"
case CLProximity.Unknown:
return
}
} else {
message = "No beacons are nearby"
}
NSLog("%@", message)
sendLocalNotificationWithMessage(message)
}
}
这是一种使用firedate语句的方法吗?类似于:
localNotification.fireDate = NSDate(timeIntervalSinceNow: 900)
如果我输入 "func sendLocalNotificationWithMessage",它会触发所有通知。我必须以某种方式找到一种方法来放置开关?
或者通知计数器?
听起来你想做的是,如果你在过去 900 秒内发送了另一个通知,则延迟显示新通知。如果这是目标,您可以这样做:
var lastNotificationTime = 0.0
func locationManager(manager: CLLocationManager!,
didRangeBeacons beacons: AnyObject[]!,
inRegion region: CLBeaconRegion!) {
NSLog("didRangeBeacons");
var beaconVisible = false
var proximity = CLProximity.Unknown
if(beacons.count > 0) {
beaconVisible = true
let nearestBeacon:CLBeacon = beacons[0] as CLBeacon
proximity = nearestBeacon.proximity
}
else {
beaconVisible = false
}
if (NSDate.timeIntervalSinceReferenceDate() - lastNotificationTime > 900) {
lastNotificationTime = NSDate.timeIntervalSinceReferenceDate()
var message:String = ""
if beaconVisible {
switch proximity {
case CLProximity.Far:
message = "You are far away from the beacon"
case CLProximity.Near:
message = "You are near the beacon"
case CLProximity.Immediate:
message = "You are in the immediate proximity of the beacon"
case CLProximity.Unknown:
return
}
}
else {
message = "No beacons are nearby";
}
NSLog("%@", message)
sendLocalNotificationWithMessage(message)
}
}