在 swift 中创建基于本地位置的通知

Create local location based notifications in swift

我是一个相对较新的 swift 开发人员,我听说 iOS 8 您可以根据用户位置发送本地通知。我看过一些代码,尤其是这段代码,用于创建简单的基于时间的本地通知。

var leftNotification1:UILocalNotification = UILocalNotification()
    leftNotification1.alertBody = "NotidicationA"
    leftNotification1.repeatInterval = NSCalendarUnit.CalendarUnitHour
    leftNotification1.fireDate = NSDate(timeIntervalSinceNow: 900)
    UIApplication.sharedApplication().scheduleLocalNotification(leftNotification1)

我还看到您可以将 fireDate 替换为像这样的位置触发器:

var localNotification:UILocalNotification = UILocalNotification()
    localNotification.regionTriggersOnce = true
    localNotification.region = CLCircularRegion(circularRegionWithCenter: CLLocationCoordinate2D(latitude: 37.33233141, longitude: -122.03121860), radius: 50.0, identifier: "Location1")
    UIApplication.sharedApplication().scheduleLocalNotification(localNotification)

我知道对于位置,您需要用户的许可并轮询位置等等。我不知道如何使用该代码做这类事情 link 。当我像我为最上面的代码所做的那样将此代码输入我的 ViewDidLoad 时,由于明显的原因它不起作用,CoreLocation 未注册并且它不轮询位置。如果有人可以告诉我如何让这段代码工作,或者更好地给我一个示例代码来查看,那就太好了。谢谢

我发现一些指南有不同的方法来解决这个问题,您需要 import CoreLocation 然后您需要在 ViewController.swift 的 ViewController 函数中注册 CLLocationManagerDelegate。

您需要获得使用该位置的许可

locationManager.delegate = self
locationManager.requestAlwaysAuthorization()
UIApplication.sharedApplication().cancelAllLocalNotifications()

如果您改用 requestWhenInUseAuthorization,它不会显示通知,因为它们仅在您不在应用程序中时显示。在 iOS 8 中,它要求您在 info.plist 文件中声明 NSLocationAlwaysUsageDescription 您只需输入一些文本,以便在请求位置访问时显示。

完成所有这些后,您就可以开始创建通知了,您可以使用以下代码来完成此操作

let locattionnotification = UILocalNotification()
locattionnotification.alertBody = "You have entered a high risk zone (Crown Range Road) , proceed with caution"
locattionnotification.regionTriggersOnce = false
locattionnotification.region = CLCircularRegion(circularRegionWithCenter: CLLocationCoordinate2D(latitude:
    37.33182, longitude: -122.03118), radius: 100.0, identifier: "Location1")
UIApplication.sharedApplication().scheduleLocalNotification(locattionnotification)

regionTriggersOnce 选项允许您在进入和离开该区域时收到多条消息或首次进入该区域时仅收到一条消息时打开和关闭。

您可以将纬度、经度和半径(以米为单位)值更改为您想要的值,当您到达该点的半径范围内时,您将收到消息内容提醒。

有关不同选项的更多详细信息,请查看 https://developer.apple.com/library/ios/documentation/iPhone/Reference/UILocalNotification_Class/

SetSDK 让您现在可以非常非常简单地进行设置。基本上,只需几行代码。

SetSDK.instance.onDeparture(from: .any) { departed in
    /* do your Swift things here */
   let departureCoordinates = departed.location
   // keep going
}

SetSDK.instance.onArrival(to: .any) { arrived in
    /* do your Swift things here */
   let arrivalCoordinates = arrived.location
   // keep going
}

SDK 可以在不耗尽电池的情况下处理持久位置收集,并且它会不断学习发送通知的位置,因此无需手动输入地理围栏或类似内容。开始吧。