Firebase 분석을 사용하여 Android 조각을 추적하는 방법
내 안드로이드 애플리케이션에는 일부 사용자 또는 서버 이벤트를 기준으로 순차적으로 첨부할 수 있는 3~4개의 조각이 있는 활동이 있습니다.
저는 이 모든 파편들을 화재 기지의 스크린으로 추적하고 싶습니다.
따라서 가능하다면 fragments의 onCreate에서 API를 호출하여 사용자가 fragment1, fragment2 또는 fragment3에 있다고 파이어베이스에 말할 수 있는 것이 이상적입니까?
갱신하다
그 이후로setCurrentScreen
더 이상 사용하지 않습니다. 사용할 수 있습니다.logEvent
방법
Bundle bundle = new Bundle();
bundle.putString(FirebaseAnalytics.Param.SCREEN_NAME, fragment.getClass().getSimpleName());
bundle.putString(FirebaseAnalytics.Param.SCREEN_CLASS, fragment.getClass().getSimpleName());
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, bundle);
저는 다음과 같은 adb 명령을 사용하여 모든 것이 정상적으로 작동하는지 확인했습니다.
adb shell setprop log.tag.FA VERBOSE
adb shell setprop log.tag.FA-SVC VERBOSE
adb logcat -v time -s FA FA-SVC
일단 그렇게 하면 당신은 알게 될 것입니다.screen_view
로그캣에 이벤트가 있습니다.예를 들어 다음과 같습니다.
10-15 13:14:13.744 V/FA-SVC(20323):로깅 이벤트: origin=app,name=screen_view(_vs),params=Params[{ga_event_origin(_o)=app,engagement_time_msec(_et)=31600,ga_parge_class(_pc)=FragmentFragment,ga_parge_parge_id(_pi)=FragmentFragmentFragmentFragmentFragmentFragmentFragment,ga_1472421,g테스트 조각, ga_screen_id(_si)=8077407744361472423, ga_screen(_sn)=TestFragment}]
기답
현재 화면을 설정하는 특별한 방법이 있습니다.
다음과 같이 사용하였습니다.
mFirebaseAnalytics.setCurrentScreen(this, fragment.getClass().getSimpleName(), fragment.getClass().getSimpleName());
메서드가 호출되면 LogCat에 다음 메시지가 나타납니다.
로깅 이벤트(FE): screen_view(_vs), 번들[{firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=홈파편, firebase_previous_id(_pi)=4121566113087629222, firebase_previous_screen(_pn)=HomeFragment, firebase_screen_class(_sc)=StatisticsFragment, firebase_screen_id(_si)=4121566113087629223, firebase_screen(_sn)=StatisticsFragment}]
자동 작업 추적에 다음 이벤트가 표시됩니다.
로깅 이벤트(FE): screen_view(_vs), 번들[{firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=통계 조각, firebase_pious_id(_pn)=통계 조각, firebase_pious_screen(_pn)=통계 조각, firebase_view_class(_class(_vs), firebase_base_base_base_base_base_c), firebase_
보시다시피, 그들은 거의 같습니다, 그래서.setCurrentScreen
작동 중입니다.
이러한 클래스는 다음 날에만 Firebase Console에서 볼 수 있습니다.Firebase의 경우 이러한 양의 데이터를 처리하는 데 시간이 걸립니다.
Artem Mostyaev의 답변에 몇 가지 더 통찰력을 추가합니다.GA/Firebase 패널이 DEV 버전에서는 클래스 이름을 반영하지만 PROD 버전에서는 반영하지 않습니다.여기서 주범은
fragment.getClass().getSimpleName()
prod에서 fragment 이름을 난독화합니다.그래서 GA/Firebase는 클래스 이름이 (a,b,ah 등)과 같은 것을 보여주었습니다.
getSimpleName()은 다른 상황에서 사용하기에도 위험합니다.
더 많은 문헌: https://medium.com/ @elye.project/사용자 정의 클래스는 태그로서 간단한 이름을 얻습니다. 5cdf3a35bfe2
프로고로드 규칙
-keepnames class com.somepackage.yourclass
는 더 이상 사용되지 않으므로 사용할 수 있습니다.firebaseAnalytics.logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, bundle)
대신.
수동으로 화면을 추적하는 방법에 대해 자세히 설명하는 블로그 게시물이 있습니다.
다음은 예입니다.
private fun setCurrentScreen(screenName: String) = firebaseAnalytics?.run {
val bundle = Bundle()
bundle.putString(FirebaseAnalytics.Param.SCREEN_NAME, screenName)
bundle.putString(FirebaseAnalytics.Param.SCREEN_CLASS, this@BaseFragment.javaClass.simpleName)
logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, bundle)
}
또한 화면을 자동으로 추적하려면 다음 중 하나에서 이 기능을 호출할 수 있습니다.BaseFragment
은 라프사방같은법과와 같은 입니다.onResume
일부 단편은 현재 화면을 변경할 필요가 없을 수도 있습니다. 예를 들어, 현재 화면에서 생성되는 것과 같습니다.ViewPager
그래서 나는 선언했습니다.open val
당신이 할 수 있는 것.override
기본 동작을 변경합니다.
코는다음같다습니에 있는 .BaseFragment
:
protected open val trackScreenView: Boolean = true
override fun onResume() {
super.onResume()
if (trackScreenView) setCurrentScreen(this.javaClass.simpleName)
}
의 타겟인 에서 시킬 수 .Fragment
:
override val trackScreenView: Boolean = false
그런데 Component를 사용하는 경우 현재 화면 추적을 위한 자동 솔루션은 없으며 사용자가 가지고 있는 단일 활동만 추적하므로 이를 입력하여 Firebase 자동 화면 보고를 방지할 수 있습니다.meta-data
매니페스트에 :
<application
android:name=".App"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<!-- .... -->
<meta-data
android:name="google_analytics_automatic_screen_reporting_enabled"
android:value="false" />
</application>
탐색을 사용하는 프로젝트의 경우UI, 수신기를 사용할 수 있습니다.NavController.OnDestinationChangedListener
에 안에.onCreate()
override fun onCreate() {
super.onCreate()
.
.
.
.
navController = Navigation.findNavController(context!!, R.id.nav_host_fragment)
navController?.addOnDestinationChangedListener(listener)
}
3개의 수신기 기능 파라미터 중에서,
controller
classname 를 얻는 데 합니다.destination
nav_host_nav 내부에 데 합니다.android:label
private val listener = NavController.OnDestinationChangedListener { controller, destination, arguments ->
val bundle = Bundle()
val currentFragmentClassName = (controller.currentDestination as FragmentNavigator.Destination).className
bundle.putString(FirebaseAnalytics.Param.SCREEN_NAME, destination.label.toString())
bundle.putString(FirebaseAnalytics.Param.SCREEN_CLASS, currentFragmentClassName)
FirebaseAnalytics.getInstance(requireContext()).logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, bundle)
}
정리하는 것 잊지 마세요.
override fun onDestroy() {
super.onDestroy()
navController?.removeOnDestinationChangedListener(listener)
}
언급URL : https://stackoverflow.com/questions/45201346/how-to-track-android-fragments-using-firebase-analytics
'source' 카테고리의 다른 글
데이터 프레임의 열 이름 변경 (0) | 2023.06.06 |
---|---|
레일: 예외의 전체 스택 추적 기록 (0) | 2023.06.06 |
런타임에 특정 하위 보기에 대해 자동 레이아웃을 사용하지 않도록 설정할 수 있습니까? (0) | 2023.06.06 |
MongoDB는 신뢰할 수 있습니까? (0) | 2023.06.06 |
mysql/mysadb 10.xx 기본 포트를 변경하는 방법은 무엇입니까? (0) | 2023.06.06 |