현재 버전

제가 봤던 일반적인 케이스(NFC만 되고 인터넷 연결은 안되는 도어락)에서는..
카드로 열리는 도어락과 동일하게..
설정 모드에서 휴대폰에서 발행해주는 고유 식별값을 읽어서 도어락에 저장을 먼저 해두고..
이후 휴대폰을 가져다 대면 열리는 방식으로 하는건 봤습니다.
(이 경우 그냥 도어락 내부에 저장된 식별값과 대조 후 같으면 열어주는 방식 이겠죠.)

NFC 리더기(도어락?) 도 인터넷 통신이 가능한 건가요?
거기다 http 프로토콜까지?... 신기하네요.
NFC 리더기 쪽이 http 통신까지 가능하다면 말씀하신 절차대로 수행 될거 같구요.

추가로... 적어놓은 순서가 처리되는 순서?라면 NFC 리더기가 먼저입니다. 

HCE는 카드를 에뮬레이션 하는거니 말그대로 passive로 동작합니다.


HCE로 구현된 앱(android.nfc.cardemulation.HostApduService 를 구현한 서비스를 가지고 있는..)이 스마트폰에 설치되어 있으면..

NFC 통신의 시작점은 NFC 리더기 쪽입니다.


리더기에서 AID 지정해서 신호를 쏘는거구요.


스마트폰이 그걸 받으면 AID를 식별해서 등록된 HostApduService 구현체 중에 AID에 맞는 서비스를 찾아서 통신 라이프사이클에 맞게 적절히 메소드를 호출 해줍니다(onDeactivated, processCommandApdu)


스마트 폰에서는 HostApduService 상속받아서 구현한 각 메소드가 호출되면 필요한 동작을 구현하는거구요.

단, processCommandApdu의 경우 ByteArray를 반환하고 그 반환한 값이 리더기가 수신하는 값이 되는데요.
그래서 함수가 호출되고 너무 긴시간 동안 값을 반환하지 않으면 NFC 리더기와의 통신이 끊어지거나 할 수 있어서 데이터 수신 후 서버와 통신하고 그 결과를 반환하던가 하는 방식은 피하시는게 좋습니다.


그리고 NFC 리더기와의 통신은 꼭 NDEF 메세지 규격을 따르지 않아도 상관없습니다.
NDEF 메세지 규격에 각종 헤더들이 있어서 통신해야될 데이터만 많아지게 됩니다.


NDEF 메세지는 스마트폰이 NFC로 정보를 읽어 들일때 URL이 포함되어 있으면 URL을 열어준다거나..하는 것처럼 스마트폰에서 무언가 동작을 시키기 위한 규약이라서..


HCE로 스마트폰이 태그처럼 동작할때는 굳이 NDEF를 안쓰셔도 됩니다.

수정 이력

2021-08-04 15:04:36 에 아래 내용에서 변경 됨 #1
제가 봤던 일반적인 케이스(NFC만 되고 인터넷 연결은 안되는 도어락)에서는..
카드로 열리는 도어락과 동일하게..
설정 모드에서 휴대폰에서 발행해주는 고유 식별값을 읽어서 도어락에 저장을 먼저 해두고..
이후 휴대폰을 가져다 대면 열리는 방식으로 하는건 봤습니다.
(이 경우 그냥 도어락 내부에 저장된 식별값과 대조 후 같으면 열어주는 방식 이겠죠.)

NFC 리더기(도어락?) 도 인터넷 통신이 가능한 건가요?
거기다 http 프로토콜까지?... 신기하네요.
NFC 리더기 쪽이 http 통신까지 가능하다면 말씀하신 절차대로 수행 될거 같구요.

추가로... 적어놓은 순서가 처리되는 순서?라면 NFC 리더기가 먼저입니다. 

HCE는 카드를 에뮬레이션 하는거니 말그대로 passive로 동작합니다.


HCE로 구현된 앱(android.nfc.cardemulation.HostApduService 를 구현한 서비스를 가지고 있는..)이 스마트폰에 설치되어 있으면..



NFC 통신의 시작점은 NFC 리더기 쪽입니다.


리더기에서 AID 지정해서 신호를 쏘는거구요.


스마트폰이 그걸 받으면 AID를 식별해서 등록된 HostApduService 구현체 중에 AID에 맞는 서비스를 찾아서 통신 라이프사이클에 맞게 적절히 메소드를 호출 해줍니다(onDeactivated, processCommandApdu)


스마트 폰에서는 HostApduService 상속받아서 구현한 각 메소드가 호출되면 필요한 동작을 구현하는거구요.

단, processCommandApdu의 경우 ByteArray를 반환하고 그 반환한 값이 리더기가 수신하는 값이 되는데요.
그래서 함수가 호출되고 너무 긴시간 동안 값을 반환하지 않으면 NFC 리더기와의 통신이 끊어지거나 할 수 있어서 데이터 수신 후 서버와 통신하고 그 결과를 반환하던가 하는 방식은 피하시는게 좋습니다.


그리고 NFC 리더기와의 통신은 꼭 NDEF 메세지 규격을 따르지 않아도 상관없습니다.
NDEF 메세지 규격에 각종 헤더들이 있어서 통신해야될 데이터만 많아지게 됩니다.


NDEF 메세지는 스마트폰이 NFC로 정보를 읽어 들일때 URL이 포함되어 있으면 URL을 열어준다거나..하는 것처럼 스마트폰에서 무언가 동작을 시키기 위한 규약이라서..


HCE로 스마트폰이 태그처럼 동작할때는 굳이 NDEF를 안쓰셔도 됩니다.