Nearby Messages คือ Publish-subscribe API ซึ่งช่วยให้อุปกรณ์ที่อยู่ใกล้เคียงแลกเปลี่ยน เพย์โหลดข้อมูลปริมาณเล็กน้อยได้ เมื่ออุปกรณ์เผยแพร่ข้อความแล้ว อุปกรณ์ที่อยู่ใกล้เคียงจะรับข้อความได้ คู่มือนี้จะอธิบายถึงฟังก์ชันการทำงานทั้งหมด ที่แอปของคุณต้องใช้เพื่อเผยแพร่ข้อความและสมัครรับข้อมูลข้อความ โดยใช้ Nearby Messages API
ชุดอุปกรณ์ใกล้เคียงจะกำหนดโดยการแลกเปลี่ยนโทเค็นขนาดเล็กผ่านบลูทูธ เมื่ออุปกรณ์ตรวจพบโทเค็นจากอุปกรณ์ใกล้เคียง อุปกรณ์จะส่งโทเค็นไปยังเซิร์ฟเวอร์ Messages ใกล้เคียงเพื่อตรวจสอบและตรวจสอบว่ามีข้อความที่จะส่งสำหรับชุดการสมัครใช้บริการปัจจุบันของแอปพลิเคชันหรือไม่
แอปพลิเคชันสามารถควบคุมชุดสื่อที่ใช้ในการค้นพบอุปกรณ์ และกำหนดว่าจะใช้สื่อในการกระจายโทเค็นและ/หรือสแกนหาโทเค็นหรือไม่ โดยค่าเริ่มต้น การแพร่สัญญาณและการสแกนจะกระทำในสื่อทั้งหมด หากต้องการสร้างการค้นพบในสื่อชุดย่อยหรือสื่อ และหากต้องการควบคุมว่าจะออกอากาศหรือสแกนหรือไม่ คุณต้องส่งพารามิเตอร์เพิ่มเติมเมื่อสร้างสื่อเผยแพร่และการสมัครใช้บริการ
เมื่อเผยแพร่และสมัครใช้บริการอยู่ จะมีการแจ้งเตือน "มีการใช้งาน "ใกล้เคียง" อยู่เพื่อแจ้งให้ผู้ใช้ทราบว่า "ใกล้เคียง" ทำงานอยู่ การแจ้งเตือนนี้จะปรากฏเฉพาะเมื่อแอปอย่างน้อย 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);
}