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

アプリで Bluetooth Low Energy(BLE)ビーコン アタッチメントをサブスクライブできる ユーザーがパブリッシュしたメッセージをサブスクライブするのと同じメカニズムを 接続できます。定期購入に登録すると、 付近のデバイスの両方からメッセージを受信できます。

BLE ビーコン メッセージに登録する

アプリが BLE ビーコン メッセージをサブスクライブする方法は 2 つあります。

フォアグラウンドで購読

アプリがフォアグラウンドでビーコン メッセージをサブスクライブすると、スキャンが アプリが登録解除されるまで継続的に実行されます。フォアグラウンドのみを開始する アプリのアクティブな状態(通常はユーザーの操作に応答して)で定期購入が適用されます。

フォアグラウンド サブスクリプションを開始するには、 Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions) Strategy オプションを BLE_ONLY に設定します。

次のコード スニペットは、フォアグラウンド サブスクリプションの開始を示しています。 Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions):

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    mMessageListener = new MessageListener() {
        @Override
        public void onFound(Message message) {
            Log.d(TAG, "Found message: " + new String(message.getContent()));
        }

        @Override
        public void onLost(Message message) {
            Log.d(TAG, "Lost sight of message: " + new String(message.getContent()));
        }
    }
}

// Subscribe to receive messages.
private void subscribe() {
    Log.i(TAG, "Subscribing.");
    SubscribeOptions options = new SubscribeOptions.Builder()
            .setStrategy(Strategy.BLE_ONLY)
            .build();
    Nearby.getMessagesClient(this).subscribe(mMessageListener, options);
}

定期購入が不要になった場合は、アプリは登録を解除する必要があります 呼び出す Nearby.getMessagesClient(Activity).unsubscribe(MessageListener)

バックグラウンドでチャンネル登録する

アプリがバックグラウンドでビーコン メッセージに登録すると、省電力スキャンによって アプリが現在アクティブでない場合でも、画面オンイベントでトリガーされます。 これらのスキャン通知を使用して「スリープ解除」できますレスポンスでアプリが 見つけることができますバックグラウンドでの定期購入は フォアグラウンド サブスクリプションではあるものの、レイテンシが高く、信頼性は低くなります。

アプリは以下を呼び出して、バックグラウンドで定期購入を開始できます。 Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions) Strategy オプションを BLE_ONLY に設定します。

次のコード スニペットは、バックグラウンド サブスクリプションを開始する方法を示しています。 通話中 Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions)

// Subscribe to messages in the background.
private void backgroundSubscribe() {
    Log.i(TAG, "Subscribing for background updates.");
    SubscribeOptions options = new SubscribeOptions.Builder()
            .setStrategy(Strategy.BLE_ONLY)
            .build();
    Nearby.getMessagesClient(this).subscribe(getPendingIntent(), options);
}

private PendingIntent getPendingIntent() {
    return PendingIntent.getBroadcast(this, 0, new Intent(this, BeaconMessageReceiver.class),
            PendingIntent.FLAG_UPDATE_CURRENT);
}

次のコード スニペットは、 BeaconMessageReceiver クラス。

@Override
public void onReceive(Context context, Intent intent) {
    Nearby.getMessagesClient(context).handleIntent(intent, new MessageListener() {
        @Override
        public void onFound(Message message) {
            Log.i(TAG, "Found message via PendingIntent: " + message);
        }

        @Override
        public void onLost(Message message) {
            Log.i(TAG, "Lost message via PendingIntent: " + message);
        }
    });
}

定期購入が不要になった場合は、アプリは登録を解除する必要があります 呼び出す Nearby.getMessagesClient(Activity).unsubscribe(PendingIntent)

ビーコン メッセージの解析

ビーコンの添付ファイル は、ビーコンに追加できる任意のデータの塊です。 各アタッチメントは、次の部分で構成されています。

  • Namespace: 名前空間識別子。
  • タイプ: データのタイプ。
  • Data: アタッチメントのデータ値。

次のコード スニペットは、メッセージ リスナーを使用して メッセージの例:

mMessageListener = new MessageListener() {
    @Override
    public void onFound(Message message) {
        // Do something with the message here.
        Log.i(TAG, "Message found: " + message);
        Log.i(TAG, "Message string: " + new String(message.getContent()));
        Log.i(TAG, "Message namespaced type: " + message.getNamespace() +
                "/" + message.getType());
    }

    ...
};

コンテンツの解析はバイトの形式によって異なります。この例では、 コンテンツ バイトは UTF-8 文字列をエンコードしますが、ビーコン メッセージは 他のバイト形式(シリアル化されたプロトコル バッファなど)をエンコードする 詳しくは、ビーコンへの添付ファイルの追加をご覧ください。

プロジェクトに関連付けられている名前空間を確認するには、次のコマンドを呼び出します。 namespaces.list

注:

  • バッテリーの消費を抑えるには、Nearby.getMessagesClient(Activity).unsubscribe() を呼び出します。 これをアクティビティの onStop() 関数で呼び出します。なお、これは サブスクライブしていることをフォアグラウンドで確認します。
  • レイテンシを短縮するには、Nearby.getMessagesClient(Activity).subscribe() を呼び出すときに Strategy.BLE_ONLY オプションを使用します。 このオプションを設定すると、Nearby Messages API は従来の Bluetooth をトリガーしません 構成されますこれにより、ビーコン検出のレイテンシが短縮されます。 すべてのスキャンタイプを順番に繰り返すわけではありません。
  • メッセージ ペイロードをビーコンに添付するには、 Proximity Beacon API