Firebase가 지원하는 기능인 crashlytics와 analytics가 무엇인지 알아보자.
앱을 배포하고 나서는 코드를 관리할 일이 없을까?
전혀 그렇지 않다.
오히려 다양한 사용자가 앱에 접근하면서 고칠 버그도 많이 드러나고, 사용자 경험을 기반으로 이런저런 기능을 꾸준히 업데이트해야 사람들이 많이 쓰는 좋은 앱을 만들 수 있을 것이다.
오늘은 앱을 배포한 이후에 버그나 사용자들의 행동을 관찰할 때 어떤 도구를 쓸 수 있는지 알아보자.
crash + analytics
Firebase 에서 제공하는 실시간 오류 분석 도구이다.
앱에서 발생하는 오류를 추적한 다음 그 내역을 콘솔에 기록하여 개발자가 확인할 수 있도록 돕는다. 이미 완성된 앱을 배포한 다음 발생하는 오류를 감시할 수 있어 좋다.
firebase configure 입력 후 나오는 안내문에 따라 수행한다.
firebase 프로젝트 명 선택 -> 원하는 플랫폼 선택 -> 패키지명 입력
터미널에 flutter pub add firebase_core 를 입력한다.
메인 함수에서 firebase 환경을 initialize 해야 한다.

runZonedGuarded는 뭐죠?
runApp을 runZonedGuarded로 감싸면 앱의 모든 오류를 일괄로 확인하여 처리할 수 있다. 7번 단계에서 등장한다.
지금은WidgetsFlutterBinding만 사용하면 충분하다.
터미널에 flutter pub add firebase_crashlytics 를 입력해서 패키지를 추가한다.
앱에 crashlytics가 추가되었으므로 configure를 다시 실행해서 앱에 crashlytics gradle을 추가한다. 맨 처음에 configure 했던 것과 같은 방법으로 실행하면 된다.

이 부분이 원래 주석 처리되어있을 것이다. 주석을 해제한 뒤 버전을 명시해주자.
이제 발생한 에러를 어떻게 받아와서 어떻게 표기할지 정의하는 함수를 작성해야 한다. 메인 함수로 가서 runApp과 아까 초기화한 부분 전체를 runZonedGuarded 로 감싼다.
// runZonedGuarded의 형태
runZonedGuarded(body, onError);
body에 실행할 함수(runApp, firebase 초기화 등...)를 담고 onError에 Crashlytics 기능을 넣는다.
이때 onError에 파라미터로 error (발생한 에러가 무엇인지)와 stack (어디에서 발생한 에러인지)을 전달해야 한다.
예를 들어서 Crashlytics.instance.recodeError 는 현재 인스턴스에서 발생한 에러를 기록한다. 이 함수를 쓰려면

이런 식으로 runZonedGuarded > onError 위치에
⓵파라미터 : error와 stack
⓶함수 본문 : 실행할 기능
을 전달한다.

에러가 일어나는지 확인하기 위해 디버깅을 강제로 종료하고 firebase > 실행 > crashlytics 로 가자.

이렇게 에러 통계를 보여준다.
Firebase 에서 제공하는 유저 경향 분석 도구이다.
사용자들이 어떤 기능을 사용했는지, 화면을 어떻게 움직이고 어떤 이벤트를 발생시켰는지 정보를 제공한다.
이 데이터를 잘 활용하면 사람들이 잘 찾지 않는 기능을 빼거나 앱 로직 상 새로 추가할만한 기능으로 무엇이 있을지 연구하기 좋을 것이다.
firebase 기초 설정은 위에서 했으므로 패키지를 설치하는 단계부터 진행해보자.
터미널에 flutter pub add firebase_analytics 를 입력해서 패키지를 추가한다.
간단한 로직이다. 어떤 동작이 발생했을 때 로그를 남기고 싶다면 해당 동작을 구현한 코드로 가서 FirebaseAnalytics 멤버함수를 호출하면 된다.

HomePage에서 TextField 위젯을 만들고 실행 코드 부분에 FirebaseAnalytics.instance.logEvent 를 넣었다.
이렇게 작성하면 TextField에서 뭔가 이벤트가 발생할 때마다 logEvent 함수가 호출되고, 파라미터인 value(TextField의 입력값)를 넣어서 자동으로 로그를 작성한다.