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)
    }
  }