Yayınla ve Abone Ol

Nearby Messages, yakındaki cihazların küçük veri yükleri alışverişi yapmasına olanak tanıyan bir yayınlama-abone olma API'sidir. Bir cihaz mesaj yayınladığında yakındaki cihazlar bu mesajı alabilir. Bu kılavuzda, Nearby Messages API'yi kullanarak mesaj yayınlamak ve mesajlara abone olmak için uygulamanızın kullanması gereken tüm işlevler açıklanmaktadır.

Yakındaki cihazlar kümesi, Bluetooth üzerinden küçük jetonların değişimiyle belirlenir. Bir cihaz, yakındaki bir cihazdan jeton algıladığında jetonu doğrulamak ve uygulamanın mevcut abonelik grubu için teslim edilecek mesaj olup olmadığını kontrol etmek üzere Yakındaki Mesajlar sunucusuna gönderir.

Bir uygulama, cihaz keşfi için kullanılan ortamlar grubunu ve ortamların jeton yayınlamak ve/veya jeton taramak için kullanılıp kullanılmadığını kontrol edebilir. Varsayılan olarak, yayın ve tarama tüm ortamlarda yapılır. Bir alt küme veya ortamda keşif yapmak ve yayın yapılıp yapılmayacağını ya da tarama yapılıp yapılmayacağını kontrol etmek için yayın ve abonelik oluştururken ek parametreler iletmeniz gerekir.

Etkin olarak yayın yapıp abone olunurken "Etrafımda kullanılıyor" bildirimi gösterilir. Bu bildirim, kullanıcılara Etrafımda'nın etkin olduğunu bildirir. Bu bildirim yalnızca bir veya daha fazla uygulama aktif olarak Yakın'ı kullandığında gösterilir. Böylece, Yakın'a ihtiyaç duyulmadığı durumlarda kullanıcılar pil ömrünü koruyabilir. Kullanıcılara aşağıdaki seçenekleri sunar:

  • Etrafımda özelliğini devre dışı bırakmak için bir uygulamaya gidin.
  • Bir uygulamayı Yakındakiler'i kullanmayı durdurmaya zorlama
  • Yakındaki Ayarlar ekranına gidin.

Kullanıcıların uygulamayı Yakın'ı kullanmayı durdurmaya zorladığı durumları dinlemek için PublishCallback() ve SubscribeCallback() kullanabilirsiniz. Bu durumda onExpired() yöntemi tetiklenir.

Yakındaki Mesajlar API'leri pil ömrünü etkileyebileceğinden yalnızca bir ön plan etkinliğinden kullanılmalıdır (BLE arka plan aboneliği hariç).

Yakındaki Mesajlar API'sini kullanmak için publish() ve/veya subscribe()'ı çağırın. Uygulamanız her zaman unpublish() ve unsubscribe() olarak onStop() içinde simetrik olmalıdır.

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

İleti yayınlayın

Bir mesaj yayınlamak için Nearby.getMessagesClient(Activity).publish() işlevini çağırarak mesajınızın bayt dizisini iletin. İletilerin 3 KB'tan küçük olmasını öneririz. Bu iletiler daha hızlı teslim edilebilir. Ancak ihtiyaç duyan uygulamalar için 100 KB'a kadar destek sunabiliriz. Bu hizmet, fotoğraf ve video gibi daha büyük nesnelerin paylaşılması için tasarlanmamıştır.

İsteğe bağlı olarak, kullanılacak stratejiyi ayarlamak için PublishOptions.setStrategy() işlevini çağırabilirsiniz.

Aşağıdaki örnekte, kısa bir metin mesajı göndermek için publish() işlevinin nasıl çağrılacağı gösterilmektedir:

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

Mesajları yayından kaldırma

Bir mesajı yayından kaldırmak için unpublish() numaralı telefonu arayın. Uygulamanız, en azından onStop() yönteminde yayından kaldırma işlemini çağırmalıdır. Yayınlamak için kullanılan Message nesnesini (bu örnekte mActiveMessage) iletin.

Aşağıdaki kod örneğinde unpublish() işlevinin nasıl çağrılacağı gösterilmektedir:

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

İletilere abone olma

Diğer cihazlardan gelen mesajlara abone olmak için Nearby.getMessagesClient(Activity).subscribe() numarasını arayın. Abone olunan iletileri almak için MessageListener işlemini geçmeniz gerekir.

İsteğe bağlı olarak, kullanılacak stratejiyi ayarlamak için SubscribeOptions.setStrategy() işlevini çağırabilirsiniz.

Aşağıdaki örnekte mesajlara abone olma işlemi gösterilmektedir:

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

Aboneliği iptal et

Aboneliğinizi iptal etmek ve cihaz mesajları almayı durdurmak için Nearby.getMessagesClient(Activity).unsubscribe() numaralı telefonu arayın. Abonelik için kullanılan MessageListener nesnesini (bu örnekte mMessageListener) iletin.

Aşağıdaki kod örneğinde e-posta listesinden çıkma işlemi gösterilmektedir:

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