Mobile Front 13

[Flutter] 푸시 알림 보내기 (FCM push notification)

저번 글에 이어 클라이언트 단에서의 푸시 알림 구현을 진행해보겠다. 구현할 코드를 크게 세 부분으로 나누면, 1. FCM 인증 및 초기 설정 2. 알림 구현 3. Firebase Token 발급 으로 나눌 수 있다. 먼저 구현에 앞서 패키지를 설치하겠다. firebase_core: ^2.8.0 firebase_messaging: ^14.3.0 flutter_local_notifications: ^13.0.0 패키지 설치 및 프로젝트 - Firebase 연결은 어렵지 않아 생략하도록 하겠다. fcmSetting.dart Future _firebaseMessagingBackgroundHandler(RemoteMessage message) async { // If you're going to use other..

[Flutter] webview 양방향 통신 (flutter webview two way communication)

최근 하이브리드 앱을 많이 만들었다. 하이브리드 앱은 네이티브 앱에 비해 스토어(구글 플레이스토어, 애플 앱스토어)에 덜 종속적이고 별도의 심사과정없이 최초 등록만 되면 빠른 업데이트가 가능하다는 차별점이 있다. 하지만 하이브리드 앱은 웹뷰를 이용하기에 네이티브 앱에 비해 신경써야할 부분이 조금 더 많다. 이 중 하나가 바로 Flutter와 Webview에 띄워진 웹 간의 통신이다. 필자는 Flutter의 웹뷰 패키지로 아래 webview_flutter 패키지를 사용하였다. (4.0.0 이상 버전 사용) webview_flutter | Flutter Package A Flutter plugin that provides a WebView widget on Android and iOS. pub.dev 1. ..

[Flutter] 웹뷰 뒤로가기 구현 (+ 앱 종료시 다이얼로그 띄우기) (webview_flutter 4.0.0 버전)

ios의 경우 제스쳐로 뒤로가기가 가능하지만 기본적인 시스템 뒤로가기가 없다. 하지만 안드로이드의 경우 기본적으로 시스템 네비게이션 바가 있기에 웹뷰로 작동하는 어플리케이션이 비정상적으로 종료되는 것처럼 보일 수 있다. 때문에 웹뷰 구현 시 따로 뒤로가기에 대한 구현을 해줘야한다. 필자는 가장 좋아요 수가 많은 flutter 공식 팀에서 만든 웹뷰 패키지인 webview_flutter 패키지를 사용하였다. https://pub.dev/packages/webview_flutter webview_flutter | Flutter Package A Flutter plugin that provides a WebView widget on Android and iOS. pub.dev 이번에 4.0.0 버전으로 업그레..

[Android] onActivityResult resultcode always 0 (resultCode 0 문제)

이건 사실 예전에 사진 관련해서 startActivityForResult를 사용할 때 겪었던 문제인데 항상 resultCode가 0이 되는 문제였다. 이 문제는 startActivityForResult에 대해 잘 몰라서 발생했던 것 같다. Activity A에서 Activity B 로 startActivityForResult를 했으면 B에서 A로 돌아올 때 그냥 finish()를 해주는 게 아니라, val intent = Intent(this, MainActivity::class.java) setResult(RESULT_OK, intent) finish() 이렇게 setResult(RESULT_OK, intent)를 해줘야한다.

onActivityResult에서 apiException 10, apiException 20501 문제

최근 firebase로 구글 아이디 로그인 인증을 구현하려고 하는데 계속 apiException10과 apiException20501이 번갈아가면서 떴다... 몇시간을 찾아가며 디버깅했지만 해결되지 않았다. 그렇게 자포자기하고 있던 중 로그에 game이 있는걸 발견했고 오류의 원인을 알게되었다.. 바로 이 부분이었다. .Builder()안의 GoogleSignInOptions뒤에 부분이 DEFAULT_GAMES_SIGN_IN으로 되어있었다. 이렇게 DEFAULT_SIGN_IN으로 바꿔준뒤 apiException20501문제는 해결됐다. 그리고 apiException10 문제는 결국은 firebase 콘솔에 넣어준 SHA-1 지문의 오류일 것이라고 stackoverflow의 사람들이 입을 모아 말했다. 알..

[kotlin] RecyclerView Refresh in Fragment(리사이클러뷰 갱신, 리사이클러뷰 목록 갱신하는 법, fragment recyclerview refresh, notifyDataSetChanged)

* * * 내용의 본론이 급한 사람은 밑의 빨간 글씨부터 읽으면 됩니다 * * * 며칠간 방법을 찾느라 삽질의 삽질한 것을 드디어 구현했다..! 그것은 바로 RecyclerView의 Refresh(갱신) 방법이었다. 정말 오랫동안 구글링을 했는데, 굉장히 다양한 방법들이 있었고 그 중 대다수를 실패했다. 삭제를 했으면 갱신이 되어야 UI상에 리액션이 되고 이를 통해 앱이 올바르게 작동하고 있음을 사용자가 인지할텐데 이것이 안되니 무척 고민이었다.. 필자가 원하는 것은 목록 추가 버튼을 누르면 -> 다른 액티비티에 넘어간 후 -> 그 액티비티에서 추가할 데이터의 정보를 입력한 후 -> 저장을 누르고 나오면 -> 리사이클러뷰가 UI상에서 저절로 갱신 되는 것이었다. 필자의 MainActivity는 위의 사진..

리사이클러뷰 체크박스 오류(recyclerView Adapter error)

필자가 만들고 있는 앱의 목록 삭제 창의 페이지는 checkbox를 담고 있는 item의 리사이클러뷰로 이루어져 있다. 이 체크박스를 통해 data class의 check 값이 true 혹은 false가 되고 true가 된 data들을 대상으로 삭제 버튼 클릭시 삭제가 되는 방식이다.(여러 항목을 동시에 삭제할 수 있게 구현하기 위해 고안한 방식) 근데 문제가 생긴 것이 삭제 페이지 리사이클러뷰를 올렸다 내렸다 하면 체크하지도 않은 항목이 저절로 체크가 되는 문제가 발생한 것이었다. 여러차례 디버깅을 시도한 결과 리사이클러뷰 어댑터의 Holder 속 itemView들의 값 설정 함수안의 코드가 문제임을 알게되었다. (아래 코드블럭의 코드가 문제의 원인이었다.) // editmode에서 memo의 chec..

Floating Action Button 에 원하는 이미지를 커스텀하지 못하는 문제(이미지가 버튼 크기보다 작은 문제)

이 문제는 이미지는 버튼의 크기보다 크지만 기본적으로 fab에서 크기변경을 지원하지 않기 때문에 발생하는 문제였다. 이를 해결하기 위해서는 res -> values에 dimens.xml 파일을 추가해야 한다. 그리고 다음과 같은 코드를 입력한다. 58dp 58dp size_normal은 전체 버튼의 크기이고 image_size는 그 안 사진의 크기이다. 따라서 두 크기를 동일하게 하면 이미지가 버튼 크기만큼 꽉차게 된다. 그리고 floating action button의 xml로 돌아와 다음 코드를 추가해주면 된다. app:fabSize="normal" 간단한 문제인데 해결하는 방법을 찾는건 너무 어려웠다..

Cleartext HTTP traffic to ... not permitted 문제 해결법(Glide error, Glide 오류, 사진 불러오기 실패 문제)

며칠동안 해결되지 않던 문제가 있었다... 식품안전나라에서 공공데이터를 불러와 Glide 를 이용해서 사진을 넣는데 텍스트는 잘 들어가는 반면에 사진만 뜨지 않는 문제였다.. 정말 며칠을 이 문제 해결을 위해 사진 자르기를 쓰려고 사용한 cropper api를 이용해 사진을 불러와도 보고 별의 별짓을 다 해봤지만 문제의 원인조차 알 수 없었다.. 그동안 버그가 있을때는 보통 디버깅시에 빨간색으로 글씨가 떠 해당 코드를 수정하면 됐었지만 이번 경우는 그런 디버깅 메시지조차 없어 너무 답답했다.. 그렇게 거의 반포기 상태로 다른 작업을 우선 이어나갔다. 근데 다른 문제를 해결하기 위해 디버그를 하던 중 디버깅 메시지에서 눈에 들어오는 메시지가 있었다. 바로 Glide가 보내는 메시지였는데, 자세히 읽어보니 ..

반응형