포스팅 썸네일 이미지

학습

deprecated된 firebase dynamic link 없이 Firebase email link authentication 구현하기 - 2

이전 글https://dodobest.tistory.com/120 deprecated된 firebase dynamic link 없이 Firebase email link authentication 구현하기 - 12025년 8월 25일부터 Firebase dynamic Link(FDL)가 deprecated 되어 사용할 수 없게 됩니다. Deprecation 문서에 따르면 신규 프로젝트 생성자는 FDL을 사용할 수 없고, Firebase email link authentication에 한해서 고객센dodobest.tistory.com  이전 글에서 사용자가 입력한 이메일로 인증 메일을 발송하는 코드를 작성했습니다.이번 글에서는 인증 메일의 확인 여부를 관찰하는 코드를 작성해보겠습니다.Android Kotli..

2024.09.16 게시됨

포스팅 썸네일 이미지

학습

deprecated된 firebase dynamic link 없이 Firebase email link authentication 구현하기 - 1

2025년 8월 25일부터 Firebase dynamic Link(FDL)가 deprecated 되어 사용할 수 없게 됩니다. Deprecation 문서에 따르면 신규 프로젝트 생성자는 FDL을 사용할 수 없고, Firebase email link authentication에 한해서 고객센터에 문의하면 FDL을 사용할 수 있다고 합니다. (문서와 다르게 신규 프로젝트도 Firebase Console에서 Run 탭 하위의 Dynamic Links에서 사용할 수 있습니다.) Q. I need to onboard onto Firebase Dynamic Links to enable email link auth in Firebase Authentication. What should I do?A. It curren..

2024.09.11 게시됨

포스팅 썸네일 이미지

학습

Safe Navigation Action

문제 상황 및 해결방법 상단의 사진 권한 변경 영역을 클릭하면 Navigation Action을 이용해 ModalBottomSheetFragment가 실행되어 ModalBottomSheet가 보이도록 설정했습니다.   천천히 눌렀을 때는 문제 없었으나, 매우 빠르게 연속해서 누를 경우 아래와 같은 exception이 발생했습니다.내용을 요악해보면, 현재 ModalBottomSheetFragment에서 호출한 Action이 없기 때문에 처리할 수 없다는 뜻입니다.Process: com.bestapp.rice, PID: 12707java.lang.IllegalArgumentException: Navigation action/destination com.bestapp.rice:id/action_profileI..

2024.08.22 게시됨

포스팅 썸네일 이미지

학습

Flow, Channel, ChannelFlow, CallbackFlow

Flow와 Channel의 목적 Flow : 데이터를 생성하고 처리하는데 사용할 수 있습니다.Channel : 코루틴 간에 데이터를 주고 받는데 사용할 수 있습니다. Flow & Channel 비교 Flow는 비동기적으로 생성된 데이터를 전달하는 스트림으로, 관찰자가 없으면 데이터를 생성하지 않는 Cold source 입니다.기본적으로 Flow는 생성된 데이터가 collect 함수에 의해 소비될 때까지 다음 데이터를 생성하지 않습니다. 단, buffer 함수를 통해 버퍼를 설정하면, 버퍼 크기 + 1 만큼의 데이터를 미리 생성할 수 있습니다. 버퍼가 있는 Flow는 Hot source 입니다. onBufferOverflow 파라미터를 이용해 버퍼가 꽉찼을 때 동작을 정의할 수 있으며, 다음의 3가지 종류..

2024.08.15 게시됨

포스팅 썸네일 이미지

학습

RecyclerView Itemdecoration 올바르게 사용하기

1. 구현 요구 사항 프로필 화면에서 사용자들이 모임에서 찍었던 사진을 GridView 타입으로 보여줄 수 있는 UI가 필요했습니다.이때, 인스타그램과 같이 사진 사이에 동일한 Margin이 필요했습니다. 2. 구현 방법 사진들을 표시하기 위해 구현한 RecyclerView 입니다.한 열에 여러 이미지를 표시하기 위해 GridLayoutManager를 이용했으며, 개수는 3개로 설정했습니다.  ViewHolder에서 사용한 XML 입니다.RecyclerView에서 한 열의 아이템을 3개로 설정했기 때문에, 3개의 아이템이 모든 width를 차지하도록 Layout의 width를 match_parent로 설정했습니다.이미지가 정사각형으로 표시되도록 Style을 정의해 설정했습니다.아이템 사이의 세로 방향 M..

2024.07.24 게시됨

포스팅 썸네일 이미지

학습

왜 repeatOnLifecycle 앞에 viewLifecycleOwner를 붙여야할까?

핵심 내용 선 정리왜 repeatOnLifecycle 앞에 viewLifecycleOwner를 붙여야할까? 공식문서 예시 코드에서 repeatOnLifecycle 앞에 viewLifecycleOwner를 붙여서 사용하고 있습니다. 왜 일까요?  class MyFragment : Fragment() { val viewModel: MyViewModel by viewModel() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) // Create a new coroutine in the lifecycleScope ..

2024.06.26 게시됨

포스팅 썸네일 이미지

학습

Iterable, Iterator, Collection

전체적인 구조Collection, Iterable, Iterator의 전체적인 구조는 다음과 같다. 각 Interface는 어떻게 구성되어 있고 어떤 역할을 하는지 알아보자.  Iterable Iterator를 반환하는 함수만 있는 인터페이스다. 이 인터페이스를 구현하는 클래스는 iterate 될 수 있는 sequence를 의미한다.iterate의 사전적 의미 : (계산·컴퓨터 처리 절차를) 반복하다 public interface Iterable { public operator fun iterator(): Iterator} operator iterator 함수 앞에 operator 키워드가 붙어 있다. operator는 1 + 3 과 같이 함수(add)를 symbol(+)로 호출할 수 있도록 해주는..

2024.05.21 게시됨

포스팅 썸네일 이미지

학습

Room에 초기 값을 넣으려면 어떻게 해야할까?

사용자가 앱을 처음 설치하거나 저장소, 캐시를 삭제한 후 다시 실행했을 때 Room에 초기 값을 넣으려면 어떻게 해야 할까요? 공식 문서에서 안내하는 여러 방법과 문제점을 알아보겠습니다. RoomDatabase.Callback() Room DatabaseBuilder를 이용해 Database를 생성할 때, builder의 addCallBack 함수의 인자로 RoomDatabase.Callback 클래스를 전달할 수 있습니다. Callback 클래스는 총 3가지 함수로 되어 있습니다. onCreate : database가 최초로 생성되는 시점에 호출됩니다. 단, 모든 table이 생성된 이후에 호출된다는 점에 주의해야 합니다.onOpen : database가 open 될 때마다 호출됩니다.onDestruc..

2024.05.18 게시됨

포스팅 썸네일 이미지

학습

EditText에서 하드웨어 키보드 대응하기 with 가상 키보드, 커서

하드웨어 엔터 또는 가상 키보드의 완료 버튼에 해당하는 값EditorInfo는 키 입력을 완료했을 때의 동작에 해당하는 값입니다. EditText의 imeOptions attribute에서 설정할 수 있습니다.아무 것도 설정하지 않으면 기본 값인 actionDone(S23/Android14) 또는 actionNext(S9/Android10)로 설정됩니다. 완료 : EditorInfo.IME_ACTION_DONE, EditorInfo.IME_ACTION_SEARCH,  EditorInfo.IME_ACTION_SEND, EditorInfo.IME_ACTION_NEXT    actionDone은 다음과 같습니다. actionSearch는 다음과 같습니다.  actionSend는 다음과 같습니다.   엔터..

2024.05.02 게시됨