고등어가어딨니
577
2021-08-03 10:00:27
7
272

안드로이드 NFC개발에 대해


혹시 

안드로이드를   NFC리더기(단말기)에 갖다대면 

정보가 전송되어 일치하면 문을열고 일치하지않으면 문을열지않는 알고리즘에 관한건데요


이럴 떄 안드로이드는 카드모드여야하나요? 읽기/쓰기 모드여야하나욧 ?


0
  • 답변 7

  • ruinnel
    540
    2021-08-03 10:06:21

    카드모드요.

    HCE(Host Card Emulation) 구현해서 리더기에서 들어오는 읽기요청에 적절한 응답을 해주도록 구현 되어야죠.


    덧. HCE 말고 Tmoney, 캐시비가 들어가 있는 USIM 장착된 경우에는 HCE 구현 안해도 티머니 카드번호 읽기 / 잔액읽기등이 가능합니다.  카드번호가 유니크해서 일정부분 활용 가능하죠.


    HCE의 경우 휴대전화 화면이 켜져야 리더기 쪽에서 읽기가 가능하구요.

    Tmoney / 캐시비 같은 USIM에 들어있는 기능은 휴대전화 화면 꺼져있어도 읽기가 가능합니다.




  • 고등어가어딨니
    577
    2021-08-03 10:31:13

    아 선생님 !! 그 스맛폰 설정에서 카드모드 설명을보면

    NFC카드기능을 이용한 교통 및 신용카드 등의 모바일 결제서비스만 사용합니다

    라고 나와있는데


    개발관련해서도 사용가능하다는 말씀이신거죠 ?

    저는 모바일 결제서비스"만" 사용가능하다길래 개발은 미포함인줄 알았습니다

  • ruinnel
    540
    2021-08-03 10:56:05 작성 2021-08-03 10:56:32 수정됨

    아.... 그 설정의 카드모드 말씀이시군요.

    제가 잘못 이해했네요. 카드모드 == HCE 를 생각했습니다.

    HCE 개발하시는거면.. 그 카드모드 말고 읽기/쓰기 모드로 하셔야 할겁니다.


    애초에. .카드모드 라는게 삼성폰에 밖에 설정이 없을거예요.

    픽셀이나 레퍼런스 폰에는 NFC 켜고 끄기 밖에 없던걸로 기억합니다.

    (제가 쓰는 샤오미도 NFC 켜고 끄기 밖에 없어요)

  • 고등어가어딨니
    577
    2021-08-03 11:04:28

    와 정말감사합니다 선생님 


    NFC 정보가 부족해서 곤란했는데 ㅜㅜ


    정말 감사합니다 !1  

  • ruinnel
    540
    2021-08-03 11:37:38 작성 2021-08-03 11:42:00 수정됨

    몇년전에 NFC 관련해서 참 많은걸 했었는데.. ㅋㅋ

    문열기도 NFC 모듈 업체랑 해서 이것저것 해보기도 했었던..  추억이 새록새록하기도 해서.. 주저리 주저리 몇가지 적어봅니다. ㅋㅋ 


    카드모드 관련 제가 아는 부분 설명을 드리면..

    Single Wire Protocol 이라고 스마트폰 내의 NFC 모듈 <-> USIM간의 연결 프로토콜이 있습니다.

    삼성폰에 있는 "카드모드"라는 설정은 저 Single Wire Protocol 만 활성화 & 스마트폰 내의 NFC 모듈을 passive 모드(읽기 & 쓰기는 안되고 외부 리더기가 쏘는 전파에 반응해서 동작만 하는... 즉 NFC 카드와 같이 동작)로 동작시키는 모드로 알고 있습니다.

    Single Wire Protocol은... 스마트폰에 장착된 NFC 모듈 <-> USIM을 연결하는 규약인데.. 

    그냥 쉽게 생각하시면 스마트폰에 장착된 NFC 모듈 <-> USIM을 연결해서 "NFC 카드(passive모드만 되고 저장영역을 가지고 있는)"처럼 쓴다라고 생각하시면 됩니다.. USIM의 일부영역을 NFC 모듈이 저장소로 쓰는 형태라고 보시면 됩니다.


    Single Wire Protocol 이 모든 스마트폰 다 적용된건 아닌걸로 알고 있구요. (이건 확실하진 않아요... 제가 알기로는 그래요..)

    그래서 국내 스마트폰이 아닌 경우 Tmoney / 캐시비 들어가있는 USIM을 장착해도 교통카드로 못씁니다. Single Wire Protocol 이 없거나 있어도 그걸 사용하는 API가 국내폰들과 달라서 인걸로 알고있어요.

    그래서 카드사에서 HCE로 티머니나 캐시비 프로토콜을 구현하고 앱에서 후 처리를 하도록해서 교통카드 기능을 지원하죠.  (그래서 이 경우 폰화면이 켜져야 교통카드 결제가 가능합니다)



    구현하시려는 문열기의 경우... 2가지 방법이 있을거예요.

    1. NFC 리더기로 Tmoney / 캐시비 카드번호를 읽어서 식별값으로 사용.

      - 이 경우 티머니 / 캐시비가 있는 USIM이 장착되지 않은 경우

      - 국내 스마트폰이 아닌 경우.

      위 2가지 케이스에 대응이 안되지만 사용자가 폰 화면을 켜지 않고도 구현 가능하구요.

      스마트폰 쪽에선 특별히 아무것도 개발하지 않아도 된다는 장점이 있습니다.

    2. HCE를 사용할 경우.

      - NFC 지원하는 대부분 스마트폰 지원(HCE가 .. 안드로이드 6.0인가? 이후인가 그럴겁니다. 이건 확인 필요)

      스마트폰에서 HCE 지원하는 어플리케이션 개발이 필요.


    번외. (가능은 하지만 굳이 이렇게?? 싶은 방법)

    3. NFC 모듈이 카드처럼 동작하고 폰에서 Write 합니다.

      - 단점은 앱개발 해야하고 앱에서 write하는 화면을 켜고 동작시켜야 합니다.

      - 장점은 없습니다.. ㅋㅋㅋ

    4. P2P 모드.. 3번이랑 비슷한 장단점인데 구현방식이 다릅니다.


    3/4번의 경우 문열기(식별값만 인식)하는 경우엔 쓰기 참 애매한데..

    통신으로 주고받는 데이터가 좀 더 많은 경우에는 쓸만 합니다.

    실제로 몇몇 케이스에서 3/4번을 활용해서 개발을 한적도 있습니다. ㅎㅎ


  • 고등어가어딨니
    577
    2021-08-03 11:53:00

    와 정말 대단하십니다 

    감사합니다 감사하다는 말로도 부족할 정도이군요 ㅜ

    지금 선생님께선 여러가지 키워드를 던져주셧습니다

    이건 정말 제가 개발하는데 있어서 큰 도움이 되리라 확신합니다


    구글에는 항상 NFC NDEF만 검색하는데 나오는 글들은 거의 비슷하더군요

     싱글 와이어 프로토콜이 무엇인지 유심 <-> NFC 연결을 어떻게 하는지 

    어디서도 알 수 없는정보였습니다 ( 애초에 저런 개념존재를 몰랐습니다 )

    그래서 막막했는데 ( 안드 개발자가 저 뿐) 저렇게 키워드를 주셔서 정말감사합니다

    저는 아마 개발을 

    유심(캐시비 등)을 사용해서 하는게 아닌

    자체 어플을 개발하여 

    특정 리더기에 갖다대기전에 어플을 열고  리더기에 갖다되면 

    신원을 식별하여 여러가지 행동을 하는 알고리즘입니다


    정말 도움되었습니다 올해 좋은일만 가득하길빕니다 !! 

    ( 뭐 솔직히 한번에 되리라고는 생각않고 여러번 삽질을 해야되겠지만 

    정말 도움을 주신만큼 결과를 만들어보도록 해보겠습니다 ) 



     

  • kenu
    56k
    2021-08-03 12:17:41
    해당 게시물은 관리자에 의해 사는얘기에서 Tech Q&A로 이동 되었습니다.
  • 로그인을 하시면 답변을 등록할 수 있습니다.