'구글'에 해당되는 글 42건

firebase로 손쉽게 android 앱에 로그인 추가하기

FirebaseUI로 손쉽게 Android 앱에 로그인 추가 라는 문서가 있습니다.

 

트위터, 페이스북, 깃헙, 구글 로그인을 모두다 통합해 놓은 firebase 라이브러리입니다.

 

매우 간결한 코드만으로 해당 기능들을 구현하여 앱에 적용할 수 있습니다.

 

위의 소셜서비스 말고도 이메일 인증이나, 전화번호 인증 기능도 쉽게 추가할수 있습니다.

 

심지어 익명 로그인과 같은 익명 인증 기능도 제공하네요

 

 

 

 

다만 역시나 그렇듯이, UI의 커스터마이징에 한계가 있습니다. 아이콘, 색상, 크기정도만 바꿀수 있습니다.

 

 

이 기능들중에 좀 더 관심이 가는 기능이 전화번호로 인증하기 입니다.

 

왜 관심이 가느냐면,

 

 

요근래 많은 앱들은 회원가입시에 휴대폰번호를 요구하고 그 휴대폰번호의 실소유자가 맞는지 인증문자를 보내어 확인합니다.

 

그리고 그 안에 담긴 인증코드를 입력하여 최종 인증을 마치게 되지요.

 

 

이 과정에서 몇가지 작업을 사용자가 직접 타이핑하지 않고 자동화해줄수 있다면 

 

사용자 경험측면에서 훨씬 나은 경험을 제공해줄 수 있을것입니다.

 

 

1. 사용자가 직접 휴대폰번호를 타이핑하지 않아도 되도록 

 

사용자가 휴대폰번호를 직접 타이핑하지 않고, 자동으로 입력된다면 편합니다.

 

 

2. 인증문자를 받으면 자동으로 인증번호가 입력되도록

 

문자를 받았을때 문자의 인증번호를 직접 타이핑하지 않고, 자동으로 입력된다면 편합니다.

 

 

사실 이 두가지 기능은 많은 앱에서 이미 제공하고 있는 기능이기도 합니다.

 

굉장히 편리하기도 하죠.

 

 

 

그런데 제가 왜 firebase의 auth기능에 관심을 갖느냐면

 

 

위에서 언급한 2개의 기능을 구현하려면 필수적으로 phone과 sms의 permission이 필요합니다.

 

사용자에게 꽤나 민감한 퍼미션을 요구하게 되는것이죠.

 

(물론 많은 분들이 그냥 확인 버튼을 누르긴하지만...)

 

 

firebase에서 제공해주는 api를 사용하면 phone과 sms permission을 요구하지 않고도

 

위의 기능을 구현할수 있습니다. (단 google play service가 필요합니다.)

 

 

 

 

https://developers.google.com/identity/sms-retriever/overview

 

 

ui의 흐름은 전체적으로 위의 흐름과 같습니다.

 

사용자는 자신이 쓰고 있는 휴대폰번호 중에 가입할 번호를 선택하면(번호가 다른 유심이 두개 있을수도 있겠죠?)

 

앱제공자는 그 번호를 가져올수 있고, 그 번호로 인증코드가 담긴 문자메시지를 보냅니다

 

그리고 앱은 문자메시지 수신을 대기하게 됩니다.

 

문자메시지가 5분내에 수신되면 해당 sms의 메시지 내용을 읽을 수 있습니다.

 

 

휴대전화를 이용한 인증을 고정된 UI가 아닌 커스터마이징해서 구축할수 있는 가이드 입니다.

 

그리고 아무런 추가적인 퍼미션을 요청하지 않아도 됩니다.

 

 

 

 

해당 기능을 구현한 샘플 프로젝트입니다.

 

https://github.com/spotlight21c/GooglePhoneAuth

 

인증코드 문자를 발송하는 서버측 코드는 굳이 작성하지 않아도

 

다른 폰으로 테스트할 폰에게 문자메시지를 해당 형태로 직접 타이핑하여 전송해도 테스트해볼수 있습니다.

 

 

 

 

그런데 실제로 쓰기에 한가지 굉장히 아쉬운점이 있는데요.

 

당연히 보안을 위해 모든 수신된 문자를 읽을수 있지는 않고

 

특정한 문자열이 담긴 sms 를 읽을수 있습니다.

 

그 sms가 되기 위한 조건은

 

 

시작 문자열은

 

<#> 

 

끝나는 문자열은 문서에서 안내하는 방법대로 hash 문자열을 만들어서 전송해야 합니다.

 

 

 

<#> Use 123456 as your verification code in Example App!

FA+9qCX9VSu

 

 

이렇게 말이죠

 

 

그런데 이 hash 문자열이 너무나도 거슬리네요

 

자칫하면 저 문자열을 verification code로 오인할까봐 걱정도되고요.

 

 

그래서 막상 실제로 사용하기에는 조금 애매하지 않나 싶습니다.

 

문자메시지라도 구글이 대신 공짜로 보내주면 그러려니 하겠는데 그것도 아니고... ㅠㅠ

 

 

 

 

 

 

Tip. hash를 만드는중에 sha256 명령어를 사용해야되는데요

 

mac에서 sha256sum 명령어를 찾을수 없는 경우에 다음과 같이 심볼릭링크를 만들어주시면 사용가능합니다.

 

$ sudo ln -s /usr/local/bin/gsha256sum /usr/local/bin/sha256sum

 

 

 

 

 

2020.11.23 업데이트

 

구글의 문서에 설명된 해시를 만드는 방법이 mac 기준으로 동작하지 않습니다

 

keytool -exportcert -alias PlayDeploymentCert -keystore MyProductionKeys.keystore | xxd -p | tr -d "[:space:]" | echo -n com.example.myapp `cat` | sha256sum | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11

 

 

아래의 링크에 쉘스크립트 형태로 사용할수 있는 해시키 생성 스크립트가 있습니다

 

https://github.com/googlearchive/android-credentials/tree/master/sms-verification/android

 

 

$ sms-verification/bin/sms_retriever_hash_v9.sh --package com.google.samples.smartlock.sms_verify --keystore sms-verification/android/debug.keystore 

 
위와같은 형식으로 사용해주시면 해시키를 확인할수 있습니다
 
2021.6.24 업데이트

구글앱서명을 사용하는 경우에는 내가 가지고 있는 키스토어는 업로드키로 사용되고 실제로 유저에게 배포되는 앱은 구글앱서명이 되어 제공되기때문에 구글앱서명의 값을 이용해서 해시키를 만들어야 합니다

 

구글플레이의 앱무결성 메뉴에서 앱서명키 인증서를 다운로드 받을 수 있습니다

 

deployment_cert.der 이라는 파일을 다운로드 받게되는데 이 파일로 아래의 명령어를 통해 임시의 키스토어를 만듭니다.

 

keytool -importcert -file deployment_cert.der -keystore temporary.keystore -alias PlayDeploymentCert

 

PlayDeploymentCert 라는 alias를 가진 키스토어가 만들어졌습니다

 

이 키스토어 파일을 가지고 위에 언급한 방법으로 해시키를 만들어 사용하시면 됩니다

| 1 | 2 | 3 | 4 | ··· | 42 |