3

我从几周开始就在使用 ibeacons,我试图发布一些本地通知,当 iphone 击中信标区域时(当接近时)。

当应用程序在后台锁定并打开显示时,它工作正常,但是当我的显示变黑时,didRangeBeacons 方法停止被调用。

我知道通过使用

 region.notifyEntryStateOnDisplay = true;

我们可以在显示时收到通知。

有什么方法可以在应用程序处于后台并锁定并显示关闭时实现发布通知。

请帮帮我。

4

4 回答 4

11

在后台对信标进行测距是完全可能的。

您可以通过与当前位置管理器一起设置或创建一个并行管理器来绕过限制(我认为这没有区别)。您还需要在项目中启用后台位置更新功能。

locationManager2 = [[CLLocationManager alloc] init];
locationManager2.delegate = self;
locationManager2.desiredAccuracy = kCLLocationAccuracyKilometer;
[locationManager2 startUpdatingLocation];

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
     //Do nothing here, but enjoy ranging callbacks in background :-)
}

现在,当 Apple 询问您为什么需要在应用程序中使用后台位置更新模式时,您需要有一个很好的解释。他们对此非常挑剔。

于 2014-02-13T11:07:37.630 回答
4

如果您同时请求了信标进入通知和测距,并且在屏幕锁定时输入了一个新区域,您将收到一条 didEnterRegion 消息(或者可能是 didDetermineState 消息),然后是大约 5 秒的测距消息。如果用户在这 5 秒内没有唤醒设备,则测距消息将停止。

因此,您无法真正根据与背景信标的接近程度进行过滤。如果您尝试等到您获得接近的范围值,那么您很可能不会获得它,因为设备在用户接近之前停止发送您的测距消息。然后,您将不会再收到有关该信标区域的任何通知,直到用户再次离开该区域或唤醒手机并将您的应用程序带回前台。

我正在开发的应用程序在收到 didEnterRegion(或 didDetermineState)消息时会发布本地通知。这会导致屏幕亮起,但似乎不会延长您收到测距通知的时间。

于 2013-12-12T02:42:19.877 回答
2

不,这是设计使然,反映了 iOS 节省电池的目标。您只能didRangeBeacons:在应用程序处于前台时指望。

大卫杨有一篇非常详尽的文章,可能有助于澄清。

于 2013-12-11T20:46:25.217 回答
1

我有和马杜一样的问题。我使用了对我有用的didUpdateLocations而不是didUpdateToLocation。现在,我可以在应用程序处于后台或以锁定和显示关闭时终止信标。

iOS 8.4上

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
    //Do nothing here
}
于 2015-09-15T11:01:23.743 回答