Nano Blog - 오병우

앱 개발시 Facebook SDK를 사용할 때 페이스북 앱이 설치되어 있지 않으면 인터넷을 통해 인증되고 정상 동작하지만, 페이스북 앱이 깔려 있으면 로그인 화면이 페이스북 앱의 로그인 화면이 나오면서 인증이 되지 않는 증상으로 난감했다.


결론부터 말하자면 Facebook 개발자 홈페이지에 등록한 안드로이드 앱의 Key Hash 때문이다.


개발자 홈페이지에 debug용 및 앱 업로드용 Key Hashes를 모두 등록해 두어야 한다.



1. 먼저 자신의 Debug용 Key Store가 어디에 있는지 파악해야 한다.

C:\Users\에 현재 계정의 아이디로 폴더가 지정되므로 탐색기로 들어가서 .android 폴더가 있는지와 .android 폴더 내에 debug.keystore 파일이 있는지 확인해야 한다.

예를 들어, 현재 사용하는 계정이 Administrator라면 탐색기로 

C:\Users\Administrator\.android 폴더에 debug.keystore 파일이 있는지 확인한다.


2. Keytool을 사용하여 인증서를 익스포트해야 한다.

keytool.exe 파일은 자바 런타임을 설치하면 깔린다. 자바 런타임 버전에 따라 숫자가 달라진다.

예를 들어, 자바 런타임이 7버전이라면 C:\Program Files\Java\jre7\bin 폴더에 keytool.exe 파일이 설치된다.


커맨드 창(cmd)을 실행하여 (1)번에서 확인한 Debug용 Key Store를 지정한다. alias로는 androiddebugkey를 지정한다.


"C:\Program Files\Java\jre7\bin\keytool" -exportcert -alias androiddebugkey -keystore C:\Users\Administrator\.android\debug.keystore


위와 같이 실행하면 암호를 물어본다. 여기서는 android를 입력한다.


제대로 되었다면 이상한 문자들이 나타날 것이고 (삑삑 소리도 들리고...), 잘못 되었다면 눈으로 알아볼 수 있는 문자(오류를 설명하는 테스트)들이 나타난다.


3. 암호화 하여 Key Hash를 만든다.

이 때 openssl이 설치되어 있어야 한다. 밑의 명령어를 cmd 창에서 실행해 보고 안된다면 openssl을 설치하고 수행해야 한다.


"C:\Program Files\Java\jre7\bin\keytool" -exportcert -alias androiddebugkey -keystore C:\Users\Administrator\.android\debug.keystore | openssl sha1 -binary


마찬가지로 이상한 문자들이 나타나면 성공!!!


4. Base64로 인코딩한다.


"C:\Program Files\Java\jre7\bin\keytool" -exportcert -alias androiddebugkey -keystore C:\Users\Administrator\.android\debug.keystore | openssl sha1 -binary | openssl base64


5. cmd 창에서 마우스 오른쪽 버튼을 눌러서 "표시"를 선택하고 커서로 출력 스트링을 선택하고 Enter를 누른다.


6. 페이스북 개발자 홈페이지의 Key Hashes에 Ctrl+V로 붙여넣기하고 맨 맽에 오른쪽에 있는 "변경 내용 저장" 버튼을 누른다.


------------------------------------------

주의할 점은, 앱 업로드용으로는 다른 별도의 Key Store를 사용하므로 그 키스토어에 대한 Key Hash를 추가로 지정해 주어야 한다.

------------------------------------------

그리고, 페이스북 개발자 홈페이지에서 Status & Review에서 general public?을 "예"로 해두어야 한다.

또한, 설정에서 Single Sign On에서도 "예"로 설정해 두었다.