[알게된 것] React Native WebView 나이스 인증

Chobby·2023년 10월 6일
3

알게된 것

목록 보기
10/62
post-thumbnail

😀문제상황

IOS 환경에서 보안 정책의 이유로 WebView를 통한 나이스 팝업창이 보이지 않음

정확히는 흰 화면만 노출됨


😁해결방법

jsp를 통해 팝업을 띄우는 방법이 아닌, 나이스 인증에 필요한 소스를 jsp의 ReactNativeWebView.postMessage 메서드를 통해 전달받음

function fnPopup(){
    if (window.ReactNativeWebView) {
        // RN에서 데이터는 반드시 문자열로 받을 수 있기 때문에
        // JSON.stringify를 사용합니다.
        window.ReactNativeWebView.postMessage("key:<%= sEncData %>");
    } else {
        alert("관리자에게 문의 해주세요.");
    }
}

이후 react의 state에 해당 데이터를 담아 WebView를 다음과 같이 정의함

 <WebView
    key={encodeData}
    source={
        encodeData
        ? {
            uri: 'https://nice.checkplus.co.kr/CheckPlusSafeModel/checkplus.cb',
            method: 'POST',
            headers: {'Content-Type': 'application/x-www-form-urlencoded'},
            body: `m=checkplusService&EncodeData=${encodeData}`,
          }
        : {uri: '{나이스 인증 정보를 전달받을 페이지 주소}'}
        }

state를 key로 정의하는것이 매우 중요하다. 상태가 담기며 화면을 나이스 주소로 리렌더링 해야하기 때문

profile
내 지식을 공유할 수 있는 대담함

8개의 댓글

comment-user-thumbnail
2024년 10월 4일

nice 본인인증 관련 내용 공유해주셔서 너무 감사드립니다. 지금 저도 진행해보고 있는데 form 내용에 작성하셨을때와 달라진거 같습니다.

1
2
3
4
5
6
7
8
action = "https://nice.checkplus.co.kr/CheckPlusSafeModel/service.cb";
<form name="form" id="form">
      <input id="m" name="m" value="service" />
      <input  id="token_version_id" name="token_version_id" value="" />
      <input  id="enc_data" name="enc_data" />
      <input  id="integrity_value" name="integrity_value" />
</form>
 
cs

이런 형태로 넘겨야 하는데 써주신 webView쪽 body와 다르게 요청을 들어가야 할거 같은데 위형태로 body를 만들어서 테스트 해봐도 잘 되지가 않네요.(처리중 오류 혹은 잘못된 접근으로 나옵니다) 혹시 최근에도 진행해 보신적이 있으신지요? 진행 해보셨다면 해결을 어떻게 하셨는지 여쭤봐도 될까요?

1개의 답글
comment-user-thumbnail
2024년 11월 26일

Webview 했을 때 세션 값이 사라지는 문제가 있는데 혹시 해당 문제는 없으셨나요?

1개의 답글
comment-user-thumbnail
2024년 12월 5일

올려주신 글 잘 보았습니다.

제가 리액트네이티브관련하여서 뉴비인관계로 어떤식으로 진행되는지 잘 이해가 안되서 질문드립니다.

먼저 encodeData를 백엔드에서 받아와야되는게 맞는거죠?

1개의 답글