Est-il possible de faire fonctionner un appareil iOS 7 comme un périphérique Bluetooth LE (iBeacon) et de le faire annoncer en arrière-plan ? J'ai réussi à l'annoncer au premier plan avec le code ci-dessous et je peux le voir à partir d'un autre appareil iOS, mais dès que je retourne à l'écran d'accueil, il cesse d'annoncer. J'ai ajouté le mode d'arrière-plan bluetooth-peripheral dans le plist mais cela ne semble pas aider bien que je reçoive l'invite disant que le dispositif veut utiliser le bluetooth en arrière-plan. Est-ce que je fais quelque chose de mal ou est-ce que ce n'est tout simplement pas possible dans iOS 7 ?
peripManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];
- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral
{
if (peripheral.state != CBPeripheralManagerStatePoweredOn) {
return;
}
NSString *identifier = @"MyBeacon";
//Construct the region
CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:identifier];
//Passing nil will use the device default power
NSDictionary *payload = [beaconRegion peripheralDataWithMeasuredPower:nil];
//Start advertising
[peripManager startAdvertising:payload];
}
Voici le code qui se trouve du côté de la réception/écoute :
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons
inRegion:(CLBeaconRegion *)region
{
//Check if we have moved closer or farther away from the iBeacon…
if (beacons.count > 0) {
CLBeacon *beacon = [beacons objectAtIndex:0];
switch (beacon.proximity) {
case CLProximityImmediate:
[self log:[NSString stringWithFormat:@"You're Sitting on it! %li", (long)beacon.rssi]];
break;
case CLProximityNear:
[self log:[NSString stringWithFormat:@"Getting Warmer! %li", (long)beacon.rssi]];
break;
default:
[self log:[NSString stringWithFormat:@"It's around here somewhere! %li", (long)beacon.rssi]];
break;
}
}
}