【问题标题】:Geo location notification in iOSiOS 中的地理位置通知
【发布时间】:2012-02-24 00:39:30
【问题描述】:

我想在 iOS 中实现地理位置通知,但只是在特定的日期和时间。

只有当用户在特定位置和特定日期和时间时才会启动通知。

例如:用户在里约热内卢,现在是 12 点。

有谁知道如何合并这两个条件来启动通知?

【问题讨论】:

  • 你想让它在你的应用程序运行时触发,甚至在它关闭时触发?

标签: ios core-location uilocalnotification


【解决方案1】:

我所知道的没有任何内置的东西——你必须自己编写逻辑代码。因此,您只需从 CoreLocation 获取地理更新,您可以创建一个计时器来为您提供时间更新,然后编写一些定期执行的逻辑,如果时间/地点符合您的业务规则,则触发通知。请注意,必须运行该应用程序才能完成此操作。您可以从外部服务器发送推送通知,但该服务器必须知道手机在哪里,并且您的应用必须告诉它。

这有帮助吗?

【讨论】:

  • 我觉得可以更简单一些,我会搜索更多关于这个的。无论如何,谢谢。
【解决方案2】:

只要有位置更新的先例,这似乎可以优雅地完成。

使用这个 CoreLocation startMonitoringSignificantLocationChanges

获取有关位置的更新,这些更新将能够在后台启动您的应用(如文档中所述)。然后,在 AppDelegate 的“application:didFinishLaunchingWithOptions”方法中,包含用于检查是否是发送通知的正确时间的逻辑(通过检查 CoreData 中的内容或其他方式)。

不需要创建带有定期检查的计时器。只需让 CoreLocation 处理事件的入口点,因为它会在后台的正确位置启动您的应用程序。

【讨论】:

    【解决方案3】:

    这很简单。我假设您熟悉使用 CLLocationManagerMKReverseGeocoder 类。出于您的目的,仅监控重大的位置变化可能会很好(即使有时只发生在移动公里处)。它将帮助您节省设备的电池电量。

    所以,对于CLLocationManager's 委托,您可以使用一个名为locationManager:didUpdateToLocation:fromLocation 的方法。您需要做的就是在此处使用反向地理编码来确定实际城市的名称,具体取决于使用MKReverseGeocoder 类的实际位置。此外,您必须检查设备上的本地时间,将两者匹配并采取相应措施(例如,设置本地通知以将应用从后台唤醒)。

    【讨论】:

    • 当用户已经在正确的位置,当时间更改为有效时间时,我认为这不会起作用。?
    • 其实罗里我不得不说你是对的!好想法。 :) 我们必须扩展我上面所说的内容,每当发生重大位置变化时,我们必须将新位置的城市可能存储到 NSUserDefaults。我们还需要为 12 点设置本地通知。当本地通知发出时,我们可以检查保存的位置,如果它与里约热内卢匹配,则显示它,否则取消(并为第二天设置一个新位置)。谢谢你的评论,罗里!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2018-11-07
    相关资源
    最近更新 更多