크롬 커스텀 탭으로 웹뷰 확보

최종 사용자가 자신의 은행 데이터를 핀테크 앱에 연결할 수 있도록 하기 위해 지원되는 모든 은행에 대한 자격 증명 유효성 검사,다단계 인증 및 오류 처리를 처리하는 드롭인 모듈인 링크 를 개발했습니다.

안드로이드 개발자들은 이전에 웹뷰에서 링크를 열어야 했다. 링크를 사용하려는 모든 앱은 많은 개발자 노력이 필요했으며,표준화하지 않으면 일부 구현에서 버그가 발생할 수밖에 없었습니다. 이 응용 프로그램은 당신에게 아름다운 욕실 꾸미기의 갤러리를 보여줍니다.

또한 웹 뷰는 링크 흐름에 중요한 정보를 입력하는 최종 사용자에 대해 완전히 안전하지 않습니다. 안드로이드 웹뷰 대신 크롬 사용자 지정 탭을 사용하여 구현했습니다. 이 기사에서는 왜 우리가 그 결정을 내렸는지,그리고 그 과정에서 발생한 기술적 문제를 어떻게 극복했는지 설명합니다.

우리의 옵션을 평가

우리의 코드는 다른 개발자의 응용 프로그램 내에서 실행,차례로,자신의 응용 프로그램 프로세스. 웹보기에서 링크 웹 응용 프로그램을 실행하기 위해,자바 스크립트를 활성화해야합니다. 이 같은 사용자 이름과 암호를 차단하려고 콜백을 등록하는 등 악성 코드를 실행하는 다른 응용 프로그램에 대한 문을 엽니 다. 또한 악성 앱이 피싱 시도에서 링크 흐름을 모방한 다른 웹 페이지를 열 수 있습니다.

개발자와 통합하기 쉽고 최종 사용자가 직관적이며 안전한 솔루션을 찾을 때 몇 가지 옵션을 평가했습니다:

  1. 네이티브 링크 흐름 구축:네이티브 링크 흐름은 다른 앱의 프로세스에서도 실행되기 때문에 잘 아는 개발자는 리플렉션을 사용하여 입력 편집 텍스트를 찾고 웹보기에서 자바 스크립트와 유사한 방식으로 콜백을 등록 할 수 있습니다.

  2. 별도의 인증자 앱 빌드: 이 네이티브 샌드 박스 경험을 제공 할 것이며,최종 사용자를위한 이상적인 경험이 될 것이다;그러나,많은 사용자가 플레이 스토어에서 추가 응용 프로그램을 다운로드 할 것입니다. 즉,앱 다운로드를 거부하는 사용자를 위한 대체 솔루션이 필요합니다.

  3. 별도의 브라우저 창에서 링크 열기:이 샌드 박스,보안 솔루션이 될 것입니다. 거의 모든 사용자가 브라우저가 설치되어 있지만,응용 프로그램에서 브라우저로 전환 컨텍스트는 특히 로우 엔드 장치에 눈에 띄는 지연을 소개합니다.

  4. 크롬 사용자 지정 탭 사용: 이것은 위에서 언급 한 단점 중 어느 것도 없었기 때문에 우리가 선택한 솔루션입니다.

우리의 선택:크롬 사용자 정의 탭

크롬 사용자 정의 탭(참조)앱이 경량 과정에서 웹 사이트를 열 수 있도록 안드로이드 프레임 워크와 통합 크롬 브라우저의 일부입니다. 브라우저보다 빠르게 열리 며 워밍업 호출을 통해 사전로드 된 경우 웹보기보다 잠재적으로 더 빠릅니다. 여전히 자바 스크립트를 실행하는 동안,그것은 악성 코드를 실행하는 응용 프로그램을 방지 자체 과정에있다. 또한,보안 페이지 확인 잠금 아이콘과 함께 로드 중인 페이지의 주소를 표시하는 작업 표시줄을 제공합니다. 이렇게 하면 사용자가 올바른 페이지가 표시되는지 확인할 수 있습니다.

alt

모든 사용자가 크롬을 설치 한 동안,대부분은 않습니다. 그렇지 않은 사람들을 위해,우리는 위에서 설명한 브라우저 대체 방법을 사용하고 있습니다(옵션 3);한 줄의 코드를 추가하는 것 이외에,우리는 대체에서 무료로 얻을 수 있습니다. 앞서 언급했듯이 브라우저 대체는 대기 시간으로 인해 이상적인 사용자 경험은 아니지만 격자 무늬가 요구하는 높은 수준의 보안을 유지합니다.

:

  • 이벤트 데이터 가져오기

  • 최종 결과 검색

  • 작업 제어&프로세스

이벤트 데이터 가져오기

사용자가 링크의 화면 사이를 탐색하면 리디렉션이 발생하고 데이터가 개발자에게 제공됩니다.

alt

이 리디렉션 정보는 개발자가 사용자 행동을 이해하는 데 도움이되므로 개발자에게 유용합니다. 이 정보는 일반적으로 액세스 할 수 없습니다.

이 정보를 제공하기 위해,우리는 대신 레디 스 데이터 저장소에 서버에 리디렉션 이벤트를 기록했다. 이 부트스트랩은 사용자가 선택한 사용자별 채널 아이디와 비밀 키를 제공합니다. 그러면 앱 범위의 작업자 개체가 생성됩니다. 각 폴링 호출에서 우리는 서버에 채널 아이디,비밀 키 및 마지막 이벤트의 사용자(또는 널)를 제공하여 최신 이벤트를 가져옵니다.

1
2
3
4
5
6
7
8
9
10
11
12

관찰 가능.간격(간격,시간 단위.초)
.구독(스케줄러.계산())
.(안드로이드 슈더러.메인스레드())
.째챈쨩처쨀짼쨉쨉짹쨀째철쩔첩쨩())
.구독하기(
{
// 메시지 처리
},
{
// 오류 처리
})

안드로이드 프레임 워크는 체크 무늬를 사용하여 응용 프로그램을 포함한 모든 프로세스를 죽일 수 있습니다. 작업자 개체가 응용 프로그램에 연결되어 있으므로 작업자가 중지됩니다. 사용자가 흐름을 계속하면(성공적이든 실패적이든)채널로 최종 호출을 하고 나머지 이벤트를 가져옵니다. 사용자가 흐름을 중단하고 강제로 응용 프로그램을 죽인 경우 이벤트는 손실됩니다.

최종 결과 검색

이벤트 데이터를 클라이언트에 전달하는 것과 유사하게,링크는 사용자가 흐름을 완료했음을 알리기 위해 주소를 사용한다. 공개 키 또는 오류 코드와 같은 필요한 데이터가 포함됩니다.

이는 폴링 작업자가 링크가 언제 완료되었는지 알 수 있음을 의미하지만 작업자가 여전히 살아 있다는 보장은 없습니다. 살아 있는 경우에도 사용자는 결과가 전달될 때까지 다음 폴링 호출까지 기다려야 할 수 있으며,이는 몇 초 정도 걸릴 수 있습니다.

결과를 적시에 전달하기 위해 딥링크를 사용하여 다시 엽니다. 이 응용 프로그램은 클라이언트 암호와 연결되고 개발자 대시보드에 허용 목록에 있어야 합니다. 이,플러스 장치에 하나의 응용 프로그램은 동일한 응용 프로그램 아이디를 가질 수 있다는 사실,다른 응용 프로그램은 리디렉션을 가로 채지 보장. 그런 다음 링크 웹 앱은 링크 흐름이 끝날 때 실행되는 인텐트를 빌드합니다.

1
2

패키지 이름 변경에 대한 자세한 내용은 패키지 이름 변경에 대한 자세한 내용을 참조하십시오.;

응용 프로그램이 다시 열리고 즉시 채널에 직접 전화를 걸 수 있도록.

1
2
3
4
5
6
7
8
9
10
11

<의도 필터>
<액션 안드로이드:이름="안드로이드.의도.행동.보기" />
<카테고리 안드로이드:이름="안드로이드.의도.카테고리.기본값" />
<카테고리 안드로이드:이름="안드로이드.의도.카테고리.검색 가능" />
<데이터
안드로이드:호스트="리디렉션"
안드로이드:구성표="격자 무늬" />
</의도 필터>

응용 프로그램에 대한 인터페이스가 없습니다.:

  • 사용자가 활동을 닫을 때 수신 대기

  • 사용자가”브라우저에서 열기”옵션을 클릭했을 때 감지

  • 강제 종료

우리는 이러한 모든 단점을 성공적으로 해결했습니다.

먼저,사용자가 활동을 닫을 때 수신 대기하기 위해 시작 활성 결과를 사용하여 열어서 요청 코드를 전달합니다. 사용자가 시스템 뒤로 버튼의 왼쪽 상단 모서리에 있는 엑스를 사용하여 엑스를 닫으면,우리가 제공한 요청 코드와 활동의 결과 코드로 온액티비티 결과 콜백이 트리거됩니다.결과_취소됨. 데이터 의도는 정보를 포함하지 않지만,우리는 나머지 이벤트를 얻기 위해 채널에 최종 호출을 할 수 있습니다. 그런 다음 클라이언트 앱에 전달하고 링크 취소 개체를 반환하여 사용자가 의도적으로 링크를 닫았다는 신호를 보냅니다.

다음으로,사용자가”브라우저에서 열기”를 클릭했을 때 감지할 수 있는 잠재적 우려는 사용자가 별도의 애플리케이션,즉 브라우저에서 전체 흐름을 통과할 수 있다는 것이다. 폴링 및 의도 시스템이 동일한 방식으로 계속 작동하고 필요한 데이터를 여전히 얻을 수 있기 때문에 이것은 우리에게 문제가되지 않습니다.

마지막으로,사용자가 플로우를 성공적으로 완료하고 결과 인텐트가 실행되면,시큐리티 프로세스는 열려 있고 사용자의 작업 목록에 남아 있게 된다. 이 팬텀 프로세스는 낭비 일뿐만 아니라”최근 작업”시스템 버튼을 누를 때 사용자에게 혼란 스러울 수 있습니다. 따라서 흐름이 완료되면 강제 종료 할 수있는 방법이 필요합니다.

이 작업을 수행하기 위해,우리는 안드로이드 라이브러리에 대한 오픈 아이 Appa 에 표시된 패턴을 사용했다. 링크를 여는 활동의 결과를 처리하는 대신 인텐트 필터를 별도의 활동에 배치합니다. 이 두 번째 활동은 다음을 포함하는 웹 앱의 모든 리디렉션을 처리합니다: 성공적인 완료,흐름을 닫는 오류,가상 또는 앱 간 리디렉션 및 일반적인 시스템 오류입니다. 그런 다음 활동은 인텐트를 사용하여 인텐트를 사용하여 데이터를 여는 활동으로 다시 전달합니다.그리고 그 이유는 다음과 같습니다.이 플래그는 다음과 같습니다. 함께 사용,그들은 오프닝 활동 위의 스택에 모든 것을 취소,포함.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

이 작업을 수행하는 방법은 다음과 같습니다.(주){
이 리다이렉트된 상태일 때,자바(
)
이 리다이렉트된 상태일 때.크롬사용자설정탭완성-> {
의도.이 예제에서는 사용자 지정 탭과 사용자 지정 탭 간의 관계를 설명합니다.putExtra(LINK_RESULT_CODE, state.resultCode)
intent.putExtra(LINK_RESULT, state.result)
}
is RedirectState.UserInitiatedChromeCustomTabsViewClose -> {
intent.putExtra(LINK_CHROME_CUSTOM_TABS_USER_CLOSE_REDIRECT, true)
}
is RedirectState.OAuth -> {
intent.putExtra(LINK_OAUTH_REDIRECT, true)
intent.putExtra(LINK_OAUTH_STATE_ID, state.oauthStateId)
}
is RedirectState.RedirectError ->
intent.이 문제를 해결하는 방법은 무엇입니까?)
}
의도.플래그=의도.또는 의도.이 문제를 해결하려면 다음을 수행하십시오.

alt

웹뷰 또는 네이티브 플로우에서 사용할 수 없는 안전한 샌드박스 환경을 제공하기 위해,웹뷰는 실행 가능한 솔루션입니다. 그것은 개발자와 통합하기 쉽고 가벼운 자연과 속도에 브라우저 창 감사를 여는 것보다 더 나은 사용자 경험을 제공합니다.

이 모든 것은 우리가 창의적인 해결책을 제시할 것을 요구했습니다. 이러한 솔루션은 안드로이드에 내장 된 기능,특히 의도 프레임 워크의 이해에 의존했다.

개발자와 소비자에 대한 혜택은 필요한 노력의 가치가 있었다. 또한 여기에 제공된 팁을 사용하여 사용자(및 개발자)경험을 향상시킬 수 있습니다.

수천 명의 개발자와 수백만 명의 소비자가 사용할 고유 한 문제를 해결하는 데 관심이 있다면 채용 정보 페이지를 방문하십시오.

You might also like

답글 남기기

이메일 주소는 공개되지 않습니다.