본문 바로가기
Android

Android 어플에 Nice ID 본인인증 붙이기 (JS와 통신) kotlin

by th_bigLight 2020. 7. 2.

근래에 작업중인 어플에 nice id 본인인증을 추가해달라는 요청이 들어왔다. 까먹지 않기 위해 일단 작성해봄.

 

**여기서는 Android app 개발 관련해서만 설명하므로 직접적인 본인인증 처리는 하지 않는다.

**초보개발자라 로직이 효율적이지 않을 수 있음. 더 좋은 방법 있으면 알려주세요 ㅠ

 

Android WebView를 활용해서 본인인증 페이지를 띄워주고 js에게 결과를 받아와서 사용한다.

Nice ID 쪽에서 web, app개발자를 위한 문서를 보내주기 때문에 해당 문서를 따라하면 금방 완성할 수 있다.

 

하지만 WebView로 리턴된 인증결과를 모바일 앱에서 사용하기 위한 방법은 알려주지 않는다. (너무 간단해서인듯)

 

가이드에 나와있는 결과 전달 방법. 알아서 하면 된다.

 

필요한 것 : WebView에 넣을 주소 및 JavascriptInterface에서 사용하고 있는 변수명, 함수명

 

우선 통신에 사용할 WebBridge 클래스를 생성한다.

private inner class WebBridge(private val mContext: Context) {
        @JavascriptInterface
        fun js에서 사용한 함수명(result: String) {
        
        //여기서 사용할 handler는 위에서 정의해줘야함
        //var handler : Handler = Handler()
        
            handler?.post{
                //result를 활용해서 필요한 작업 실행
		함수(result)
            }
        }
    }

annotation을 사용해서 JavascriptInterface를 이용한다고 선언해준다.

함수 이름은 js에서 사용한 함수명과 동일하게 작성해준다.

result를 받아와서 필요한 작업을 하면 된다.

 

 

onCreate에서 layout에 있는 webview와 연결해준 후 (여기선 myWebView로 지정)

myWebView.webViewClient = WebViewClient
myWebView.addJavascriptInterface(WebBridge(context!!), "js에서 사용한 변수명")
myWebView.loadUrl("웹뷰에 넣을 주소"))

js에서 사용한 변수명과 미리 지정해놓은 WebBridge 클래스를 추가해준다.

이후 본인인증 웹 주소를 로드한다.

 

**여기서 context를 매개변수로 전달한 이유는 그래야 위에서 만들어둔 함수 및 변수를 공유할 수 있기 때문이다.

**targetSdkVersion 17 이상에서는 annotation 필수

**공홈에 설명된 바로는 addJavascriptInterface()를 사용하면 JS에서 앱을 컨트롤 할 수 있기 때문에 조심해서 사용하라고 합니다. 신뢰할 수 있는 HTML에서만 사용할것.

 

공식 홈페이지에 자세하게 설명되어있다.

https://developer.android.com/guide/webapps/webview?hl

'Android' 카테고리의 다른 글

App Store 지원되는 기기 비교  (0) 2020.08.25
Retrofit 전체 response 받기  (1) 2020.07.27
apk 빌드 시 발생 오류  (0) 2020.07.09
NavController 연속 클릭시 오류  (0) 2020.07.06
FragmentDialog 오류?  (0) 2020.06.29

댓글