發布及訂閱

Nearby Messages 是發布訂閱 API,可讓鄰近裝置交換訊息 少量的資料酬載裝置發布訊息後,鄰近的裝置即可 接收訊息。本指南將帶您認識所有功能 應用程式必須實作,才能發布訊息及訂閱訊息 也就是 Nearby Messages API

鄰近裝置組合是由先前使用的小權杖交換而決定 藍牙。裝置偵測到附近裝置傳來權杖時,就會傳送 憑證傳送至 Nearby Messages 伺服器進行驗證,並檢查 Google Cloud 服務是否有任何 應用程式目前的訂閱項目組合送出的訊息。

應用程式可以控制用於探索裝置的媒介組合, 是否使用媒介來廣播符記和/或掃描符記。 根據預設,所有媒介都會播送及掃描。待辦 與特定類型或媒介相關的探索內容,並控制要播送或掃描、 您必須在建立出版品時傳送其他參數 訂閱項目。

積極發布與訂閱時,系統會顯示「正在使用鄰近分享功能」通知 時,請通知使用者「鄰近分享」功能已啟用。這則通知是 有一或多個應用程式經常使用鄰近分享功能時,系統才會顯示這個功能,方便使用者 對於不需要使用「鄰近分享」時,可能可延長電池續航力。這項服務提供 使用者可以使用下列選項:

  • 如要停用鄰近分享功能,請前往應用程式。
  • 強制停止應用程式使用鄰近分享功能。
  • 前往「Nearby Settings」畫面。

您可以使用 PublishCallback()SubscribeCallback() 監聽使用者強制停止應用程式使用鄰近分享功能的案例。當此情況 會發生 onExpired()敬上 方法。

Nearby Messages API 可能會影響電池續航力, 這些 API 只應在前景活動中使用 ( BLE 背景訂閱)。

呼叫 publish() 和/或 subscribe() 才能使用 Nearby Messages API您的應用程式應一律 對稱 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 - 我們可以更快傳送這些訊息,但我們可以為 有需要的應用程式這項服務不適用於交換較大的物件, 像是相片和影片。

您可以選擇呼叫 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() 中呼叫「取消發布」 方法。傳遞相同的 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);
}