본문 바로가기

Programming/Android13

Trust anchor for certification path not found 해결하기 Android 앱에서 https 연결을 시도하려고 할 때 Trust anchor for certification path not found 라는 에러가 발생하면서 연결이 실패했다. 서비스 중인 앱이라 부랴부랴 원인을 찾기 시작함. 원인은 해당 앱에 신뢰성 있는 인증서를 찾지 못했기 때문인 것 같다. 우선 첫번째로 TrustManager를 사용해서 인증서 회피를 시도했다. TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return new java.security.cert.X509Certificate[].. 2021. 11. 25.
violation of our Malicious Behavior policy???? 크롤링 하는 서버가 http -> https로 변경됨에 따라 나 역시 서비스 중인 앱을 https로 변경하였다. 단순히 주소만 https로 변경하면 되는 줄 알았는데, 그게 아니었다 ㅠ_ㅠ 인증서 없이 간단하게 https 통신을 가능하게 하기 위해서 아래의 코드처럼 모든 인증서를 허용해주는 객체를 만들고 httpsConnection에 설정을 추가해 준다. TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager(){ public X509Certificate[] getAcceptedIssuers(){return new X509Certificate[0];} public void checkClientTrusted(X509Certificat.. 2020. 12. 4.
안드로이드 해시 값 확인하기 카카오 API를 사용하기 위해서는 카카오 개발자 센터에서 안드로이드 키 해시를 등록해야 한다. 만약 해당 안드로이드와 다른 키 해시 값이 등록이 될 경우 API 값을 리턴 받을 수가 없다. 그리고 디버그용 해시 값과 릴리즈용 해시 값이 엄연히 다르기 때문에 두가지 경우의 해시 값을 모두 등록해주어야 한다. ( 카카오 개발자 센터에서 디버그 용, 릴리즈 용 애플리케이션을 각각 만들어야 한다는 소리) 우선 디버그용 키 해시 값 얻어오는 방법을 알아 보자. (맥 기준) $> keytool -exportcert -alias androiddebugkey -keystore -storepass android -keypass android | openssl sha1 -binary | openssl base64 그리고 .. 2018. 10. 5.
Can`t load DaumMapEngineApi.so file 근 5년여 가량 개인 앱 서비스를 운영하고 있었는데, 갑자기 어제 구글플레이개발자콘솔 화면에 아래와 같이 에러 횟수가 확 늘어나는 것을 확인했다. 게다가 어떤 분이 지도보기를 하면 앱이 죽는다고 남겨 주신 리뷰가 해당 버그를 추적하는데 큰 힘이 되었다. 우선 버그를 찾기가 엄청 힘들었다. 일단 내 폰, 와이프 폰에서는 정상 동작 한다!! 사용자 실수인가??? 이런 의심도 찰나.. 우연찮게 빌린 처남 폰에서 지도보기를 하니 앱이 죽는다. -_-;;; 아... 최신 폰에서만 앱이 죽나 보다... 처남에게 양해를 구하고 디버깅 시작!! Can`t load DaumMapEngineApi.so file 위의 에러 메시지가 발생하며 MapView가 실행되지 않는 것을 확인할 수 있었다. '아.. 그래 지도 lib .. 2018. 10. 4.
구글 GCM 구현하기 서버로부터 push 서비스를 받기 위해서는 구글에서 제공하는 GCM(Google cloud messaging) 서비스를 이용해야 한다. 우선 구글 api 개발자 센터에 접속해서 GCM 서비스를 이용하기 위한 프로젝트를 만들자. 우측 상단에 API Project라는 메뉴를 클릭한 후 프로젝트 생성 메뉴를 클릭해서 프로젝트를 생성하자. 프로젝트를 생성하면 프로젝트 ID가 함께 생성되는데 이 ID 값을 google 측에 넘겨야 GCM ID를 받을 수가 있다. 이제 프로젝트를 클릭해서 사용 하고자 하는 API를 선택해야 한다. Google Cloud Messaging을 클릭한 후 사용 설정을 활성화 해주자. 이제 서버에서 gcm 요청 curl을 날릴 때 인증을 위한 서버키를 만들어야 한다. 사용자 인증 정보에서.. 2016. 4. 26.
특수문자 처리 방법 안드로이드에서 아래와 같이 코드를 작성하였더니 에러가 발생.. String value = data.split("("); 아마도 "("가 특수문자로 처리되어 인식이 안되는 것처럼 보였다.그래서 앞에 "\"를 추가해 준다음 다시 동작 시켰더니 그래도 제대로 동작을 하지 않았다. 찾아보니 자바에서는 특수문자 처리를 위해서는 "\\" 이렇게 두개의 역슬러시로 표현을 해줘야 한다고 한다. String value = data.split("\\("); 정확하게 동작하는 것 확인!! 배우고 또 배우자... 2015. 2. 23.
jsoup 사용하기 파이썬에 BeautifulSoup가 있고, C#에 HtmlAgilityPack이 있다면, 자바에는 Jsoup이 html 파싱에 가장 편할 것 같다. (이름도 beautifulSoup와 비슷하게 jsoup임) 사용 방법부터 보자면, 우선 jsoup 라이브러리부터 가져와야 한다.해당 홈페이지에서 다운 받거나, gradle을 이용해서 라이브러리를 추가하도록 한다. dependencies{ compile 'org.jsoup:jsoup:1.7.3'} 라이브러리 추가가 완료되었으면 이제 실제 어떻게 사용되는지를 확인해 보자. 웹 페이지의 GET 데이터 정보 가져오기 import org.jsoup.Jsoup; import org.jsoup.nodes.Document;import org.jsoup.nodes.Eleme.. 2015. 2. 19.
intent 파라미터가 null? 아래와 같이 intent를 생성하여 다른 activity에 data를 보내는데, 받는 쪽 activity에서 data가 null이라는 error를 리턴했다. 보내는 쪽 코드 Intent i = new Intent(Test1Activity.this, Test2Activity.class);i.putExtra("Title", edit_title.getText());startActivity(i); 받는쪽 코드Intent i = getIntent(); String title = intent.getStringExtra("Title"); 2015. 2. 9.
ScrollView 아래에 버튼 두기 앱 화면에 ScrollView를 두고 그 아래에 확인 버튼을 두려고 하는데 자꾸 확인 버튼을 ScrollView가 뒤덮는 상황이 발생한다. 기존에 구현한 코드는 아래와 같다. 해결 방법은 의외로 간단했다. ScrollView에서 android:layout_weight="1" 로 설정해주면 아래 Button이 보이게 된다.layout_weight=1로 설정을 하게 되면 우선 Button의 height가 wrap_content이기 때문에 Button이 필요로 하는 영역을제외한 나머지 모든 부분을 ScrollView가 차지하겠다는 뜻이 된다. 만약 이 설정을 하지 않는다면 ScrollView의 wrap_content를 우선 처리하기 때문에 Button 영역이 ScrollView 영역에뒤덮여서 안보이게 된다. 2015. 2. 7.