当您的应用程序未运行但用户在特定位置附近时仍然能够收到推送通知时,是否有可能。这将需要检查用户当前的纬度和经度(即使应用程序没有运行)。
如果可能,您能否就如何实现它提供一些指导?
当您的应用程序未运行但用户在特定位置附近时仍然能够收到推送通知时,是否有可能。这将需要检查用户当前的纬度和经度(即使应用程序没有运行)。
如果可能,您能否就如何实现它提供一些指导?
即使应用程序未运行,您也可以使用两种方法来跟踪用户位置:
重大地点变更服务。
startMonitoringSignificantLocationChanges
在 CLLocationManager 实例中调用该方法。这将有助于显着节省电力,但与下面的第二种方法相比,它不能提供高精度。
如果您选择此方法,则无需设置location
密钥。UIBackgroundModes
标准定位服务。
startUpdatingLocation
在 CLLocationManager 实例中调用该方法。这需要大量的设备功率,但它提供了更高的精度。请记住设置location
密钥UIBackgroundModes
以确保即使应用程序被终止,跟踪仍然有效。
您可以使用上述任何一种方法。我使用第一种方法结合区域监控来触发本地通知。
您可以查看以下 Apple 文档以获得更全面的解释和示例:
即使应用程序根本没有运行,基于区域(CLRegion)的通知
好吧,这个答案不是很快,但 Apple 在 UILocalNotification 中引入了新概念。不需要发送推送通知,当用户进入/离开地理区域时,iOS 会自动显示本地通知CLRegion
。从 iOS 8 及更高版本开始,我们可以根据位置而不是通过设置fireDate
属性来安排本地通知。
let localNotification = UILocalNotification()
localNotification.alertTitle = "Hi there"
localNotification.alertBody = "you are here"
let region = CLCircularRegion(center: CLLocationCoordinate2D(latitude: 4.254, longitude: 88.25), radius: CLLocationDistance(100), identifier: "")
region.notifyOnEntry = true
region.notifyOnExit = false
localNotification.region = region
localNotification.timeZone = NSTimeZone.localTimeZone()
localNotification.soundName = UILocalNotificationDefaultSoundName
UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
以下是来自Apple的更多详细信息。
你需要做两件事:
但是,用户仍然可以将其关闭(设置->常规->后台应用刷新)。
您可以在应用程序处于后台时执行此操作。首先..每当应用程序进入后台时调用 CLLocationManager deleagte。每当设备将获得新的纬度和经度.. 这个委托将被解雇。-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations; 现在调用网络服务并更新您的当前位置。然后发送推送通知。