即使应用程序已关闭,背景中的信标检测
背景模式只有一个部分答案。你需要有一个或两个条目中的Info.plist:
然后在代码中的某个地方,你需要问requestWhenInUseAuthorization或你的情况requestAlwaysAuthorization。然后你需要在位置经理代表处处理。我做它像这样:
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
if (status == kCLAuthorizationStatusAuthorizedWhenInUse) {
[self startMonitoringAllRegions];
[self.locationManager startUpdatingLocation];
}
else if (status == kCLAuthorizationStatusNotDetermined) {
[self.locationManager requestWhenInUseAuthorization];
}
}
所以地方我所要求启动监测的灯塔区域,然后在这个方法中我检查我是否有权从用户这样做,如果不是我如果我正在开始更新用户位置,请求是否(将显示来自plist的字符串)。
希望,这将让你去:d
这可能是与本地iOS的代码,但不与科尔多瓦。当你说“扫描”信标时,这通常意味着使用CLLocation测距API,它每秒提供所有可见信标的更新。为了在后台持续做到这一点,你需要:
- 在Xcode中的应用的.plist filke添加
location
作为后台模式@ hasan83建议。 - 启动后台线程以保持您的应用在后台运行。
- 请求
requestAlwaysAuthorization
@sloik建议。
我写了一个tutorial and reference app如何做到这一点。该教程提到这只工作3分钟,但与位置的背景模式,3分钟限制消失。请注意,添加此背景模式可能会让您的应用程序被批准用于AppStore更加困难。苹果必须批准这种背景使用定位服务的原因。
您无法在Cordova上执行此操作的原因是JavaScript必须运行以收集测距API返回的信标数据。这在前台工作,但不在后台,因为Cordova依靠前台的WebView来执行JavaScript代码。在后台,您的自定义代码无法运行。
谢喜的链接您的回复,我的要求是,当我是个附近的任何灯塔我需要得到一个本地通知,当我点击它的应用程序需要打开基于需要填充数据 – Eagle
明白了检测的信标主要和次要值。虽然应该可以通过自定义本地插件(或通过增加现有信标插件)来增强Cordova的支持能力,但不幸的是,该功能目前尚不存在。 – davidgyoung
你确定你需要的应用程序在后台进行连续扫描信标,或将具有应用醒来后接近信标(例如,以示通知)就够了吗?前者要做得更加棘手(见下面的回答),而且也难以超越苹果审查团队。 – heypiotr