เผยแพร่และสมัครรับข้อมูล

Nearby Messages เป็น API แบบเผยแพร่-ติดตาม ซึ่งช่วยให้อุปกรณ์ที่อยู่ใกล้เคียงแลกเปลี่ยนเพย์โหลดขนาดเล็กของข้อมูลได้ เมื่ออุปกรณ์เผยแพร่ข้อความแล้ว อุปกรณ์ที่อยู่ใกล้เคียงจะ รับข้อความได้ คู่มือนี้จะอธิบายฟังก์ชันการทำงานทั้งหมด ที่แอปของคุณต้องใช้เพื่อเผยแพร่ข้อความและติดตามข้อความ โดยใช้ Nearby Messages API

ระบบจะกำหนดชุดอุปกรณ์ที่อยู่ใกล้เคียงโดยการแลกเปลี่ยนโทเค็นขนาดเล็กผ่านบลูทูธ เมื่ออุปกรณ์ตรวจพบโทเค็นจากอุปกรณ์ที่อยู่ใกล้เคียง อุปกรณ์จะส่งโทเค็นไปยังเซิร์ฟเวอร์ข้อความที่อยู่ใกล้เคียงเพื่อตรวจสอบและดูว่ามีข้อความใดที่ต้องส่งสำหรับการติดตามชุดปัจจุบันของแอปพลิเคชันหรือไม่

แอปพลิเคชันสามารถควบคุมชุดสื่อที่ใช้สำหรับการค้นหาอุปกรณ์ และ ไม่ว่าจะใช้สื่อเพื่อออกอากาศโทเค็นและ/หรือสแกนหาโทเค็นหรือไม่ โดยค่าเริ่มต้น การออกอากาศและการสแกนจะดำเนินการในทุกสื่อ หากต้องการทำการค้นพบบนชุดย่อยหรือสื่อ และควบคุมว่าจะออกอากาศหรือสแกนหรือไม่ คุณต้องส่งพารามิเตอร์เพิ่มเติมเมื่อสร้างสิ่งพิมพ์และ การติดตาม

เมื่อเผยแพร่และติดตามอย่างต่อเนื่อง ระบบจะแสดงการแจ้งเตือน "Nearby กำลังใช้งานอยู่" เพื่อแจ้งให้ผู้ใช้ทราบว่า Nearby ใช้งานอยู่ การแจ้งเตือนนี้จะแสดง เฉพาะเมื่อมีแอปอย่างน้อย 1 แอปที่ใช้ฟีเจอร์ Nearby อยู่ ซึ่งจะช่วยให้ผู้ใช้ ประหยัดแบตเตอรี่ได้หากไม่จำเป็นต้องใช้ฟีเจอร์ Nearby โดยมีตัวเลือกต่อไปนี้ให้แก่ผู้ใช้

  • ไปที่แอปเพื่อปิดใช้ Nearby
  • บังคับให้แอปหยุดใช้ Nearby
  • ไปที่หน้าจอการตั้งค่าอุปกรณ์ที่อยู่ใกล้เคียง

คุณสามารถใช้ PublishCallback() และ SubscribeCallback() เพื่อฟังกรณีที่ผู้ใช้บังคับให้แอปหยุดใช้ Nearby เมื่อเกิดเหตุการณ์นี้ ระบบจะทริกเกอร์เมธอด onExpired()

เนื่องจาก Nearby Messages API อาจส่งผลต่ออายุการใช้งานแบตเตอรี่ จึงควรใช้จากกิจกรรมในเบื้องหน้าเท่านั้น (ยกเว้นการสมัครใช้บริการ BLE ในเบื้องหลัง)

เรียก publish() และ/หรือ subscribe() เพื่อใช้ Nearby Messages API แอปของคุณควร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();
}

เผยแพร่ข้อความ

หากต้องการเผยแพร่ข้อความ ให้เรียกใช้ Nearby.getMessagesClient(Activity).publish() โดยส่งอาร์เรย์ไบต์ของข้อความ เราขอแนะนำให้เก็บข้อความไว้ไม่เกิน 3 KB เนื่องจากข้อความเหล่านี้จะส่งได้เร็วกว่า แต่เราก็รองรับข้อความขนาดสูงสุด 100 KB สำหรับแอปที่ต้องการ บริการนี้ไม่ได้มีไว้สำหรับการแลกเปลี่ยนออบเจ็กต์ขนาดใหญ่ เช่น รูปภาพและวิดีโอ

คุณเลือกเรียกใช้ PublishOptions.setStrategy() เพื่อตั้งค่ากลยุทธ์ ที่จะใช้ได้

ตัวอย่างต่อไปนี้แสดงการเรียก publish() เพื่อส่งข้อความ ขนาดเล็ก

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

เลิกเผยแพร่ข้อความ

หากต้องการเลิกเผยแพร่ข้อความ ให้เรียกใช้ unpublish() อย่างน้อยที่สุด แอปของคุณควรเรียกใช้การเลิกเผยแพร่ในเมธอด onStop() ส่งออบเจ็กต์ Message เดียวกันกับที่ใช้ในการเผยแพร่ (mActiveMessage ในตัวอย่างนี้)

ตัวอย่างโค้ดต่อไปนี้แสดงการเรียก unpublish()

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

สมัครรับข้อความ

หากต้องการสมัครรับข้อความจากอุปกรณ์อื่นๆ ให้โทร Nearby.getMessagesClient(Activity).subscribe() คุณจะต้องส่ง MessageListener เพื่อจัดการการรับข้อความที่สมัครรับข้อมูล

คุณเลือกเรียกใช้ SubscribeOptions.setStrategy() เพื่อตั้งค่ากลยุทธ์ ที่จะใช้ได้

ตัวอย่างต่อไปนี้แสดงการติดตามข้อความ

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

ยกเลิกการสมัคร

หากต้องการยกเลิกการสมัครรับข้อมูลและหยุดรับข้อความจากอุปกรณ์ โปรดโทรหา Nearby.getMessagesClient(Activity).unsubscribe() ส่งออบเจ็กต์ MessageListener เดียวกันกับที่ใช้ในการสมัครใช้บริการ (mMessageListener ในตัวอย่างนี้)

ตัวอย่างโค้ดต่อไปนี้แสดงการยกเลิกการติดตาม

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