我已经开发了同样在 android 中开发的应用程序。
我在 iOS 中实现了信标区域监控,如下所示。
#pragma mark - Start/Stop Monitoring
- (void)startMonitoring {
[self clearRegionWatch]; // This function removes the already registered monitored regions
NSArray *arrayOfSavedBeacons = [self getSavedBeacons];
if([arrayOfSavedBeacons count]){
for(Beacons *beaconModel in arrayOfSavedBeacons) {
beaconModel.region.notifyOnEntry = YES;
beaconModel.region.notifyOnExit = YES;
beaconModel.region.notifyEntryStateOnDisplay = NO;
NSLog(@"Monitoring start request: %@", [beaconModel dictionaryRepresentation]);
[locationManager startMonitoringForRegion:beaconModel.region];
[locationManager requestStateForRegion:beaconModel.region];
}
}
else{
UIAlertView* curr1=[[UIAlertView alloc] initWithTitle:@"No Beacons" message:@"No Beacon List Found From Server" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[curr1 show];
}
}
以上是启动监控的代码。
以下是我为位置管理器实例的初始化编写的代码。
locationManager = [[CLLocationManager alloc] init];
if([locationManager respondsToSelector:@selector(startMonitoringVisits)]) {
//iOS 8.0 onwards
[locationManager startMonitoringVisits];
}
if([locationManager respondsToSelector:@selector(allowsBackgroundLocationUpdates)]) {
//iOS 9.0 onwards
locationManager.allowsBackgroundLocationUpdates = YES;
}
if([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
//iOS 8.0 onwards
[locationManager requestAlwaysAuthorization];
}
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager setDelegate:self];
[locationManager startUpdatingLocation];
上面的代码将在应用程序启动时初始化位置管理器。
我想收到有关区域进入和退出事件的通知。
我的问题是我的 android 应用程序可以从很远的距离检测到信标进入,而 iOS 应用程序无法检测到从远处进入或退出的区域。
我不知道为什么会出现这种差异?
我观察到的是信标区域监控有时会将进出通知延迟 2 到 3 分钟。
如果 android 可以在特定范围内检测到信标区域,那么为什么 iOS 应用程序无法检测到这一点?(两个应用程序都可以开始检测应用程序的范围形式存在显着差异)。
任何建议或建议都会有所帮助。
谢谢。