如何减少信标进入和退出时间的延迟



我做了什么:-

我正在使用Gimbal beacons,并使用"angular js+ionic+cordova">创建一个混合应用程序。我的应用程序运行良好,但信标进入和退出在前台和后台都花费了太长时间。我该如何解决此问题?我在下面附上我的代码片段:

步骤:-

  1. 首先,我使用cordova 从angular呼叫代表

  2. 我的iOS委派方法被调用,但经过长时间延迟

didEnterRegion-在10秒后调用

didExitRegion-在20-30秒后调用

我已设置万向节传输间隔(MS(-100

我的代码片段:-

Angular js片段:

         // Request permission from user to access location info.
           cordova.plugins.locationManager.requestAlwaysAuthorization();
           // Create delegate object that holds beacon callback functions.
           var delegate = new cordova.plugins.locationManager.Delegate();
           console.log(delegate)
           cordova.plugins.locationManager.setDelegate(delegate);
           // Set delegate functions.
           delegate.didDetermineStateForRegion = onDidDetermineStateForRegion;
           delegate.didRangeBeaconsInRegion = onDidRangeBeaconsInRegion;
           delegate.didEnterRegion = onDidRangeBeaconsInRegion

iOS代码片段:-

-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
[self.queue addOperationWithBlock:^{
        [self _handleCallSafely:^CDVPluginResult *(CDVInvokedUrlCommand *command) {
            [[self getLogger] debugLog:@"didEnterRegion: %@", region.identifier];
            [[self getLogger] debugNotification:@"didEnterRegion: %@", region.identifier];
            NSMutableDictionary* dict = [NSMutableDictionary new];
            [dict setObject:[self jsCallbackNameForSelector:(_cmd)] forKey:@"eventType"];
            [dict setObject:[self mapOfRegion:region] forKey:@"region"];
            CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dict];
            [pluginResult setKeepCallbackAsBool:YES];
            return pluginResult;
        } :nil :NO :self.delegateCallbackId];
    }];
}

-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
 [self.queue addOperationWithBlock:^{
        [self _handleCallSafely:^CDVPluginResult *(CDVInvokedUrlCommand *command) {
            [[self getLogger] debugLog:@"didExitRegion: %@", region.identifier];
            [[self getLogger] debugNotification:@"didExitRegion: %@", region.identifier];
            NSMutableDictionary* dict = [NSMutableDictionary new];
            [dict setObject:[self jsCallbackNameForSelector:(_cmd)] forKey:@"eventType"];
            [dict setObject:[self mapOfRegion:region] forKey:@"region"];
            CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dict];
            [pluginResult setKeepCallbackAsBool:YES];
            return pluginResult;
        } :nil :NO :self.delegateCallbackId];
    }];
}

我们已经注意到本地iBeacon区域功能的类似行为,尤其是关于didExitRegion。行为似乎因iOS版本和应用程序状态(前台/后台(而异。我个人也注意到了不同设备和代之间的差异,即iPhone 6与旧版iPad mini,后者似乎跳过了一些广播数据包,从而导致延迟。

你使用的是什么iOS版本?你提到的延迟是一致的,还是随着时间的推移,当附近的iBeacons时情况会好转?尤其是较旧的iOS版本更容易出现这种行为(根据我们的测试(。

关于我们如何改进反应时间的一些注意事项:

我们决定做我们自己的实现,使用测距和我们自己的地理围栏比较,模拟进入和离开"区域"。的确,这带来了一些关于地理围栏实现的额外工作,但会产生更好的结果。

显然,当应用程序被暂停并且没有在后台积极运行时,这是有限制的。"定位"背景模式为应用程序进行测距提供了简短的窗口,即使是在后台。背景模式受到苹果的严格监管,因此它需要一个适当的增值理由。

总之,在使用本地iBeacon区域时,可能有一些方法可以改善延迟,但总的来说,如果时间对应用程序至关重要,我建议尝试上面大致解释的替代路线。

披露:我为Proximi.io ProximityPlatform 工作

相关内容

  • 没有找到相关文章

最新更新