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()
i 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()
i unsubscribe()
w 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);
}