Opublikuj i zasubskrybuj

Nearby Messages to interfejs API typu publikuj-subskrybuj, który umożliwia urządzeniom w pobliżu wymianę małych pakietów danych. Gdy urządzenie opublikuje wiadomość, urządzenia w pobliżu mogą ją odebrać. Ten przewodnik zawiera informacje o wszystkich funkcjach, które aplikacja musi zaimplementować, aby publikować wiadomości i subskrybować je za pomocą interfejsu Nearby Messages API.

Zestaw urządzeń w pobliżu jest określany przez wymianę małych tokenów przez Bluetooth. Gdy urządzenie wykryje token z urządzenia w pobliżu, wysyła go na serwer Nearby Messages, aby go zweryfikować i sprawdzić, czy są jakieś wiadomości do dostarczenia do bieżącego zestawu subskrypcji aplikacji.

Aplikacja może kontrolować zestaw mediów używanych do wykrywania urządzeń oraz to, czy media są używane do rozgłaszania tokenów lub skanowania w poszukiwaniu tokenów. Domyślnie rozgłaszanie i skanowanie odbywa się we wszystkich mediach. Aby wykrywać urządzenia w podzbiorze mediów i kontrolować, czy rozgłaszać, czy skanować, musisz przekazać dodatkowe parametry podczas tworzenia publikacji i subskrypcji.

Gdy publikowanie i subskrybowanie jest aktywne, wyświetla się powiadomienie „Nearby jest w użyciu”, informujące użytkowników, że Nearby jest aktywne. To powiadomienie jest wyświetlane tylko wtedy, gdy co najmniej jedna aplikacja aktywnie korzysta z Nearby. Dzięki temu użytkownicy mogą oszczędzać baterię, jeśli Nearby nie jest potrzebne. Użytkownicy mają do wyboru te opcje:

  • Przejdź do aplikacji, aby wyłączyć Nearby.
  • Wymuś zatrzymanie korzystania z Nearby przez aplikację.
  • Przejdź do ekranu Ustawienia Nearby.

Możesz użyć PublishCallback() i SubscribeCallback() , aby nasłuchiwać przypadków, w których użytkownik wymusza zatrzymanie korzystania z Nearby przez aplikację. Gdy tak się stanie, zostanie wywołana onExpired() metoda.

Interfejsy Nearby Messages API mogą mieć wpływ na żywotność baterii, dlatego należy ich używać tylko w przypadku aktywności na pierwszym planie (z wyjątkiem subskrypcji w tle przez BLE).

Aby użyć interfejsu Nearby Messages API, wywołaj publish() lub subscribe(). W metodzie onStop()aplikacja powinna zawsze symetrycznie wywoływać unpublish() i unsubscribe().

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

Opublikuj wiadomość

Aby opublikować wiadomość, wywołaj Nearby.getMessagesClient(Activity).publish() przekazując tablicę bajtów wiadomości. Zalecamy, aby wiadomości miały mniej niż 3 KB. Takie wiadomości możemy dostarczać szybciej. W przypadku aplikacji, które tego potrzebują, możemy obsługiwać wiadomości o rozmiarze do 100 KB. Ta usługa nie jest przeznaczona do wymiany większych obiektów, takich jak zdjęcia i filmy.

Opcjonalnie możesz wywołać PublishOptions.setStrategy() , aby ustawić strategię , której chcesz użyć.

Poniższy przykład pokazuje wywołanie publish() w celu wysłania krótkiej wiadomości tekstowej:

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

Cofnij publikację wiadomości

Aby cofnąć publikację wiadomości, wywołaj unpublish(). Aplikacja powinna co najmniej wywoływać unpublish w swojej onStop() metodzie. Przekaż ten sam Message obiekt, który został użyty do publikowania (mActiveMessage w tym przykładzie).

Poniższy przykład kodu pokazuje wywołanie unpublish():

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

Subskrybuj wiadomości

Aby subskrybować wiadomości z innych urządzeń, wywołaj Nearby.getMessagesClient(Activity).subscribe(). Musisz przekazać a MessageListener aby obsługiwać odbieranie subskrybowanych wiadomości.

Opcjonalnie możesz wywołać SubscribeOptions.setStrategy() , aby ustawić strategię , której chcesz użyć.

Poniższy przykład pokazuje subskrybowanie wiadomości:

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);
}

Anuluj subskrypcję

Aby anulować subskrypcję i przestać otrzymywać wiadomości z urządzenia, wywołaj Nearby.getMessagesClient(Activity).unsubscribe(). Przekaż ten sam MessageListener obiekt, który został użyty do subskrybowania (mMessageListener w tym przykładzie).

Poniższy przykład kodu pokazuje anulowanie subskrypcji:

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