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

时间:2015-03-10 08:37:52

标签: ios swift notifications location

我是一位相对较新的快速开发者,我在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没有注册,也没有轮询位置。如果有人可以告诉我如何使这些代码正常工作,或者甚至更好地给我一个示例代码来看看它会很棒。感谢。

2 个答案:

答案 0 :(得分:8)

我发现一些指南有不同的方法来处理这个问题,你需要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/

答案 1 :(得分:2)

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处理持久性位置收集而不会中断电池,并且不断学习它发送通知的位置,因此无需手动输入地理围栏或其他类似内容。刚开始吧。