公開と登録

Nearby Messages は、近くのデバイスが小さなデータ ペイロードを交換できるパブリッシュ / サブスクライブ API です。デバイスがメッセージを公開すると、近くのデバイスがそのメッセージを受信できるようになります。このガイドでは、Nearby Messages API を使用してメッセージを公開し、メッセージをサブスクライブするためにアプリに実装する必要があるすべての機能について説明します。

近くのデバイスのセットは、Bluetooth を介した小さなトークンの交換によって決定されます。デバイスが近くのデバイスからトークンを検出すると、そのトークンを Nearby Messages サーバーに送信して検証し、アプリの現在のサブスクリプション セットに配信するメッセージがあるかどうかを確認します。

アプリは、デバイスの検出に使用するメディアのセットと、トークンのブロードキャストやトークンのスキャンにメディアを使用するかどうかを制御できます。デフォルトでは、すべてのメディアでブロードキャストとスキャンが行われます。メディアのサブセットで検出を行い、ブロードキャストまたはスキャンを行うかどうかを制御するには、パブリケーションとサブスクリプションを作成するときに追加のパラメータを渡す必要があります。

アクティブにパブリッシュとサブスクライブを行うと、「Nearby が使用中です」という通知が表示され、Nearby がアクティブであることをユーザーに知らせます。この通知は、1 つ以上のアプリが Nearby をアクティブに使用している場合にのみ表示されます。これにより、Nearby が不要な場合にユーザーは電池の消費を抑えることができます。ユーザーには次のオプションが用意されています。

  • アプリに移動して Nearby を無効にする。
  • アプリが Nearby の使用を強制的に停止する。
  • [ニアバイシェアの設定] 画面に移動する。

PublishCallback()SubscribeCallback() を使用すると、ユーザーがアプリに Nearby の使用を強制的に停止させた場合にリッスンできます。この場合、 メソッドがトリガーされます。onExpired()

Nearby Messages API は電池の消費に影響を与える可能性があるため、 フォアグラウンド アクティビティからのみ使用する必要があります( BLE バックグラウンド サブスクライブを除く)。

Nearby Messages API を使用するには、publish() または subscribe() を呼び出します。アプリは常に 対称的に unpublish()unsubscribe()onStop()を行う必要があります。

@Override
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()));
        }
    }

    mMessage = new Message("Hello World".getBytes());
}

@Override
public void onStart() {
    super.onStart();
    ...
    Nearby.getMessagesClient(this).publish(mMessage);
    Nearby.getMessagesClient(this).subscribe(mMessageListener);
}

@Override
public void onStop() {
    Nearby.getMessagesClient(this).unpublish(mMessage);
    Nearby.getMessagesClient(this).unsubscribe(mMessageListener);
    ...
    super.onStop();
}

メッセージの公開

メッセージを公開するには、メッセージ バイト配列を渡して Nearby.getMessagesClient(Activity).publish() を呼び出します。メッセージは 3 KB 未満にすることをおすすめします。このようなメッセージはより迅速に配信できます。ただし、必要なアプリの場合は最大 100 KB までサポートできます。このサービスは、写真や動画などの大きなオブジェクトを交換するためのものではありません。

必要に応じて PublishOptions.setStrategy() を呼び出して、使用する ストラテジ を設定できます。

次の例は、publish() を呼び出して小さなテキスト メッセージを送信する方法を示しています。

private void publish(String message) {
    Log.i(TAG, "Publishing message: " + message);
    mActiveMessage = new Message(message.getBytes());
    Nearby.getMessagesClient(this).publish(mActiveMessage);
}

メッセージの公開を停止

メッセージの公開を停止するには、unpublish() を呼び出します。アプリは少なくとも `onStop()` メソッドで公開を停止する必要があります。onStop()公開に使用したのと同じ Message オブジェクト(この例では mActiveMessage)を渡します。

次のコード例は、unpublish() を呼び出す方法を示しています。

private void unpublish() {
    Log.i(TAG, "Unpublishing.");
    if (mActiveMessage != null) {
        Nearby.getMessagesClient(this).unpublish(mActiveMessage);
        mActiveMessage = null;
    }
}

メッセージをサブスクライブする

他のデバイスからのメッセージをサブスクライブするには、Nearby.getMessagesClient(Activity).subscribe() を呼び出します。サブスクライブしたメッセージの受信を処理する MessageListener を渡す必要があります。

必要に応じて SubscribeOptions.setStrategy() を呼び出して、使用する ストラテジ を設定できます。

次の例は、メッセージをサブスクライブする方法を示しています。

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.");
    Nearby.getMessagesClient(this).subscribe(mMessageListener, options);
}

配信停止

デバイス メッセージの配信を停止するには、 Nearby.getMessagesClient(Activity).unsubscribe() を呼び出します。サブスクライブに使用したのと同じ MessageListener オブジェクト(この例ではmMessageListener)を渡します。

次のコード例は、サブスクライブを解除する方法を示しています。

private void unsubscribe() {
    Log.i(TAG, "Unsubscribing.");
    Nearby.getMessagesClient(this).unsubscribe(mMessageListener);
}