Nearby Messages는 근처 기기에서 작은 데이터 페이로드를 교환할 수 있는 게시-구독 API입니다. 기기가 메시지를 게시하면 주변 기기가 메시지를 수신할 수 있습니다. 이 가이드에서는 Nearby Messages API를 사용하여 메시지를 게시하고 메시지를 구독하기 위해 앱에서 구현해야 하는 모든 기능을 설명합니다.
근처 기기 집합은 블루투스를 통해 소규모 토큰을 교환하여 결정됩니다. 기기가 근처 기기의 토큰을 감지하면 Nearby Messages 서버로 토큰을 전송하여 유효성을 검사하고 애플리케이션의 현재 구독 세트에 전송할 메시지가 있는지 확인합니다.
애플리케이션은 기기 검색에 사용되는 미디어 집합과 미디어가 토큰을 브로드캐스트하거나 토큰을 스캔하는 데 사용되는지 여부를 제어할 수 있습니다. 기본적으로 브로드캐스트 및 스캔은 모든 매체에서 실행됩니다. 하위 집합 또는 매체에서 검색하고 브로드캐스트 또는 스캔 여부를 제어하려면 게시물 및 구독을 만들 때 추가 매개변수를 전달해야 합니다.
게시 및 구독이 활발하게 이루어지면 Nearby가 활성 상태임을 알리는 'Nearby 사용 중' 알림이 표시됩니다. 이 알림은 하나 이상의 앱이 Nearby를 사용 중이면만 표시되므로 Nearby가 필요하지 않은 경우 사용자는 배터리 수명을 절약할 수 있습니다. 사용자에게 다음과 같은 옵션을 제공합니다.
- Nearby를 사용 중지할 앱으로 이동합니다.
- 앱이 Nearby를 사용하지 못하도록 강제합니다.
- Nearby Settings(주변 설정) 화면으로 이동합니다.
PublishCallback()
및 SubscribeCallback()
를 사용하여 사용자가 앱에서 Nearby 사용을 중지하도록 강제하는 경우를 수신 대기할 수 있습니다. 이 경우 onExpired()
메서드가 트리거됩니다.
Nearby Messages API는 배터리 수명에 영향을 줄 수 있으므로 BLE 백그라운드 구독을 제외하고 포그라운드 활동에서만 사용해야 합니다.
publish()
또는 subscribe()
를 호출하여 Nearby Messages API를 사용합니다. 앱은 항상 onStop()
에서 unpublish()
및 unsubscribe()
를 대칭적으로 실행해야 합니다.
@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()
를 호출합니다. 메시지를 3KB 미만으로 유지하는 것이 좋습니다. 이러한 메시지는 더 빠르게 전송할 수 있습니다. 하지만 필요한 앱의 경우 최대 100KB까지 지원할 수 있습니다. 이 서비스는 사진 및 동영상과 같은 더 큰 객체를 교환하는 데 사용되지 않습니다.
원하는 경우 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);
}