Opublikuj i zasubskrybuj

Wymiana wiadomości z urządzeniami w pobliżu to interfejs API typu publikowanie-subskrypcja, 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ć. Z tego przewodnika dowiesz się, jakie funkcje musi zaimplementować Twoja aplikacja, aby publikować i subskrybować wiadomości za pomocą interfejsu Nearby Messages API.

Zestaw urządzeń w pobliżu jest określany na podstawie wymiany 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 w ramach bieżącego zestawu subskrypcji aplikacji.

Aplikacja może kontrolować zestaw nośników używanych do wykrywania urządzeń oraz to, czy nośniki są używane do rozgłaszania tokenów lub skanowania w poszukiwaniu tokenów. Domyślnie nadawanie i skanowanie odbywa się we wszystkich mediach. Aby przeprowadzić wykrywanie w przypadku podzbioru lub nośników oraz określić, czy ma być ono prowadzone w trybie transmisji czy skanowania, musisz przekazać dodatkowe parametry podczas tworzenia publikacji i subskrypcji.

Gdy publikowanie i subskrybowanie jest aktywne, wyświetla się powiadomienie „Funkcja W pobliżu jest używana”, które informuje użytkowników, że funkcja W pobliżu jest aktywna. To powiadomienie jest wyświetlane tylko wtedy, gdy co najmniej 1 aplikacja aktywnie korzysta z usługi Nearby. Dzięki temu użytkownicy mogą oszczędzać baterię, jeśli usługa Nearby nie jest potrzebna. Użytkownicy mają do wyboru te opcje:

  • Otwórz aplikację, w której chcesz wyłączyć usługę W pobliżu.
  • Wymuś zatrzymanie korzystania z funkcji W pobliżu przez aplikację.
  • Otwórz ekran Ustawienia w pobliżu.

Możesz użyć PublishCallback()SubscribeCallback(), aby nasłuchiwać przypadków, w których użytkownik wymusza zatrzymanie aplikacji korzystającej z Nearby. W takim przypadku wywoływana jest metoda onExpired().

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

Wywołaj publish() lub subscribe(), aby użyć interfejsu Nearby Messages API. Aplikacja powinna zawsze symetrycznie 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();
}

Opublikuj wiadomość

Aby opublikować wiadomość, wywołaj funkcję Nearby.getMessagesClient(Activity).publish(), przekazując tablicę bajtów wiadomości. Zalecamy, aby wiadomości miały mniej niż 3 KB, ponieważ możemy je dostarczać szybciej. W przypadku aplikacji, które tego potrzebują, możemy jednak 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ć funkcję PublishOptions.setStrategy(), aby ustawić strategię do użycia.

Poniższy przykład pokazuje wywołanie funkcji publish() w celu wysłania krótkiego SMS-a:

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

Cofanie publikacji wiadomości

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

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

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

Subskrybowanie wiadomości

Aby subskrybować wiadomości z innych urządzeń, zadzwoń pod numer Nearby.getMessagesClient(Activity).subscribe(). Aby obsługiwać odbieranie subskrybowanych wiadomości, musisz przekazać MessageListener.

Opcjonalnie możesz wywołać funkcję SubscribeOptions.setStrategy(), aby ustawić strategię do użycia.

Poniższy przykład pokazuje, jak subskrybować 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 zrezygnować z subskrypcji i przestać otrzymywać wiadomości na urządzenie, zadzwoń pod numer Nearby.getMessagesClient(Activity).unsubscribe(). Przekaż ten sam obiekt MessageListener, który został użyty do subskrypcji (w tym przykładzie mMessageListener).

Poniższy przykład kodu pokazuje, jak zrezygnować z subskrypcji:

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