iBeacons和本地通知

我开发了一个小型的基于iBeacon的应用程序,当应用程序检测到我们的一个iBeacons调用Web服务来获取数据集并向用户发送本地通知时。 所有这些工作正常。

我现在提出这样的想法,即这些本地通知可以在短时间内改变,并带有新的内容。 问题是,如果用户不离开iBeacon的区域并重新进入,应用程序将不会“唤醒”,用户也不会收到新的更新通知。

我不知道这是否能够以某种方式得到解决,或者实际上制造类似的方法不应该与iBeacons的技术有关。

我真的迷失了,不知道有没有人会知道如何提高它。

为了做到这一点,你需要让应用程序在后台运行,而信标在附近。 这将允许您定期检查与信标相关联的更新内容,然后在两种情况下显示通知:

  1. 当信标第一次出现,并且有一个与该信标相关的消息。
  2. 与信标相关的消息在信标仍然可见的时间期间改变。

正如你所提到的,第二项是一个问题,因为你需要一种方法来不断检查,看看是否有更新的内容,尽pipe事实上iOS会在5秒钟内挂起你的应用程序在后台的信标检测。

有几个select,每个都有缺点:

  1. 你可以使用一个自定义的硬件信标,每隔几分钟左右改变它的标识符(例如,未成年人在0和1之间来回移动)。 这将允许您监视两个地区,并在每一分钟内重新触发烽火台附近。 下行:这需要build立一个自定义的灯塔。

  2. 您可以让您的应用程序请求额外3分钟的后台运行时间,在此期间您可以检查更改的消息。 下行:您只需三分钟即可显示更改的消息。

  3. 您可以在.plist中指定额外的背景模式,以便您可以继续在后台运行。 缺点:除非你有充分的理由在后台运行(例如导航应用程序或音乐播放器应用程序),否则苹果公司不会批准你的应用程序在商店中分发。

  4. 您可以在每次更改消息时向您的应用程序发送推送通知,这会在后台唤醒您的应用程序,以便在信标位于附近时显示更新的通知。 缺点:设置推送通知有点复杂,交付速度可能很慢,而且不能保证。

有关这些选项的更多信息,请阅读此处: http : //developer.radiusnetworks.com/2014/11/13/extending-background-ranging-on-ios.html

您可以计划在特定时间交付本地通知:使用fireDatetimeZone属性,然后使用scheduleLocalNotification而不是UIApplication的presentLocalNotificationNow方法。

考虑到这一点,您可以这样做:在“进入”事件时,检索一些通知,以在特定时间段内显示给用户,同时保留在区域中,适当安排时间并让iOS执行交付。

如果用户在显示所有通知之前退出区域,则可以使用cancelLocalNotificationcancelAllLocalNotifications方法取消剩余的本地通知。