source

Firebase 분석을 사용하여 Android 조각을 추적하는 방법

lovecheck 2023. 6. 6. 08:28
반응형

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개의 수신기 기능 파라미터 중에서,

  • controllerclassname 를 얻는 데 합니다.
  • 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

반응형