Pubblica e iscriviti

Nearby Messages è un'API di pubblicazione e iscrizione che consente ai dispositivi nelle vicinanze di scambiare piccoli payload di dati. Una volta che un dispositivo pubblica un messaggio, i dispositivi nelle vicinanze possono riceverlo. Questa guida illustra tutte le funzionalità che la tua app deve implementare per pubblicare messaggi e abbonarsi ai messaggi utilizzando l'API Nearby Messages.

L'insieme dei dispositivi nelle vicinanze è determinato dallo scambio di piccoli token tramite Bluetooth. Quando un dispositivo rileva un token da un dispositivo nelle vicinanze, lo invia al server Nearby Messages per convalidarlo e verificare se ci sono messaggi da recapitare per l'insieme attuale di abbonamenti dell'applicazione.

Un'applicazione può controllare l'insieme di mezzi utilizzati per il rilevamento dei dispositivi e se i mezzi vengono utilizzati per trasmettere token e/o cercare token. Per impostazione predefinita, la trasmissione e la scansione vengono eseguite su tutti i mezzi. Per eseguire il rilevamento su un sottoinsieme o su supporti e per controllare se trasmettere o eseguire la scansione, devi trasmettere parametri aggiuntivi quando crei pubblicazioni e abbonamenti.

Durante la pubblicazione e l'iscrizione attive, viene visualizzata una notifica "Qui vicino è in uso" che informa gli utenti che la funzionalità è attiva. Questa notifica viene visualizzata solo quando una o più app utilizzano attivamente Nearby, offrendo agli utenti la possibilità di risparmiare batteria se Nearby non è necessario. Fornisce agli utenti le seguenti opzioni:

  • Vai a un'app per disattivare la funzionalità Nelle vicinanze.
  • Forzare l'interruzione dell'utilizzo di Nearby da parte di un'app.
  • Vai alla schermata Impostazioni nelle vicinanze.

Puoi utilizzare PublishCallback() e SubscribeCallback() per rilevare i casi in cui un utente forza l'app a interrompere l'utilizzo di Nearby. Quando ciò accade, viene attivato il metodo onExpired().

Poiché le API Nearby Messages possono influire sulla durata della batteria, devono essere utilizzate solo da un'attività in primo piano (ad eccezione di BLE background subscribe).

Chiama publish() e/o subscribe() per utilizzare l'API Nearby Messages. La tua app deve sempre essere simmetrica unpublish() e unsubscribe() in 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();
}

Pubblica un messaggio

Per pubblicare un messaggio, chiama Nearby.getMessagesClient(Activity).publish() passando l'array di byte del messaggio. Ti consigliamo di mantenere i messaggi al di sotto dei 3 KB, in modo da poterli recapitare più rapidamente, ma possiamo supportare fino a 100 KB per le app che ne hanno bisogno. Questo servizio non è pensato per lo scambio di oggetti più grandi come foto e video.

Puoi facoltativamente chiamare PublishOptions.setStrategy() per impostare la strategia da utilizzare.

L'esempio seguente mostra la chiamata a publish() per inviare un piccolo messaggio di testo:

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

Annullare la pubblicazione di un messaggio

Per annullare la pubblicazione di un messaggio, chiama il numero unpublish(). Come minimo, la tua app deve chiamare l'annullamento della pubblicazione nel metodo onStop(). Passa lo stesso oggetto Message utilizzato per la pubblicazione (mActiveMessage in questo esempio).

Il seguente esempio di codice mostra la chiamata a unpublish():

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

Iscriviti ai messaggi

Per abbonarti ai messaggi provenienti da altri dispositivi, chiama il numero Nearby.getMessagesClient(Activity).subscribe(). Per gestire la ricezione dei messaggi a cui hai effettuato l'iscrizione, devi superare un MessageListener.

Puoi facoltativamente chiamare SubscribeOptions.setStrategy() per impostare la strategia da utilizzare.

L'esempio seguente mostra la sottoscrizione ai messaggi:

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

Annulla iscrizione

Per annullare l'iscrizione e interrompere la ricezione di messaggi dal dispositivo, chiama Nearby.getMessagesClient(Activity).unsubscribe(). Passa lo stesso oggetto MessageListener utilizzato per l'abbonamento (mMessageListener in questo esempio).

Il seguente esempio di codice mostra l'annullamento dell'iscrizione:

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