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

我知道您需要获得用户许可的位置,并对位置进行轮询。 我不知道如何做这种事情并将其与该代码链接。 当我将此代码输入我的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处理持久性位置收集而不会中断电池,并且不断学习它发送通知的位置,因此无需人工输入地理围栏或类似内容。 刚开始吧。