Ihre App kann BLE-Beacon-Nachrichten (Bluetooth Low Energy) abonnieren. mit demselben Mechanismus, wie beim Abonnieren von Nachrichten, andere Geräte in der Nähe.
Standardmäßig funktionieren Beacon-Abos nur, wenn Ihre App im Vordergrund ausgeführt wird. Wenn deine App in den Hintergrund wechselt, werden die Abos automatisch beendet nach Beacons suchen. Weitere Informationen finden Sie unter Hintergrundscans. wie Sie das Scannen im Hintergrund aktivieren.
Wenn Sie Beacons abonnieren möchten, setzen Sie den Parameter deviceTypesToDiscover
auf
kGNSDeviceBLEBeacon
in den Aboparametern. Das folgende Snippet
zeigt, wie das geht:
Objective-C
id<GNSSubscription> beaconSubscription = [messageManager
subscriptionWithMessageFoundHandler:myMessageFoundHandler
messageLostHandler:myMessageLostHandler
paramsBlock:^(GNSSubscriptionParams *params) {
params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
}];
Swift
let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler(
myMessageFoundHandler, messageLostHandler: myMessageLostHandler,
paramsBlock: { (params: GNSSubscriptionParams!) in
params.deviceTypesToDiscover = .BLEBeacon
})
Das obige Abo erkennt nur Beacons Ihres Projekts und empfängt alle Nachrichten von diesen Beacons. Wenn Sie Nachrichten von Beacons registriert haben, können Sie einen Namespace im Aboparameter. Wenn Sie eine bestimmte Art von Nachricht erhalten möchten, kann auch einen Nachrichtentyp zum Filtern übergeben. Das folgende Snippet zeigt, Gehen Sie wie folgt vor:
Objective-C
id<GNSSubscription> beaconSubscription = [messageManager
subscriptionWithMessageFoundHandler:myMessageFoundHandler
messageLostHandler:myMessageLostHandler
paramsBlock:^(GNSSubscriptionParams *params) {
params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
params.messageNamespace = @"com.mycompany.mybeaconservice";
params.type = @"mybeacontype";
}];
Swift
let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler(
myMessageFoundHandler, messageLostHandler: myMessageLostHandler,
paramsBlock: { (params: GNSSubscriptionParams!) in
params.deviceTypesToDiscover = .BLEBeacon
params.messageNamespace = "com.mycompany.mybeaconservice"
params.type = "mybeacontype"
})
Standardmäßig sucht ein Beacon-Abo nach Beacon-Typen, Eddystone und
iBeacon Wenn iBeacon-Scans aktiviert sind, werden Nutzer aufgefordert,
dass die App ihre Standortdaten verwenden darf. Die Info.plist
deiner App muss
Fügen Sie den Schlüssel NSLocationWhenInUseUsageDescription
mit einer kurzen Erklärung
warum der Standort verwendet wird. Weitere Informationen finden Sie unter
Dokumentation von Apple
.
Wenn Sie nur nach Eddystone-Beacons suchen möchten, können Sie iBeacon deaktivieren.
und iOS fragt den Nutzer nicht nach GNSBeaconStrategy
Berechtigung zur Nutzung des Standorts. Im folgenden Snippet sehen Sie, wie iBeacon deaktiviert wird
nach dem obigen ursprünglichen Abo suchen:
Objective-C
id<GNSSubscription> beaconSubscription = [messageManager
subscriptionWithMessageFoundHandler:myMessageFoundHandler
messageLostHandler:myMessageLostHandler
paramsBlock:^(GNSSubscriptionParams *params) {
params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
params.beaconStrategy =
[GNSBeaconStrategy strategyWithParamsBlock:^(GNSBeaconStrategyParams *params) {
params.includeIBeacons = NO;
};
}];
Swift
let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler(
myMessageFoundHandler, messageLostHandler: myMessageLostHandler,
paramsBlock: { (params: GNSSubscriptionParams!) in
params.deviceTypesToDiscover = .BLEBeacon
params.beaconStrategy =
GNSBeaconStrategy(paramsBlock: { (params: GNSBeaconStrategyParams!) in
params.includeIBeacons = false
})
})
Standardmäßig ist das Scannen mit geringem Energieverbrauch aktiviert. Dies kann manchmal zu großen Latenzen bei der Suche nach Eddystone-Beacons auftreten. Wenn der Energiesparmodus deaktiviert ist, iBeacon-Scans werden eingesetzt, um Eddystone-Beacons zu finden, wodurch diese Latenzen. Dies führt jedoch zu einer höheren Akkunutzung und iOS fragt nach der um die Berechtigung zur Verwendung des Standorts zu erhalten.
Das folgende Snippet zeigt, wie der Energiesparmodus deaktiviert wird, wenn nach Eddystone-Beacons.
Objective-C
id<GNSSubscription> beaconSubscription = [messageManager
subscriptionWithMessageFoundHandler:myMessageFoundHandler
messageLostHandler:myMessageLostHandler
paramsBlock:^(GNSSubscriptionParams *params) {
params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
params.beaconStrategy =
[GNSBeaconStrategy strategyWithParamsBlock:^(GNSBeaconStrategyParams *params) {
params.includeIBeacons = NO;
params.lowPowerPreferred = NO;
};
}];
Swift
let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler(
myMessageFoundHandler, messageLostHandler: myMessageLostHandler,
paramsBlock: { (params: GNSSubscriptionParams!) in
params.deviceTypesToDiscover = .BLEBeacon
params.beaconStrategy =
GNSBeaconStrategy(paramsBlock: { (params: GNSBeaconStrategyParams!) in
params.includeIBeacons = false
params.lowPowerPreferred = false
})
})
Beim Scannen nach iBeacons wird dem Dialogfeld für die Berechtigung zur Standortermittlung unter iOS ein
Dialogfeld mit den Berechtigungen „Nearby“. Wenn Sie dieses Dialogfeld überschreiben möchten (für
um einen Preflight-
Standard bereitzustellen, Dialogfeld, in dem erklärt wird, warum die Berechtigung zur Standortermittlung
erforderlich ist, legen Sie für permissionRequestHandler
einen benutzerdefinierten Block in der
Aboparameter. Das folgende Snippet zeigt, wie dies funktioniert:
Objective-C
id<GNSSubscription> beaconSubscription = [messageManager
subscriptionWithMessageFoundHandler:myMessageFoundHandler
messageLostHandler:myMessageLostHandler
paramsBlock:^(GNSSubscriptionParams *params) {
params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
params.permissionRequestHandler = ^(GNSPermissionHandler permissionHandler) {
// Show your custom dialog here, and don't forget to call permissionHandler after it is dismissed
permissionHandler(userGavePermission);
};
}];
Swift
let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler(
myMessageFoundHandler, messageLostHandler: myMessageLostHandler,
paramsBlock: { (params: GNSSubscriptionParams!) in
params.deviceTypesToDiscover = .BLEBeacon
params.permissionRequestHandler = { (permissionHandler: GNSPermissionHandler!) in
// Show your custom dialog here, and don't forget to call permissionHandler after it is dismissed
permissionHandler(userGavePermission);
}
})
Suchlauf im Hintergrund
Da das Beacon-Scanning BLE verwendet, kann es im Hintergrund ausgeführt werden. Hier sind einige Wichtige Hinweise zur Verwendung des Hintergrundmodus:
- Für BLE im Hintergrund fallen zusätzliche Akkukosten an. Die Kosten sind niedrig, aber Sie bevor Sie sich für den Hintergrundmodus entscheiden.
- iOS fordert den Nutzer um die Berechtigung zur Verwendung der Standortermittlung im Hintergrund, wenn Die iBeacon-Suche ist aktiviert oder der Energiesparmodus ist deaktiviert.
So aktivieren Sie das Beacon-Scanning im Hintergrund:
Aktiviere den Hintergrundmodus für dein Abo, indem du eine konfiguriertes
GNSBeaconStrategy
-Objekt. Das folgende Snippet zeigt, wie Sie dies:Objective-C
id<GNSSubscription> beaconSubscription = [messageManager subscriptionWithMessageFoundHandler:myMessageFoundHandler messageLostHandler:myMessageLostHandler paramsBlock:^(GNSSubscriptionParams *params) { params.deviceTypesToDiscover = kGNSDeviceBLEBeacon; params.beaconStrategy = [GNSBeaconStrategy strategyWithParamsBlock:^(GNSBeaconStrategyParams *params) { params.allowInBackground = YES; }]; }];
Swift
let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler( myMessageFoundHandler, messageLostHandler: myMessageLostHandler, paramsBlock: { (params: GNSSubscriptionParams!) in params.deviceTypesToDiscover = .BLEBeacon params.beaconStrategy = GNSBeaconStrategy(paramsBlock: { (params: GNSBeaconStrategyParams!) in params.allowInBackground = true }) })
Fügen Sie dem
Info.plist
Ihrer App die erforderlichen Einträge hinzu:UIBackgroundModes
Einträge:bluetooth-central
für BLE-Scans im Hintergrund.location
für iBeacon-Scans im Hintergrund im Hochenergiemodus. Sie können dies weglassen, wenn Sie einen Scan mit geringem Energieverbrauch für Eddystone ausführen. Beacons sind zulässig.
NSLocationAlwaysUsageDescription
-String, der beschreibt, warum das Tracking durchgeführt wird den Standort des Nutzers im Hintergrund. Beispiel: „Dein Standort ist um im Hintergrund nach Beacons zu suchen.“ Weitere Informationen finden Sie unter Dokumentation von Apple . Sie können dies auslassen, wenn Sie für Nur Eddystone-Beacons.
Kann der Nutzer das Scannen im Hintergrund in Ihrer App aktivieren oder deaktivieren? In diesem Fall sollte den Wert für den Hintergrundmodus unter
NSUserDefaults
speichern, da iOS Ihre App jederzeit und überall ansehen, während sie im Hintergrund läuft. Ihre App sollte Folgendes tun: Folgendes:- Speichert den Wert für den Hintergrundmodus jedes Mal in
NSUserDefaults
, wenn der Nutzer und ändert es. - Beim Start aus
NSUserDefaults
lesen und das Beacon wiederherstellen Abo, wenn der Hintergrundmodus aktiviert ist.
- Speichert den Wert für den Hintergrundmodus jedes Mal in
Hintergrundbenachrichtigungen
Wenn Sie möchten, dass Ihre App den Nutzer benachrichtigt, wenn Beacons während Hintergrund hinzugefügt haben, können Sie lokale Benachrichtigungen. Weitere Informationen finden Sie unter Hintergrundbenachrichtigungen