[ios] Führen Sie das iPhone als iBeacon im Hintergrund aus



1 Answers

Kannst du den iBeacon riechen? Artikel diskutiert sowohl die Verwendung von Estimotes und Werbung von Macs und iOS-Geräten. Sie müssen die Fähigkeit "Funktioniert als Bluetooth LE-Zubehör" im Projektziel überprüfen.

Question

Ist es möglich, ein iOS 7 Gerät als Bluetooth LE Peripheriegerät (iBeacon) zu betreiben und es im Hintergrund zu werben? Ich habe es geschafft, es mit dem Code unten im Vordergrund zu werben und kann es von einem anderen iOS-Gerät sehen, aber sobald ich zurück zum Home-Bildschirm gehe, hört es auf zu werben. Ich habe den Bluetooth-peripheren Hintergrund-Modus in den Plist hinzugefügt, aber das schien nicht zu helfen, obwohl ich die Meldung bekomme, dass das Gerät Bluetooth im Hintergrund verwenden möchte. Mache ich etwas falsch oder ist das in iOS 7 nicht möglich?

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];
}

Hier ist der Code, der am empfangenden / hörenden Ende ist:

- (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;
    }
}
}



Ich hoffe auch, dass ich meine (Test-) App einrichten kann, um einen iBeacon aus dem Hintergrund zu bewerben. Die Dokumentation des Schlüssels UIBackgroundModes info.plist legt nahe, dass der Bluetooth-Peripherieschlüssel funktionieren könnte, aber anscheinend nicht. (Ich habe es vor ein paar Minuten getestet.)

Was ich jetzt mache, ist, den Leerlauf-Timer auf deaktiviert zu setzen, wie RawMean es vorschlägt, und dann die Bildschirmhelligkeit auf 0 zu setzen. Schließlich, wenn meine Test-App als iBeacon fungiert, füge ich einen Shake Event-Handler hinzu, der den Bildschirm beleuchtet wieder für 30 Sekunden. Dimmen Sie den Bildschirm so niedrig wie möglich, um den Batterieverbrauch etwas zu reduzieren.




Related