개발 - 안드로이드 15

구글 로그인 - 백엔드 스프링 프레임워크

구글 로그인은 다음과 같은 방식으로 처리 됩니다. ① 프론트엔드(안드로이드) 에서 구글 로그인을 하면② 인증토큰을 백엔드 서버로 보내고③ 백엔드 서버에서는 인증토큰이 유효한지 구글 서버로 보내서 검증합니다.④ 인증토큰이 유효하면 인증토큰에서 아이디, 이메일을 추출해서 사용할 수 있습니다.⑤ 이후 회원가입 처리 ※ 프론트엔드(안드로이드) 에서 인증토큰에서 바로 아이디, 이메일을 추출해서 사용할 수도 있겠지만,이렇게 하면 위변조가 가능하기 때문에 구글 서버에서 검증을 해야 합니다.  백엔드 스프링 프레임워크에서 구글 인증토큰 검증하는 예제 입니다. maven com.google.api-client google-api-client 1.26.0 com.google.oauth-client google-oauth-..

안드로이드 Debug, Release SHA-1 해시값 구하는 방법

안드로이드 구글 로그인 같은 API를 사용할 경우 SHA-1 해시값을 필요로 합니다.그런데 뭔지 모를 서명 인증서도 많고, Debug, Release 각각 만들어줘야 하다보니 한참 해매네요. - Debug안드로이드 스튜디오에서 SigningReport 스크립트 실행하면 나옵니다.Gradle(화면 오른쪽 메뉴) - Excute Gradle Task - gradle signingReport 선택 - Release앱 배포시 어떤 인증서 사용했는지 차이가 있는 것 같습니다.앱 배포할 때 PC에 저장된 것으로 서명 했는지, 구글 플레이 콘솔에서 만든 것으로 서명했는지 차이 같아요.잘 모르면 두 개 다 해보고 API 확인해보면 됩니다. 1. 구글 플레이 콘솔에서설정 - 앱 서명 - "앱 서명 키 인증서" - "SH..

안드로이드 Fragment에서 windowSoftInputMode 바꾸는 방법

안드로이드 특정 fragment 화면에서 windowSoftInputMode를 변경하려고 했지만 적용이 안됩니다.MainActivity에서 적용하려고 했는데, 그렇게 하면 전체 Fragment에 영향이 있습니다. 아래는 특정 Fragment에서만 windowSoftInputMode="adjustNothing" 로 변경하는 예제 입니다. 1. AndroidManifest.xmlAndroidManifest에서 MainActiviy에 관해서 windowSoftInputMode 기본값으로 아무거나(저는 adjustNothing) 설정해야 합니다.설정 안하면 기본값으로 nothing 똑같을 것 같은데, 안하면 아래 JAVA 코드가 안 먹힙니다.이유는 모르겠음  2. Fragment.java특정 Fragment가 ..

안드로이드 fragment에서 editText.requestFocus() 안되는 경우

안드로이드에서 editText.requestFocus()는 커서를 입력 필드에 포커싱 하는 메소드 입니다. 그런데 이것이 경우에 따라서 될 때가 있고, 안될 때가 있습니다. 아래 코드는 처음은 되는데, 두번째 부터 안되었습니다. public class TalkWriteFragment extends Fragment { @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment3_talk_write, ..

안드로이드 listView notifyDataSetChanged 0 → 1 신규 추가시는 동작 안함 해결

안드로이드 listView에서 데이타셋이 변경되는 경우 adapter.notifyDataSetChanged()를 호출하면 자동으로 화면이 갱신됩니다. 그런데 안되는 케이스가 있습니다. 초기 데이타셋이 0건에서 신규 추가 변경되는 경우는 adapter.notifyDataSetChanged()이 동작하지 않습니다. adapter.notifyDataSetChanged() 메소드를 찾아보면 이렇게 생겼습니다. mObservers.size() 이 0인 경우는 for 문을 타지 않습니다. public void notifyChanged() { synchronized(mObservers) { // since onChanged() is implemented by the app, it could do anything, i..

안드로이드 ListView 멀티 아이템

안드로이드 ListView에서 여러 종류의 아이템을 출력하는 방법입니다. 처음에는 ListView를 3개 만들어서 처리하려고 했는데, 스크롤시 전체가 움직이지 않고 하나만 움직여서 문제가 되었습니다. 이런 경우 ListView 멀티 아이템을 사용해야 합니다. 타입 종류 위 그림을 보면 아이템 타입은 3개가 존재 합니다. 1. 타이틀 2. 구분선 3. 사용자 정보 먼저 3개의 layout.xml을 먼저 만들어 줍니다. 타입 1 : item_title.xml 타입2 : item_line.xml 타입3 : item_user.xml . . . . . . MultiUserItem.java 3가지 타입을 처리할 수 있는 Item 클래스를 만들어 줍니다. 각 타입을 구분할 수 있는 type 변수가 있어야 하고, 각 ..

안드로이드 raw 이미지 Uri 얻어오기

피카소 라이브러리에서 raw 이미지를 처리하려고 했는데, drawable 이미지는 되는데 raw는 지원 되지 않았습니다. 이것저것 해본 결과 raw를 drawable로 캐스팅해서 처리하는 방법은 Suppress annotation 추가해서 하는 방법밖에는 없더라고요. 개인적으로 Suppress annotation 은 찜찜하기도 하고, 버그를 유발할 것 같아서 사용을 안하는 편입니다. 다른 방법으로 raw 이미지의 Uri를 얻어와서 처리 하였습니다. // raw 이미지 URI Uri uri = new Uri.Builder() .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) .authority(context.getResources().getResourcePackageN..

안드로이드 ListView에 ImageView 이미지 넣기

안드로이드 리스트 뷰에 이미지를 넣는 방법 입니다. 처음에는 Adaptor의 getView 메소드에서 쓰레드로 비동기 처리하려고 했는데 에러가 나서 잘 되지 않았습니다. 리스트의 이미지가 빠지기도 하고, 스크롤 하면 에러나기도 하고 정확하게 왜 안되는지는 모르겠습니다. 피카소 라이브러리 검색해보니 피카소 라이브러리를 사용하면 다운로딩, 캐싱, 메모리 관리 등 어려운 것을 자동으로 처리 해준다고 합니다. build.gradle 기존 파일에서 라이브러리를 추가 합니다. implementation 'com.squareup.picasso:picasso:2.8' UserAdapter.java getView 메소드에서 사진 부분을 피카소 라이브러리를 사용해서 처리 @Override public View getVie..

안드로이드 Notification 클릭시 Fragment 이동

안드로이드에서 FCM Notification을 클릭시 특정 Fragment로 이동하는 방법입니다. 검색해서 알려진 방법으로 Fragment 이동은 되나 MainActivity가 여러개 생겨서 문제가 생기는데 이를 해결하였습니다. AndroidAManifest.xml 우선은 MainActivity가 여러개 생기지 않게 singleTask 설정합니다. FCMService.java FCM 수신시 Notification 알림 부분 입니다. Intent에 이동할 fragment가 fragment2로 이동한다고 데이타를 넣어 줍니다. 이는 MainActivity의 onCreate와 onNewIntent에서 처리 됩니다. // Notification 알림 Intent intent = new Intent(this, M..