Opublikuj i zasubskrybuj

Wymiana wiadomości z urządzeniami w pobliżu to interfejs API typu publikowanie–subskrypcja, który umożliwia wymianę małych pakietów danych między urządzeniami w pobliżu. Gdy urządzenie opublikuje wiadomość, urządzenia w pobliżu mogą ją otrzymać. W tym przewodniku znajdziesz informacje o wszystkich funkcjach, które musisz zaimplementować w aplikacji, 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 pobliższego urządzenia, wysyła go na serwer Nearby Messages, 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 nadawania tokenów lub skanowania pod kątem tokenów. Domyślnie nadawanie i skanowanie odbywa się na wszystkich nośnikach. Aby prowadzić wyszukiwanie w podzbiorze lub w przypadku określonych mediów oraz określać, czy ma być przeprowadzane przesyłanie czy skanowanie, musisz przekazać dodatkowe parametry podczas tworzenia publikacji i subskrypcji.

Podczas aktywnego publikowania i subskrybowania wyświetla się powiadomienie „W pobliżu jest aktywne”, 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 Nearby. Dzięki temu użytkownicy mogą oszczędzać czas pracy na baterii, jeśli nie potrzebują usługi Nearby. Udostępnia on użytkownikom te opcje:

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

Możesz używać zdarzeń PublishCallback()SubscribeCallback(), aby wykrywać przypadki, gdy użytkownik zmusza aplikację do zatrzymania korzystania z Nearby. W takim przypadku uruchamia się metoda onExpired().

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

Aby korzystać z interfejsu Nearby Messages API, wywołaj interfejs publish() lub subscribe(). Aplikacja powinna zawsze być symetryczna 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 były mniejsze niż 3 KB – takie wiadomości możemy dostarczyć szybciej – ale możemy obsługiwać do 100 KB w przypadku aplikacji, które tego wymagają. 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ę, której chcesz użyć.

Ten przykład pokazuje wywołanie funkcji 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, zadzwoń pod numer unpublish(). Aplikacja powinna co najmniej wywoływać metodę unpublish w metodzie onStop(). Przekaż ten sam obiekt Message, który został użyty do opublikowania (w tym przykładzie jest to mActiveMessage).

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

Subskrybowanie wiadomości

Aby subskrybować wiadomości z innych urządzeń, zadzwoń pod numer Nearby.getMessagesClient(Activity).subscribe(). Musisz podać MessageListener, aby odbierać subskrybowane wiadomości.

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

Ten 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 na urządzeniu, zadzwoń pod numer Nearby.getMessagesClient(Activity).unsubscribe(). Przekaż ten sam obiekt MessageListener, który został użyty do subskrypcji (w tym przykładzie jest to mMessageListener).

Poniższy przykładowy kod pokazuje, jak anulować subskrypcję:

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