최근 MVVM 관련 학습을 하던 중 LiveData와 Databinding을 함께 사용하는 경우가 많았다. LiveData가 사용하는 것이 오늘 정리해 볼 관찰자 패턴이다. Observer Pattern? 관찰자 패턴? 단어 그대로, 무엇인가를 살펴보는 것을 의미한다. 관찰자 패턴은 객체의 상태 변화를 관찰하는 관찰자(옵저버)의 목록을 객체에 등록해서 상태변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 알리도록 하는 디자인 패턴이다. 이 패턴의 핵심은 옵저버 또는 리스너라 불리는 하나 이상의 객체를 관찰 대상이 되는 객체에 등록시킨다. 그리고 각각의 옵저버들은 관찰 대상인 객체가 발생시키는 이벤트를 받아 처리한다. 이벤트가 발생하면 각 옵저버는 콜백을 받는다. 데이터가 변화하는 것..
서론 Android 앱을 실제 스토어에 배포한 뒤 유지보수, 즉 해당 서비스가 원활하게 돌아가게끔 하기 위해서 오류에 대한 처리는 필수적입니다. 그런데 막상 앱을 스토어에 배포할 때 보안을 위해 Proguard 등과 같은 툴을 사용하여 난독화를 하는 경우에 구글 콘솔을 통해 에러가 발생한 위치를 찾기는 힘듭니다. 이때, Firebase Crashlytics를 사용하면 해당 앱의 에러를 효과적으로 관리할 수 있습니다. Firebase Crashlytics Firebase Crashlytics는 실시간 비정상 종료 보고 도구로 앱 품질을 저하하는 안정성 문제를 추적하고 우선순위를 지정하고 문제를 해결하는데 도움이 됩니다. Crashlytics는 비정상 종료를 지능적으로 그룹화하고 이러한 비정상 종료를 유발하..
저는 Android 개발을 공부하기 때문에 Google Analytics를 Firebase를 활용하여 앱에 적용시켜보려 합니다. 애널리틱스는 Firebase 전체 기능에 통합되어 Firebase SDK를 사용하여 적용시킬 수 있습니다. 최대 500개의 고유한 이벤트에 대한 무제한 보고를 제공하고, 애널리틱스 보고서는 사용자의 행동을 이해하여 정보에 기반한 앱 마케팅 및 실적 극대화 결정을 내릴 수 있도록 합니다. 주요 기능 기능 설명 무제한 보고 애널리틱스는 최대 500개의 고유 이벤트에 관한 무제한 보고를 제공합니다. 잠재고객 분류 Firebase Console에서 기기 데이터, 맞춤 이벤트 또는 사용자 속성을 기준으로 커스텀 잠재고객을 정의할 수 있습니다. 이러한 잠재고객은 새로운 기능이나 알림 메시..
Voice Input Voice Input이란 말 그대로 마이크를 통해 입력받을 수 있는 기능이다. 시스템의 내장 음성 인식기 활동을 호출하여 사용자로부터 음성 입력을 얻고, 해당 내용으로 메시지를 보내거나 검색을 실행한다. 앱에서 ACTION_RECOGNIZE_SPEECH 작업을 사용하여 startActivityForResult()를 호출한다. 그러면 음성 인식 활동이 시작되므로 onActivityResult()에서 결과를 처리할 수 있다. 샘플 코드 build.gradle(app) - viewBinding 설정 및 google matreial 추가 buildFeatures { viewBinding true } implementation 'com.google.android.material:materia..
안드로이드 개발을 하다 보면 웹 개발과 달리 px보다 dp를 사용하여 화면을 구성하는 경우가 많을 것이다. px은 화면을 구성하는 최소단위로, 화면의 전체적인 크기와 관계없이 지정한 수치만큼 표시되는 절대적 표시 단위이다. 하지만, 안드로이드 개발 시 사용자들이 사용하는 모든 디바이스에서 최대한 같은 형태로 유지되게 하기 위해 px의 사용은 가급적 피하는 게 좋다. 위의 설명한 내용처럼, dp는 다양한 디바이스 크기에 대응하기 위한 픽셀 독립 단위이다. 화면의 크기가 달라도 동일한 비율로 보여주기 위해 안드로이드에서 정의한 단위이며 큰 화면, 작은 화면에 상관없이 같은 크기로 나타난다. 개발을 하다 보면 dp를 px로 바꾼다거나, px을 dp / dp를 px로 바꿔야 하는 경우가 생긴다. 아래에 변환 코..
LiveData LiveData는 관찰 가능한 데이터 홀더 클래스이다. 일반 클래스와 달리 수명주기를 인식한다. Observer 클래스로 표현되는 관찰자의 수명 주기가 STARTED, RESUMED 상태이면 LiveData는 관찰자를 활성 상태로 간주하고, 활성 상태인 관찰자에게만 업데이트 정보를 알린다. LifeCyclerOwner 인터페이스를 구현하는 객체와 페어링 된 관찰자를 등록할 수 있다. 이 관계를 사용하면 관찰자에 대응되는 LifeCycle 객체의 상태가 Destroyed로 변경될 때 관찰자를 삭제할 수 있다. 이는 특히, 액티비티 및 프래그먼트에 유용한데, LiveData를 안전하게 관찰할 수 있고 수명 주기가 끝나는 즉시 수신 거부되어 메모리 누수에 대한 이슈가 없기 때문이다. LiveD..
Behavior changes : Apps targeting Android 13 or higher Android 13 이상을 타겟팅한다면 변경된 동작을 올바르게 지원하도록 앱을 수정해야 한다. developer 사이트를 참고하여 변경된 내용을 정리해 보았다. 아래에 정리된 내용 외에 다른 내용도 있지만, 현재 프로젝트에서 필요한 부분들만 정리했다. 추가적인 부분은 developer 사이트를 참고하자. 1. 알림 권한 이전에는 앱을 설치하면 기본적으로 알림을 띄우는 게 가능했지만, API 33 이상에서는 Notification 런타임 권한이 추가되었고, 위 권한으로 앱의 알림 발송을 사용자가 제어할 수 있도록 변경되었다. Permission에 POST_NOTIFICATIONS을 통해 사용자에게 permis..
데이터 바인딩이 가장 중요하다고 느껴서 따로 작성해보았다. 데이터 바인딩 외에 뷰에 대한 접근은 아래의 링크 참고~ https://ystech.tistory.com/entry/Android-View-%EC%A0%91%EA%B7%BC [Android] View 접근 서론 보통 지금까지 개발을 하면서, Android 클래스에서 뷰에 접근하려고 할 때 findViewById 방식을 사용해 왔다. 위의 방식을 사용하면서 접근해야 할 View가 많아지면 코드의 양도 많아지고 불편했 ystech.tistory.com 데이터 바인딩이란? 데이터와 뷰를 연결하는 작업을 레이아웃에서 처리하는 기술 UI Controller, ViewModel, LiveData 등과 자주 쓰이고 효과적 레이아웃은 흔히 UI 프레임워크 메서..
URI Scheme 방식은 Android와 Ios에서 모두 사용 가능한 딥 링크 수단이다. 딥링크란? 딥 링크는 홈페이지가 아닌 홈페이지 내에 특정 화면에 한 번에 도달할 수 있는 링크이다. 예를 들면, 네이버 웹툰의 BaseUrL : https://comic.naver.com/webtoon/weekday 네이버 월요 웹툰 URL : https://comic.naver.com/webtoon/weekdayList?week=mon 네이버 웹툰 매일매일 새로운 재미, 네이버 웹툰. comic.naver.com 네이버 웹툰 매일매일 새로운 재미, 네이버 웹툰. comic.naver.com 위의 BaseUrL이 네이버 웹툰의 일반 링크라면, 아래의 월요웹툰에 해당하는 URl이 딥링크라고 볼 수 있다. 오늘 정리해..
1. WebView란? WebView는 웹 애플리케이션 또는 웹페이지만 클라이언트 애플리케이션의 일부로 제공하려는 경우에 사용하고, Android View 클래스의 확장으로 웹페이지를 활동 레이아웃의 일부로 표시할 수 있게 해 준다. WebView의 모든 작업은 기본적으로 웹페이지를 표시하는 것이다. 쉽게 설명하자면, 앱 안에 웹 브라우저를 넣는 개념으로 생각하면 된다. WebView는 우리가 흔히 말하는 하이브리드앱(웹앱)을 구현할 때 많이 사용한다. 2. WebView의 사용법 xml java WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.loadUrl("불러오려는 웹페이지의 URL"); manifest ... 위 코드는 앱이..