iOS 7 デバイスを Bluetooth LE ペリフェラル (iBeacon) として実行し、バックグラウンドでアドバタイズすることはできますか? 以下のコードを使用してフォアグラウンドで広告を表示することができ、別の iOS デバイスからも表示できますが、ホーム画面に戻るとすぐに広告が停止します。plist に bluetooth-peripheral バックグラウンド モードを追加しましたが、デバイスがバックグラウンドで bluetooth を使用したいというプロンプトが表示されても、それは役に立たないようです。私は何か間違ったことをしていますか、それとも 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];
}
受信/リッスン側のコードは次のとおりです。
- (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;
}
}
}