【发布时间】:2012-02-24 00:39:30
【问题描述】:
我想在 iOS 中实现地理位置通知,但只是在特定的日期和时间。
只有当用户在特定位置和特定日期和时间时才会启动通知。
例如:用户在里约热内卢,现在是 12 点。
有谁知道如何合并这两个条件来启动通知?
【问题讨论】:
-
你想让它在你的应用程序运行时触发,甚至在它关闭时触发?
标签: ios core-location uilocalnotification
我想在 iOS 中实现地理位置通知,但只是在特定的日期和时间。
只有当用户在特定位置和特定日期和时间时才会启动通知。
例如:用户在里约热内卢,现在是 12 点。
有谁知道如何合并这两个条件来启动通知?
【问题讨论】:
标签: ios core-location uilocalnotification
我所知道的没有任何内置的东西——你必须自己编写逻辑代码。因此,您只需从 CoreLocation 获取地理更新,您可以创建一个计时器来为您提供时间更新,然后编写一些定期执行的逻辑,如果时间/地点符合您的业务规则,则触发通知。请注意,必须运行该应用程序才能完成此操作。您可以从外部服务器发送推送通知,但该服务器必须知道手机在哪里,并且您的应用必须告诉它。
这有帮助吗?
【讨论】:
只要有位置更新的先例,这似乎可以优雅地完成。
使用这个 CoreLocation startMonitoringSignificantLocationChanges
获取有关位置的更新,这些更新将能够在后台启动您的应用(如文档中所述)。然后,在 AppDelegate 的“application:didFinishLaunchingWithOptions”方法中,包含用于检查是否是发送通知的正确时间的逻辑(通过检查 CoreData 中的内容或其他方式)。
不需要创建带有定期检查的计时器。只需让 CoreLocation 处理事件的入口点,因为它会在后台的正确位置启动您的应用程序。
【讨论】:
这很简单。我假设您熟悉使用 CLLocationManager 和 MKReverseGeocoder 类。出于您的目的,仅监控重大的位置变化可能会很好(即使有时只发生在移动公里处)。它将帮助您节省设备的电池电量。
所以,对于CLLocationManager's 委托,您可以使用一个名为locationManager:didUpdateToLocation:fromLocation 的方法。您需要做的就是在此处使用反向地理编码来确定实际城市的名称,具体取决于使用MKReverseGeocoder 类的实际位置。此外,您必须检查设备上的本地时间,将两者匹配并采取相应措施(例如,设置本地通知以将应用从后台唤醒)。
【讨论】: