앱을 완성하고 출시를 할 때
기본, 필수이지만 놓치는 부분이 있다.
바로 앱 서명 부분.
앱 서명을 왜 하는지 와닿지 않은 상태에서 따라만 하려니
디버깅할 때 되던 기능이
스토어를 통해 다운을 받으면 먹통이 되는 모습을 발견하게 된다.
나는 바보라서 어플의 카카오로그인이 안되고나서야 앱 서명이 뭔지 깨닫게 되었다.
기업의 거래과정을 보면 협상안을 기업의 회장이 보면 서명을 통해 확인했다는 인증을 남긴다. 그 서명은 그 거래가 나중에 법원같은 곳에서 증거 등으로 유효성을 따지게 됐을 때 공인된 것임을 인증한다. 서명에 대응되는 앱 서명키는 비슷하게 해당 앱이 인증된 개발자로부터 만들어진 앱이다 를 인증하는데 이용된다(앱서명키=서명, 개발자=회장, 타사 api회사=법원)
앱 서명키는 개발모드, 출시모드로 나뉘어있고
개발모드의 앱서명키는 디버깅된 앱의 유효성을, 출시모드의 앱서명키는 스토어에서 다운받은 앱의 유효성을 인증하게된다.
이 둘을 반드시 독립적으로 관리를 해야하는데,
그렇지않으면 개발할 때는 잘 되던 api사용이 정작 앱을 다운 받는 소비자의 폰에서는 안될 수가 있다.
여기서
두가지를 말한건데
1. 출시방법에서의 앱서명키
- apk로 출시
- App Bundle로 출시
2. 앱 서명키를 왜 등록하고 사용하는가(사용예시)
- 개발모드 키 등록
- 출시모드 키등록
- 앱번들로 출시햇을 때 키등록
이게 앱 출시에서의 앱 서명키의 전부라고 할 수 있다.
1. 출시방법에서의 앱 서명키
이 부분은 Flutter의 문서에도 나와있듯이
명령어를 통해 간단하게 만들 수 있다.
맥/리눅스에서는
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
윈도우에서는
keytool -genkey -v -keystore c:/Users/USER_NAME/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
여기서 -keystore에 해당하는 ~/key.jks와
마지막에 -alias에 해당하는 key
를 기억해야한다
마찬가지로 아래에 문서에 나와있는 출시과정을 따라하면서
keystore의 비밀번호도 기억해야 한다.
이들은 문단2에서 설명하는 키 해시값을 추출하는데 사용된다.
그리고 다음의 방법은
flutter-ko.dev/docs/deployment/android
에서 확인할 수 있다.
놓칠 수 있는 중요한 점은
이 앱 서명키는 앱을 업로드할 때는 필수적이지만
apk로 업로드하느냐, App Bundle로 업로드를 하느냐에 따라
그 이후에 이후 형태가 달라진다.
다음 문단에서 소개하겠다.
그렇다면 이 짓을 왜 해야하는가? 위에서 비유했던 것 말고 정확히 앱 서명이 사용되는 모습을 보자.
2. 앱 서명키를 왜 등록하고 사용하는가
여기서는 세가지를 설명할 것이다.
1) 앱 서명키를 왜 등록하고 사용하는가
2) 앱 서명키의 키 해시값 추출방법
3) API제공업체(카카오 개발자)에 키 해시값 등록
1) 앱 서명키를 왜 등록하고 사용하는가
타사의 Api를 사용할 경우 이 어플이 해당 api회사에 등록된(카카오 서비스 등록)앱인지 확인을 해야한다
개발모드의 서명키,
출시모드의 서명키
를 독립적으로 관리해야하는데
개발모드 서명키를 등록하면 디버깅모드에서만,
출시모드 서명키를 등록하면 스토어를 통해 다운받은 앱에서만 api사용을 허락하게 된다.
키을 통해 키 해시를 등록하는 방법을 보자
- 개발모드 키 해시 추출 명령어
맥/리눅스
keytool -exportcert -alias <key-alias명> -keystore <debug.keystore의 경로> -storepass android -keypass android | openssl sha1 -binary | openssl base64
Windows
keytool -exportcert -alias <key-alias명> -keystore <debug.keystore의 경로> -storepass android -keypass android | openssl sha1 -binary | openssl base64
명령어 중간에 보이는 <key-alias명>과 <~.keystore의 경로>는
문단1에서 생성하면서 설정했던 앱 서명키의 -alias값과 keystore의 경로를 기억하고 넣어야 한다.
뒤이어 나오는 비밀번호 입력도 마찬가지다.
해당 정보를 까먹었다면
해당 앱 프로젝트의 root에 있는 local.properties파일에 그 정보가 저장되어있다.
- 출시모드 키 해시 추출 명령어
맥/리눅스
keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
Windows
keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | PATH_TO_OPENSSL_LIBRARY\bin\openssl sha1 -binary | PATH_TO_OPENSSL_LIBRARY\bin\openssl base64
하지만 앱번들로 출시하게되면
개발자가 프로젝트에서 직접뽑은 출시 앱서명키 대신
앱 업로드 도중 구글플레이에서 자체적으로 만든 Play 앱 서명키로 대체된다.
그래서 앱 번들로 출시된 앱을 다운받은 이용자가 api를 사용하기 위해선
Play 앱 서명키에서 키 햐시를 따로 다운받아 키해시 등록을 해줘야 한다.
<Play앱서명키 등록>
<Play 앱서명키 위치>
다시 한번 강조하자면
이 앱이 원래처럼 이 앱 서명키를 사용하려면
앱 프로젝트단에서 생성한 앱 서명키가 아닌
이 Play스토어에서 만든 앱 서명키를 사용해야 한다.
즉, 이 Play앱서명키에서 추출한 키 해시값을 등록해야 한다.
<Play 앱 서명키의 키 해시 등록>
위 사진을 보면 인증서를 다운받을 수도 있고
저 SHA-1 인증서 지문을 사용할 수도 있다.
여기서는 저 SHA-1인증서 지문을 통해
앱의 키 해시값을 추출해보겠다.
echo <Play 앱 서명키의 SHA-1인증서 지문> | xxd -r -p | openssl base64
를 명령어로 입력하면
Play 앱 서명키에 해당하는 키 해시값이 나온다.
3) API제공업체(카카오 개발자)에 키 해시값 등록
이렇게 등록해서 사용할 수 있다.
'인포테인먼트 - development > flutter' 카테고리의 다른 글
[flutter] 에러 "Flutter/Flutter.h not found." 에러 해결 (2) | 2020.12.20 |
---|---|
[flutter] Flutter 프로젝트에서 android 모듈을 켜고싶은데 버튼이 비활성화 되어있을 때: .iml파일 (0) | 2020.12.19 |
[flutter] 에러: Execution failed for task ':app:compileFlutterBuildDebug'. 뒤로의 모든 에러해결과정 = Flutter SDK를 바꿔주면 통로가 뚫린다 (0) | 2020.12.08 |
[flutter] 특정 위젯 rebuild에서 제외시키기: AsyncMemoizer (0) | 2020.11.09 |
[flutter] TextField 타이밍 : Debouncing (0) | 2020.11.05 |
댓글