Publier et s'abonner

Nearby Messages est une API de publication et d'abonnement qui permet aux appareils à proximité d'échanger de petites charges utiles de données. Une fois qu'un appareil publie un message, les appareils à proximité peuvent recevoir le message. Ce guide vous présente toutes les fonctionnalités votre application doit implémenter pour publier des messages et s'abonner aux messages. à l'aide de l'API Nearby Messages.

L'ensemble des appareils à proximité est déterminé par l'échange de petits jetons sur Bluetooth Lorsqu'un appareil détecte un jeton d'un appareil à proximité, il envoie le au serveur Nearby Messages pour le valider et vérifier s'il messages à distribuer pour l'ensemble actuel d'abonnements de l'application.

Une application peut contrôler l'ensemble des supports utilisés pour la détection d'appareils. si les supports sont utilisés pour diffuser et/ou rechercher des jetons. Par défaut, la diffusion et l'analyse sont effectuées sur tous les supports. À faire découverte sur un sous-ensemble ou des supports, et pour contrôler si elles doivent être diffusées ou analysées, vous devez transmettre des paramètres supplémentaires lorsque vous créez des publications et abonnements.

Lors de la publication et de l'abonnement actifs, l'option "À proximité est utilisée" notification s'affiche, informant les utilisateurs que la fonctionnalité À proximité est active. Cette notification est ne s'affiche que lorsqu'une ou plusieurs applications utilisent activement la fonctionnalité À proximité. Les utilisateurs une chance de préserver l'autonomie de la batterie si Nearby n'est pas nécessaire. Il fournit les utilisateurs avec les options suivantes:

  • Accédez à une application pour désactiver la fonctionnalité À proximité.
  • Forcer une application à cesser d'utiliser Nearby
  • Accédez à l'écran Paramètres à proximité.

Vous pouvez utiliser PublishCallback() et SubscribeCallback() pour écouter les cas où un utilisateur force l'application à cesser d'utiliser Nearby. Lorsque cette se produit, le onExpired() est déclenchée.

Étant donné que les API Nearby Messages peuvent avoir un impact sur l'autonomie de la batterie, vous ne devez les utiliser qu'à partir d'une activité de premier plan (à l'exception de S'abonner en arrière-plan BLE

Appeler publish() et/ou subscribe() pour utiliser l'API Nearby Messages. Votre application doit toujours de manière symétrique unpublish() et unsubscribe() en 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();
}

Publier un message

Pour publier un message, appelez Nearby.getMessagesClient(Activity).publish() en transmettant le tableau d'octets de votre message. Nous vous recommandons de limiter le nombre de messages à 3 Ko. Nous pouvons diffuser ces messages plus rapidement, mais nous pouvons prendre en charge jusqu'à 100 Ko pour les applications qui en ont besoin. Ce service n'est pas conçu pour échanger des objets plus volumineux tels que comme des photos et des vidéos.

Vous pouvez éventuellement appeler PublishOptions.setStrategy() pour définir la stratégie utiliser.

L'exemple suivant montre comment appeler publish() pour envoyer un petit texte message:

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

Annuler la publication d'un message

Pour annuler la publication d'un message, appelez unpublish(). Vos l'application doit appeler l'option "unpublish" dans son élément onStop() . Transmettez le même Message utilisé pour la publication (mActiveMessage dans cet exemple).

L'exemple de code suivant vous montre comment appeler unpublish():

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

S'abonner aux messages

Pour vous abonner aux messages d'autres appareils, appelez Nearby.getMessagesClient(Activity).subscribe(). Vous devez transmettre un MessageListener pour gérer la réception des messages d'abonnement.

Vous pouvez éventuellement appeler SubscribeOptions.setStrategy() pour définir la stratégie utiliser.

L'exemple suivant illustre l'abonnement aux messages:

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

Se désabonner

Pour vous désabonner et ne plus recevoir de messages sur l'appareil, appelez Nearby.getMessagesClient(Activity).unsubscribe() Transmettre la même chose MessageListener utilisé pour s'abonner (mMessageListener dans cet exemple).

L'exemple de code suivant illustre le désabonnement:

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