快速创建基于本地位置的通知

Posted

技术标签:

【中文标题】快速创建基于本地位置的通知【英文标题】:Create local location based notifications in swift 【发布时间】:2015-05-11 14:58:53 【问题描述】:

我是一个相对较新的 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 没有注册并且它没有轮询位置。如果有人能告诉我如何让这个代码工作,或者更好地给我一个示例代码来看看,那就太好了。谢谢。

【问题讨论】:

【参考方案1】:

我发现一些指南有不同的处理方式,您需要 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/

【讨论】:

我们如何在 ios 10 中做到这一点,请帮助【参考方案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 可以在不消耗电池电量的情况下处理持久位置收集,并且它发送通知的位置不断被学习,因此无需手动输入地理围栏或类似的东西。只需启动它即可。

【讨论】:

以上是关于快速创建基于本地位置的通知的主要内容,如果未能解决你的问题,请参考以下文章

每天在设定的时间快速重复本地通知

使用 MobileFirst 的基于位置的推送通知

有针对性的推送通知

基于地理位置的推送通知

iOS开发——本地通知

本地通知在 iOS 10.3.1 中不起作用