Opublikuj i zasubskrybuj

Wiadomości w pobliżu to interfejs API typu publikowanie-subskrypcja, który umożliwia urządzeniom w pobliżu wymianę niewielkich pakietów danych. Gdy urządzenie opublikuje wiadomość, urządzenia w pobliżu mogą ją odebrać. Z tego przewodnika dowiesz się, jakie funkcje musi mieć Twoja aplikacja, aby mogła publikować wiadomości i subskrybować je 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 do serwera Wiadomości w pobliżu, aby go zweryfikować i sprawdzić, czy są jakieś wiadomości do dostarczenia dla 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 przesyłania tokenów lub skanowania w poszukiwaniu tokenów. Domyślnie transmisja i skanowanie odbywają się na wszystkich nośnikach. Aby przeprowadzić wykrywanie na podzbiorze lub nośnikach i kontrolować, czy chcesz transmitować, czy skanować, musisz przekazać dodatkowe parametry podczas tworzenia publikacji i subskrypcji.

Podczas aktywnego publikowania i subskrybowania wyświetlane jest powiadomienie „Używana jest funkcja W pobliżu”, które informuje użytkowników, że funkcja W pobliżu jest aktywna. To powiadomienie wyświetla się tylko wtedy, gdy co najmniej 1 aplikacja aktywnie korzysta z funkcji W pobliżu. Dzięki temu użytkownicy mogą oszczędzać baterię, gdy nie potrzebują tej funkcji. Użytkownicy mają do wyboru te opcje:

  • Przejdź do aplikacji, aby wyłączyć funkcję W pobliżu.
  • Wymuś zatrzymanie korzystania z funkcji Udostępnianie w pobliżu przez aplikację.
  • Otwórz ekran Ustawienia funkcji Urządzenia w pobliżu.

Możesz użyć PublishCallback() i SubscribeCallback(), aby wykrywać przypadki, gdy użytkownik wymusza na aplikacji zaprzestanie korzystania z funkcji W pobliżu. Gdy to nastąpi, zostanie wywołana 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).

Aby używać interfejsu Nearby Messages API, wywołaj publish() lub subscribe(). 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 Nearby.getMessagesClient(Activity).publish(), przekazując tablicę bajtów wiadomości. Zalecamy, aby wiadomości nie przekraczały 3 KB – takie wiadomości możemy dostarczać szybciej – ale w razie potrzeby 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.

Możesz opcjonalnie wywołać metodę PublishOptions.setStrategy(), aby ustawić strategię, której chcesz używać.

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

Cofanie publikacji wiadomości

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

Poniższy przykładowy kod pokazuje wywołanie unpublish():

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

Subskrybowanie wiadomości

Aby zasubskrybować wiadomości z innych urządzeń, wywołaj metodę Nearby.getMessagesClient(Activity).subscribe(). Aby obsługiwać odbieranie wiadomości, musisz przekazać MessageListener.

Możesz opcjonalnie wywołać metodę SubscribeOptions.setStrategy(), aby ustawić strategię, której chcesz używać.

Poniższy przykład pokazuje, jak zasubskrybować 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 z urządzenia, 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ładowy kod pokazuje, jak anulować subskrypcję:

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