표지 메시지 받기

앱에서 저전력 블루투스 (BLE) 비콘 첨부파일을 구독할 수 있습니다. Google이 게시한 메시지를 구독하는 데 사용되는 것과 동일한 기타 근처 기기에서 작동합니다. 정기 결제를 신청하면 앱에서 자동으로 비콘과 주변 장치 모두에서 메시지를 수신하게 됩니다.

BLE 비콘 메시지 구독

앱이 BLE 비콘 메시지를 구독할 수 있는 두 가지 방법이 있습니다.

  • 사용자 작업에 대한 응답으로 포그라운드에서 지정할 수 있습니다.
  • 백그라운드에서: 앱이 다음과 같은 상태일 때 있습니다

포그라운드에서 구독

앱이 포그라운드에서 비콘 메시지를 구독하면 스캔은 지속적으로 실행됩니다 포그라운드만 시작 일반적으로 사용자 작업에 응답하여 앱이 활성 상태일 때 정기 결제에 사용됩니다.

앱에서 다음을 호출하여 포그라운드 구독을 시작할 수 있습니다. Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions) 드림 Strategy 옵션을 BLE_ONLY로 설정합니다.

다음 코드 스니펫은 포그라운드 구독의 시작을 보여줍니다. Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions):

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.");
    SubscribeOptions options = new SubscribeOptions.Builder()
            .setStrategy(Strategy.BLE_ONLY)
            .build();
    Nearby.getMessagesClient(this).subscribe(mMessageListener, options);
}

정기 결제가 더 이상 필요하지 않으면 앱에서 정기 결제를 취소해야 합니다. (으)로 Nearby.getMessagesClient(Activity).unsubscribe(MessageListener)

백그라운드에서 구독하기

앱이 백그라운드에서 비콘 메시지를 구독하면 저전력 스캔을 화면 켜짐 이벤트 시 트리거되며 이는 앱이 현재 활성 상태가 아니어도 마찬가지입니다. 스캔 알림을 사용하여 '일어나기'를 할 수 있습니다. 앱에 대한 응답으로 확인할 수 있습니다. 백그라운드 구독은 배터리를 더 적게 소비합니다. 포그라운드 구독을 지원하지만 지연 시간이 길고 안정성이 낮습니다.

앱에서 다음을 호출하여 백그라운드 구독을 시작할 수 있습니다. Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions) 드림 Strategy 옵션을 BLE_ONLY로 설정합니다.

다음 코드 스니펫은 백그라운드 구독을 시작하는 방법을 보여줍니다. 통화 Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions)

// Subscribe to messages in the background.
private void backgroundSubscribe() {
    Log.i(TAG, "Subscribing for background updates.");
    SubscribeOptions options = new SubscribeOptions.Builder()
            .setStrategy(Strategy.BLE_ONLY)
            .build();
    Nearby.getMessagesClient(this).subscribe(getPendingIntent(), options);
}

private PendingIntent getPendingIntent() {
    return PendingIntent.getBroadcast(this, 0, new Intent(this, BeaconMessageReceiver.class),
            PendingIntent.FLAG_UPDATE_CURRENT);
}

다음 코드 스니펫은 BeaconMessageReceiver 클래스.

@Override
public void onReceive(Context context, Intent intent) {
    Nearby.getMessagesClient(context).handleIntent(intent, new MessageListener() {
        @Override
        public void onFound(Message message) {
            Log.i(TAG, "Found message via PendingIntent: " + message);
        }

        @Override
        public void onLost(Message message) {
            Log.i(TAG, "Lost message via PendingIntent: " + message);
        }
    });
}

정기 결제가 더 이상 필요하지 않으면 앱에서 정기 결제를 취소해야 합니다. (으)로 Nearby.getMessagesClient(Activity).unsubscribe(PendingIntent)

비콘 메시지 파싱

비콘 첨부파일 비콘에 추가할 수 있는 임의 데이터의 블롭입니다. 각 첨부파일은 다음과 같은 부분으로 구성됩니다.

  • 네임스페이스: 네임스페이스 식별자입니다.
  • 유형: 데이터 유형입니다.
  • 데이터: 첨부파일의 데이터 값입니다.

다음 코드 스니펫은 메시지 리스너를 사용하여 파싱하는 방법을 보여줍니다. 메시지를 수신할 수 있습니다.

mMessageListener = new MessageListener() {
    @Override
    public void onFound(Message message) {
        // Do something with the message here.
        Log.i(TAG, "Message found: " + message);
        Log.i(TAG, "Message string: " + new String(message.getContent()));
        Log.i(TAG, "Message namespaced type: " + message.getNamespace() +
                "/" + message.getType());
    }

    ...
};

콘텐츠 파싱은 바이트 형식에 따라 다릅니다. 이 예시에서는 콘텐츠 바이트는 UTF-8 문자열을 인코딩하지만 비콘 메시지는 다른 바이트 형식을 인코딩합니다 (예: 직렬화된 프로토콜 버퍼). 자세한 내용은 비콘에 첨부파일 추가를 참조하세요.

프로젝트와 연결된 네임스페이스를 확인하려면 namespaces.list를 사용할 수 있습니다.

참고: