2015-04-16 49 views
1

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

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

我不知道这是否可以通过某种方式解决,或者实际上制作类似的方法不应与iBeacons的技术相关。

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

+0

背景didRangeBeacon不会打电话只监测将work.didEnterRegion和didExitRegion将称为背景。 –

回答

1

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

  1. 当一盏明灯首次出现,并没有与该信标相关联的消息。
  2. 在信标仍然可见的时间内,与上述信标相关的消息发生变化。

至于你提到的第二个项目是一个问题,因为你需要一种方法来不断地检查,看是否有更新尽管的iOS将在5秒标检测内暂停您的应用内容的背景。

一些选项,其每一个具有缺点:

  1. 可以使用定制的硬件信标改变其每分钟标识符左右(例如,次要追溯到和0之间来回和1)。这将允许您监视两个区域,并在每分钟内重新触发信标在附近。下行:这需要建立一个自定义的灯塔。

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

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

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

这里阅读一些这些选项的详细信息:http://developer.radiusnetworks.com/2014/11/13/extending-background-ranging-on-ios.html

+0

非常感谢大卫,你的建议总是有帮助的。我已经实施了第二个选项。我认为我应该调查推送通知,因为其他两个选项原则上不可行。 –

+0

这3分钟内是否可以进行api呼叫? 我想让我可以打电话给我的服务器,然后返回该iBeacon的名称。 因此,而不是我的通知只是说“我找到了一个iBeacon”它可以是“我发现iBeacon number 10”? 可以做吗? 此外,我在迅速做到这一点。 – LinkToThePast

+0

是的,这是可能的。 – davidgyoung

2

您可以安排本地通知在特定的时间内递交:使用UILocalNotificationfireDatetimeZone属性,然后使用scheduleLocalNotification代替的UIApplication的presentLocalNotificationNow方法。

考虑到这一点,您可以这样做:在“enter”事件后,检索几条通知,以在特定时间段内向用户显示,并保留在区域中,并适当安排时间并让iOS执行提供。

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

+0

它是一个好主意,但通知不是预定义的,所以我不能先前下载。 –