我一直致力于与iBeacon设备互动的iOS应用。工作流程是下一个: 如果用户在iBeacon附近,则应用程序接收来自互联网的推送通知。 因此,要识别某些iBeacon附近的用户是否需要打开下一个模块:
问题是如果没有打开GPS模块应用程序就找不到任何iBeacons。它很奇怪,因为iBeacon技术只能使用蓝牙。
如何解决以下问题? 我使用Xcode 6.1.1,iOS 8,CoreLocation和CoreBluetooth框架。
以下是我实施的代码:
if ([CLLocationManager locationServicesEnabled]) {
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
if([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[_locationManager requestAlwaysAuthorization];
}
NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:@"12345678-1234-1234-1234-123456789012"];
NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid
identifier:bundleIdentifier];
[_locationManager startMonitoringForRegion:beaconRegion];
[_locationManager startRangingBeaconsInRegion:beaconRegion];
}
else {
NSLog(@"location service is disabled");
}
答案 0 :(得分:1)
您不需要GPS即可支持iBeacon,但您确实需要定位服务。
这就是为什么我问你是怎么回事#"关闭GPS",因为我不知道在iOS中你有什么方法可以专门关闭GPS接收器。
当用户在“设置”应用中停用位置服务时,他们并不只是关闭GPS - 正如名称所示,他们正在关闭位置服务。 iOS中的位置服务是指可以定位用户的任何内容,包括GPS,WiFi位置和iBeacon。
答案 1 :(得分:0)
不,没有GPS,iBeacon将无法正常工作。 CLLocation Manager是核心位置框架中的一个类。没有GPS,CLocation Manager的代表不会被触发。在这里,iBeacon在CLocation Manager的帮助下工作。
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region;
这是在区域中标识iBeacon时触发的委托。如果没有GPS,该代表将无法使用。