일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 멤버변수
- rxjava hot observable
- 안드로이드 유닛 테스트
- 안드로이드 라이선스 종류
- jvm 작동 원리
- 2022 플러터 설치
- 큐 자바 코드
- 안드로이드 유닛 테스트 예시
- ar vr 차이
- 자바 다형성
- ANR이란
- 스택 자바 코드
- 스택 큐 차이
- 서비스 vs 쓰레드
- 플러터 설치 2022
- 객체
- 안드로이드 레트로핏 사용법
- rxjava cold observable
- 안드로이드 레트로핏 crud
- 2022 플러터 안드로이드 스튜디오
- 서비스 쓰레드 차이
- jvm이란
- android ar 개발
- 안드로이드 os 구조
- android retrofit login
- Rxjava Observable
- rxjava disposable
- 클래스
- 안드로이드 유닛테스트란
- 안드로이드 라이선스
- Today
- Total
나만을 위한 블로그
[Android] 구글 애널리틱스 적용하는 방법 본문
안드로이드 앱 개발을 공부하거나 실서비스를 만들 때 가장 자주 사용하고 중요한 게 뭐냐고 한다면 나는 로그라고 답할 것이다.
로그를 통해 내 의도대로 값이 들어가고 나가는지를 확인할 수 있고, 어디서 에러가 났는지 확인하려면 필수적으로 확인해야 하는 게 로그기 때문이다. 그래서 로그를 가벼이 여기거나 안 쓴다면 안드로이드 앱 개발자(혹은 공부하는 사람)라고 말할 수 없다고 생각한다.
그런데 로그는 위에서 말한 상황 외에도 다른 곳에 쓸 수 있다. 바로 사용자들이 내가 만든 앱에 들어와서 어떤 행동을 하는지와 언제 들어오고 나가는지를 파악하는 것이다.
이 정보를 통해 내 앱의 장단점을 빠르게 파악해 보완할 수 있고, 좀 더 나은 방향으로 발전시킬 수 있다.
그래서 로그를 만드는 방법을 찾다가 발견한 것이 구글 애널리틱스인데, 이번 포스팅에선 이 구글 애널리틱스를 적용하는 방법을 기록하려고 한다.
먼저 파이어베이스를 내 앱에 등록해야 한다. 왜냐면 파이어베이스는 현재 구글이 인수해서 운영하고 있는 플랫폼이기 때문이다.
파이어베이스에 대한 설명은 위키피디아에서 간단하게 찾아볼 수 있다.
파이어베이스는 2011년 파이어베이스 사가 개발하고 2014년 구글에 인수된 모바일 및 웹 애플리케이션 개발 플랫폼이다. 파이어베이스는 2011년 James Tamplin, Andrew Lee가 설립한 이전의 스타트업 기업 인볼브(Envolve)에서 발전했다. 인볼브는 개발자들에게 온라인 채팅 기능을 자신의 웹 사이트에 연동할 수 있는 API를 제공했다.
채팅 서비스를 출시한 이후 Tamplin과 Lee는 채팅 메시지가 아닌 애플리케이션 데이터를 전달하는데 사용되고 있음을 발견했다. 개발자들은 인볼브를 사용하여 게임 상태 같은 애플리케이션 데이터를 사용자 전반에 걸쳐 실시간으로 동기화했다. Tamplin과 Lee는 채팅 시스템과 이를 지원하는 실시간 아키텍처를 분리하기로 결정했다. 그들은 2011년 9월에 별도의 회사로 Firebase를 설립하고, 2012년 4월 공개했다...(중략)...이제 Firebase는 Google Cloud Platform, AdMob, Google Ads를 비롯한 다양한 구글 서비스와 통합되어 개발자에게 더 광범위한 제품과 규모를 제공한다. 안드로이드 기기에 푸시 알림을 보내는 Google Cloud Messaging(GCM)은 iOS 및 웹 기기 모두에 푸시 알림을 전달하는 기능을 추가한 Firebase Cloud Messaging(FCM)으로 대체됐다.
사실 가장 먼저 와닿는 파이어베이스의 기능이라면 실시간 채팅과 푸시 알림이라고 생각한다.
푸시 알림(이하 FCM)이 앱/웹 모두에서 동작하듯 실시간 채팅도 앱/웹 모두에서 구현할 수 있다. 안드로이드에서 푸시 알림을 구현하는 방법이 궁금하다면 아래 포스팅을 참고하자.
주의할 것은 아래 포스팅을 읽으면서 할 경우 구글 애널리틱스를 적용할 것인지를 묻는 스위치가 있다. 기본적으로 on으로 되어 있기 때문에 건드리지 말고 다음 단계로 넘어가자.
onlyfor-me-blog.tistory.com/183
본론으로 돌아와서 이제 본격적으로 애널리틱스를 앱에 적용시켜보자.
먼저 프로젝트를 만들고 앱을 등록해야 한다. 이 방법은 위 링크에서 확인해볼 수 있으니 여기선 생략한다.
앱에 파이어베이스를 등록했다면 이제 파이어베이스 콘솔에 아래와 같이 프로젝트가 하나 생성된 것이 보일 것이다.
이제 이 프로젝트를 클릭한 다음, 안드로이드 스튜디오를 켜서 해당 파이어베이스 프로젝트에 연결된 프로젝트 파일을 연다. 파이어베이스 콘솔은 아직 닫지 않는다.
그 다음 사용자 행동을 파악하고 싶은 화면에 아래 코드를 추가한다.
난 액티비티 중 하단 탭과 프래그먼트를 사용한 액티비티에 추가했다.
import com.google.firebase.analytics.FirebaseAnalytics;
private FirebaseAnalytics analytics; // 추가
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
analytics = FirebaseAnalytics.getInstance(this); // 추가
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener()
{
@Override
public void onTabSelected(TabLayout.Tab tab)
{
final int position = tab.getPosition();
if (position == 0)
{
Bundle bundle = new Bundle(); // logEvent()까지 추가
bundle.putString(FirebaseAnalytics.Param.SCREEN_NAME, "탭 레이아웃으로 유저가 들어왔습니다");
bundle.putString(FirebaseAnalytics.Param.SCREEN_CLASS, "MainActivity");
analytics.logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, bundle);
Toast.makeText(MainTabLayoutActivity.this, String.valueOf(bundle), Toast.LENGTH_SHORT).show();
}
.
.
.
}
}
임포트 구문은 저걸 그대로 복붙하면 되고, 전역 변수로 FirebaseAnalytics 객체를 선언한다.
그 다음 onCreate() 안에서 FirebaseAnalytics 객체를 객체화하고, logEvent()를 호출해 필요한 인자들을 파이어베이스 서버로 넘겨주면 된다.
여기서 짚고 넘어갈 부분이 Bundle bundle = new Bundle()을 포함한 3줄이다.
파이어베이스 서버로 사용자 데이터를 보내기 위해선 Bundle이라는 클래스의 객체에 putString(), putInt() 등으로 로그로 남기길 원하는 데이터들을 넣어줘야 한다.
데이터를 넣는 건 그렇다 치더라도 위의 코드에서 putString()의 1번 인자가 뭔가 싶다.
저것들은 애널리틱스 SDK에서 애널리틱스를 처음 쓰는 개발자를 위해 만들어놓은 추천 이벤트다. 즉 우리가 이렇게 만들어놓은 기본 설정들이 있으니 필요하면 갖다 쓰란 것이다.
위에선 기본으로 제공되는 이벤트 상수들을 사용했지만 커스텀해서 쓰고 싶다면 그렇게 해도 상관없다. 대신 커스텀 매개변수를 사용할 경우 애널리틱스에 따로 등록해주는 절차가 필요하다.
나는 앱 화면 전환 시 로그를 남기고 싶었기 때문에 저렇게 사용했다. 이 내용에 대한 자세한 내용은 아래 링크를 참고하자.
firebase.google.com/docs/analytics/events?hl=ko&platform=android
logEvent()에 대해 궁금하다면 아래 링크를 참고하자.
이렇게 했다면 거의 다 끝났다. 에뮬이든 실기기든 앱을 실행시켜서 해당 액티비티로 이동한 다음 logEvent()를 호출하면 되는데, logEvent()로 발생한 로그는 당연히 로그캣에서도 볼 수 있다.
로그캣에서 로그 범위를 Verbose로 설정한 다음, Logging을 입력하면 아래와 같이 로그들이 생기는 걸 볼 수 있다.
이제 이 문구를 확인했다면 파이어베이스 콘솔로 돌아가서 애널리틱스 탭의 하위 탭 중 맨 밑에 있는 DebugView를 누른다.
그러면 이런 화면이 나온다.
왼쪽 상단의 디버그 기기에는 핸드폰을 컴퓨터에 디버그 모드로 꽂고 있다면 핸드폰의 모델명이 나오고, 에뮬레이터라면 내 기준으로 sdk_gphone_x86_arm이라는 이름이 나왔다.
핸드폰으로 logEvent()를 호출하도록 하단 탭들을 마구 누르면 잠시 후 가운데의 타임라인에 아래와 같은 변화가 생긴다.
이제 가운데 줄에 매달린 파란 원 중 하나를 눌러보면 화면이 이렇게 바뀐다.
각각을 눌러 파이어베이스 서버를 통해 콘솔로 보내진 데이터를 확인할 수 있다.
위 예시대로 실행하면 firebase_screen을 누른 결과 액티비티에서 설정한 로그 문구가 출력되는 걸 확인할 수 있을 것이다.
만약 디버그뷰에 위와 같이 나오지 않는다면 아래 과정 중 하나를 진행한 다음 다시 시도해보자.
추가로 안드로이드 스튜디오의 터미널이나 윈도우의 cmd를 통해서도 이 데이터들을 확인할 수 있다.
먼저 platform-tools라는 폴더에 adb.exe 파일이 들어 있다. 이 platform-tools 폴더가 어떤 경로에 있는지를 알아야 한다. 안드로이드 설치 폴더를 뒤지다 보면 찾을 수 있다.
이제 이 경로를 복사한다. 먼저 안드로이드 스튜디오 터미널에서 확인하는 방법부터 설명하겠다.
- 안드로이드 스튜디오 터미널에서 확인하는 법
로그캣 옆에 있는 Terminal을 누르면 하단에 아래와 같은 창이 생긴다.
하얀색으로 깜박이는 커서가 보인다면 아래 명령어를 입력한다.
cd C:\중간경로\platform-tools
중간경로에는 각자 platform-tools 폴더가 있는 곳까지의 경로를 입력해준다. 그리고 엔터를 치면 왼쪽 부분이 위의 경로로 바뀌는데, 이걸 확인했다면 아래 명령어를 입력한다.
adb shell setprop debug.firebase.analytics.app com.패키지명.패키지명
패키지명이 com.example.example이라면 패키지명에 example을 입력해주면 된다. 패키지명은 매니페스트나 앱 수준 gradle 파일에서 찾을 수 있다.
이 때 more than one device/emulator라는 문구가 나온다면 에뮬과 핸드폰에서 모두 실행되고 있으니 하나를 지우라는 뜻이다. 하나만 남겨놓고 위 방향키(↑)를 누르면 이전에 입력했던 명령어가 나오니 다시 엔터를 누르면 된다.
엔터를 쳤을 때 에러문구 없이 아무것도 나오지 않았다면 이어서 아래 명령어들을 순서대로 입력한다.
adb shell setprop log.tag.FA VERBOSE
adb shell setprop log.tag.FA-SVC VERBOSE
adb logcat -v time -s FA FA-SVC
마지막 3번째 명령어를 입력 후 엔터를 치면 터미널이 괴상한 속도로 올라가면서 문구들이 미친듯이 나온다.
무시하고 다시 logEvent()를 호출하면 터미널에 아래와 같은 로그가 찍힌다.
내 경우엔 ga_screen(_sn) 부분에 로그가 찍혀나왔다. 이후 계속해서 다른 탭들을 클릭하면 그 때마다 문자열들이 빠르게 올라가며 새로운 로그들이 출력된다.
그리고 내가 보는 화면에서 실시간 반영은 되지 않아서 첫 번째 탭을 누른 후 두 번째 탭을 누르면 첫 번째 탭을 눌렀을 때 나오는 로그가 보이고, 다시 첫 번째 탭을 누르면 두 번째 탭을 눌렀을 때 나오는 로그가 보인다.
- cmd에서 확인하는 법
cmd에서도 안드로이드 스튜디오에서 한 것과 같은 절차대로 진행하면 된다.
안스의 터미널보다 cmd에서 확인하는 것이 글자 상하간격이 좁아 좀 더 많이 볼 수 있으니 참고하자.
참고한 포스팅)
samse.tistory.com/entry/Firebase-analytics-%EA%B8%B0%EB%B3%B8
'Android' 카테고리의 다른 글
[Android] editText 클릭 시 키보드가 레이아웃을 밀어올리지 않게 하는 법 (0) | 2021.05.05 |
---|---|
[Android] SQLite 사용 시 attempt to re-open an already-closed object 에러 해결 (0) | 2021.03.28 |
[Android] EditText에 띄어쓰기 포함 글자수를 제한하는 방법 (0) | 2021.02.17 |
[Android] 리사이클러뷰의 리스트에 데이터가 없을 때 '데이터가 없습니다' 텍스트뷰 띄우는 방법 (0) | 2021.02.17 |
[Android] ScrollView 안의 Constraint Layout에서 뷰가 안 보일 때 해결법 (0) | 2021.02.12 |