我做了什么:-

我正在使用Gimbal信标,并使用“角度js +离子+科尔多瓦”创建一个混合应用程序。我的应用程序运行良好,但是无论进入前台还是后台,信标进入和退出都花费了很长时间。我该如何解决此问题?我在下面附上我的代码段:

脚步:-


首先,我使用cordova从角度召集代表
我的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 Proximity Platform工作

关于ios - 如何减少信标进入和退出时间的延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38854866/

10-13 04:37