ビーコン メッセージを受信する

アプリで 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 から読み取り、ビーコンを復元します バックグラウンド モードが有効になっている場合は、サブスクリプションも課金されません。

バックグラウンドでの通知

スペース中にビーコンが見つかったときにアプリからユーザーに通知したい場合は、 背景には、 ローカル通知。詳しくは、 バックグラウンド通知