アプリで Bluetooth Low Energy(BLE)ビーコン メッセージを受信できる ユーザーがパブリッシュしたメッセージをサブスクライブするのと同じメカニズムを 接続できます。
デフォルトでは、ビーコンの登録はアプリがフォアグラウンドにある場合にのみ機能します。 アプリがバックグラウンドに移行すると、定期購入は自動的に停止します。 ビーコンをスキャンします。詳しくは、バックグラウンド スキャン バックグラウンド スキャンを有効にする方法の詳細。
ビーコンに登録するには、deviceTypesToDiscover
パラメータを以下に設定します。
サブスクリプション パラメータの kGNSDeviceBLEBeacon
。次のスニペット
は、その方法を示しています。
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
})
上記のサブスクリプションでは、プロジェクトが所有するビーコンのみが検出され、 受信します。スペースに参加すると、 別の名前空間に登録されているビーコンがある場合、その名前空間を サブスクリプション パラメータ。同様に、特定のタイプのメッセージが必要な場合は、 フィルタリングのためにメッセージ タイプを渡すことができます。次のスニペットは、 手順:
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"
})
デフォルトでは、ビーコンの登録は、Eddystone と Eddystone の両方のビーコンをスキャンします。
iBeaconiBeacon スキャンが有効になっている場合、ユーザーは
位置情報を使用する権限をアプリに付与する必要があります。アプリの Info.plist
は
簡単な説明と NSLocationWhenInUseUsageDescription
キーを含める
位置情報が使用される理由詳しくは、
Apple のドキュメント
をご覧ください。
Eddystone ビーコンのみをスキャンする場合は、iBeacon を無効にします。
GNSBeaconStrategy
内をスキャンすると、iOS はユーザーに
位置情報の使用を許可しません次のスニペットは、iBeacon を無効にする方法を示しています。
上記の元の定期購入のスキャン:
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
})
})
デフォルトでは低消費電力スキャンが有効になっており、スキャンの実行時間が Eddystone ビーコンを探す際のレイテンシを短縮できます。省電力モードが無効になると iBeacon スキャンは Eddystone ビーコンを見つけるために使用されます。これにより、 レイテンシを短縮できます。ただし、この方法ではバッテリー使用量が増え、iOS では ユーザーに位置情報の使用を許可するかどうか
次のスニペットは、HSM をスキャンする際に省電力モードを無効にする方法を示しています。 エディストン ビーコンです。
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
})
})
iBeacons をスキャンする場合、iOS の位置情報の利用許可ダイアログの前に
Nearby 権限ダイアログ。このダイアログをオーバーライドする場合(
「プリフライト」を行う位置情報の利用許可の理由を説明するダイアログ
必要な場合は、permissionRequestHandler
を
サブスクリプション パラメータ。次のスニペットは、その方法を示しています。
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);
}
})
バックグラウンド スキャン
ビーコン スキャンは BLE を使用しているため、バックグラウンドで動作できます。以下に例を示します。 バックグラウンド モードを使用するかどうかを決める際に注意すべき点は以下のとおりです。
- バックグラウンド BLE にはバッテリーのコストがかかります。費用は低額ですが、 測定する必要があります
- 次の場合、iOS はバックグラウンドで位置情報を使用する許可をユーザーに求めます。 iBeacon スキャンが有効になっているか、低電力モードが無効になっています。
バックグラウンドでビーコン スキャンを有効にする手順は次のとおりです。
サブスクリプションのバックグラウンド モードを有効にするには、 構成済みの
GNSBeaconStrategy
オブジェクト。次のスニペットは、 これを次のように使用します。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 }) })
必要なエントリをアプリの
Info.plist
に追加します。UIBackgroundModes
エントリ:bluetooth-central
: バックグラウンドで BLE スキャンする場合。location
: 高電力モードを使用してバックグラウンドで iBeacon をスキャンします。 Eddystone の低電力スキャンを実行する場合は、省略できます。 ビーコンのみです。
トラッキングする理由を説明する
NSLocationAlwaysUsageDescription
文字列 バックグラウンドでユーザーの現在地を認識します。たとえば「お住まいの地域は バックグラウンドでビーコンをスキャンする必要があります。」詳しくは、 Apple のドキュメント をご覧ください。他の VM に対して低電力スキャンを実行する場合は、このオプションを省略できます。 Eddystone ビーコンのみ。
ユーザーはアプリのバックグラウンド スキャンを有効または無効にできますか?もしそうならば、 iOS では強制終了される可能性があるため、バックグラウンド モードの値を
NSUserDefaults
に保存する必要があります バックグラウンドでいつでも実行できます。アプリは 次のとおりです。- ユーザーが操作を実行したとき、バックグラウンド モードの値を
NSUserDefaults
に保存する 変更します。 - 起動時に
NSUserDefaults
から読み取り、ビーコンを復元します バックグラウンド モードが有効になっている場合は、サブスクリプションも課金されません。
- ユーザーが操作を実行したとき、バックグラウンド モードの値を
バックグラウンドでの通知
スペース中にビーコンが見つかったときにアプリからユーザーに通知したい場合は、 背景には、 ローカル通知。詳しくは、 バックグラウンド通知。