swift和iBeacon在locationManager中触发了通知

时间:2015-11-29 14:06:17

标签: ios swift ibeacon 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)
}

}

这是一种使用某种激情陈述的方法吗?类似的东西:

localNotification.fireDate = NSDate(timeIntervalSinceNow: 900)

如果我输入" func sendLocalNotificationWithMessage",它将触发所有通知。我必须找到一种方法来放置切换后?

或者也许是通知柜台?

1 个答案:

答案 0 :(得分:0)

如果您在过去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)
    }
  }