How to track android fragments using firebase analytics –

Ontwikkelingsvraagstuk/probleem:

In mijn Android-applicatie heb ik een activiteit die 3 of 4 slices heeft die na elkaar kunnen worden toegevoegd volgens bepaalde gebruikers- of servergebeurtenissen.

Ik wil al deze fragmenten volgen als een raster op het vuurvaste voetstuk.

Dus, idealiter, als het mogelijk is, is er een API die ik kan callCreate fragmenten en vertel Firebase dat de gebruiker op dit moment in fragment1, fragment2 of fragment3 is?

Hoe kan ik dit probleem oplossen?

Oplossing 1:

VASTGESTELD

Aangezien setCurrentScreen verouderd is, kunt u de logEvent methode gebruiken.

Bundelbundel = nieuwe bundel();bundel.putString(FirebaseAnalytics.Param.SCREEN_NAME, fragment.getClass().getSimpleName());bundel(FirebaseAnalytics.Param.SCREEN_NAME, fragment.getClass().getSimpleName());bundle.putString(FirebaseAnalytics.Param.SCREEN_CLASS, fragment.getClass().getSimpleName());mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, bundle;)

Ik heb de volgende adb-opdrachten gebruikt om te controleren of alles goed werkte.

adb shell setprop log.tag.FA VERBOSE
adb shell setprop log.tag.FA-SVC VERBOSE
adb logcat -v tijd -s FA-SVC

Vervolgens ziet u de gebeurtenissen van screen_view in de logcat. Zoals deze:

10-15 13:14:13.744 V/FA-SVC (20323) : Evenementlogboek :
origin=app,name=screen_view(_vs),params=Bundle[{ga_event_origin(_o)=app,
engagement_time_msec(_et)=31600,
ga_previous_class(_pc)=ContentsFragment,
ga_previous_id(_pi)=8077407744361472421,
ga_previous_screen(_pn)=ContentsFragment,
ga_screen_class(_sc)=TestFragment,
ga_screen_id(_si)=8077407744361472423, ga_screen(_sn)=TestFragment}].

Vorig antwoord

Er is een speciale methode voor het instellen van het huidige scherm – setCurrentScreen

Ik heb het als volgt gebruikt

mFirebaseAnalytics.setCurrentScreen(this, fragmgment.getClass().getSimpleName(), fragmgment.getClass().getSimpleName() ;

Na het oproepen van de methode geeft LogCat het volgende bericht weer

Evenementregistratie (FE) : screen_view(_vs),
bundel[{event_event_origin(_o)=auto,
firebase_previous_class(_pc)=HomeFragment,
firebase_previous_id(_pi)=4121566113087629222,
firebase_previous_screen(_pn)=HomeFragment,
firebase_screen_class(_sc)=StatisticsFragment,
firebase_screen_id(_si)=4121566113087629223,
firebase_screen(_sn)=StatisticsFragment}].

De volgende gebeurtenis wordt weergegeven wanneer de activiteit automatisch wordt gevolgd:

Evenementregistratie (FE) : screen_view(_vs),
bundel[{event_origin_focus(_o)=auto,
firebase_previous_class(_pc)=StatisticsFragment,
firebase_previous_id(_pi)=4121566113087629223,
firebase_previous_screen(_pn)=StatisticsFragment,
firebase_screen_class(_sc)=LoginActivity,
firebase_screen_id(_si)=4121566113087629224}].

Zoals u kunt zien, zijn ze bijna identiek, dus setCurrentScreen werkt.

Ik zal deze klassen pas de volgende dag in de Firebase console kunnen zien. Dit is normaal voor Firebase – het kost tijd om dergelijke hoeveelheden gegevens te verwerken.

See also  How To Delete a Discord Server [Full Guide]

Oplossing 2:

Ik wil graag wat meer details toevoegen aan het antwoord van Artem Mostyaev. Het GA/Firebase paneel geeft de klassennaam weer in de DEV-versie, maar niet in de PROD-versie. De belangrijkste boosdoener hier

fragment.getClass().getSimpleName()

het verdoezelen van de naam van het fragment in de opname. Zo toonde GA/Firebase de klassen (a, b, a, etc.).

getSimpleName() is ook gevaarlijk om te gebruiken in andere situaties.

Verdere lezing : @elye.project/thet gevaar van-gebruik-klasse-krijgtimpel-als-tag-voor-fragment-5cdf3a35bfe2

Pro-Gaurd Regels

-Houd de klassennaam com.somepackage.your class bij.

Oplossing 3:

Aangezien setCurrentScreen verouderd is, kunt u in plaats daarvan firebaseAnalytics.logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, pakket) gebruiken.

Hier is een blogpost die meer in detail de handmatige tracering van schermen uitlegt.

Hier is een voorbeeld:

private fun setCurrentScreen(screenName: String) = firebaseAnalytics?.run {
valbundel = Bundel()
bundel.putString(FirebaseAnalytics.Param).SCREEN_NAME, screenName)
bundel.putString(FirebaseAnalytics.Param.SCREEN_CLASS, [beschermd via e-mail])
logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, bundel)
}

Als u de schermen automatisch wilt volgen, kunt u deze functie ook oproepen met behulp van bijvoorbeeld een van de levenscyclusmethoden van het basisfragment. B. op Hervatten. Vergeet niet dat sommige fragmenten het huidige scherm niet kunnen veranderen, zoals B. die in ViewPager zijn gemaakt, dus ik heb een open waarde gedeclareerd die je kunt aanpassen om het standaard gedrag te veranderen.

Hier is de code in het BaseFragment :

Beschermd tegen files met de open walsScreenView : Bulev = Waarheid

de fun op Hervatt() {
super.on Hervatt()

als (trackScreenView) setCurrentScreen (this.javaClass.simpleName)
}

en u kunt het deactiveren door het te vervangen in het doelextract :

val trackScreenView opheffen : Booleaans = vals

Overigens, als u het onderdeel NavigationUI gebruikt, is er op dit moment geen automatische schermtracking en wordt er slechts één activiteit gevolgd die u heeft. U kunt dus voorkomen dat Firebase automatisch schermen gaat markeren door deze metadata op te nemen in uw aanvraagmanifest:

See also  Asus Aura Download [2021] for Windows 10: Light up your Gaming

Oplossing 4:

Voor projecten die gebruik maken van NavigationUI kunt u gebruik maken van de NavController.OnDestinationChangedListener.

Binnenin onCreate()

de pleziertjes opCreate() {
super.onCreate()
.
.
.
.
NavController = Navigation.findNavController(context !!, R.id.nav_host_fragment)
NavController ?.addOnDestinationChangedListener(listener)
}

Van de 3 parameters van de luisterfunctie,

  • De controller is handig om de naam van de klasse te krijgen
  • Het doel is nuttig om de naamstring van de lay-out xml doel gevonden binnen nav_host_fragment te krijgen door het android:label attribuut

private val listener = NavController.OnDestinationChangedListener { controller, bestemming, argumenten ->

valbundle = Bundle()val currentFragmentClassName = (controller.currentDestination als FragmentNavigator.Destination).classNamebundle.putString(FirebaseAnalytics.Param.SCREEN_NAME, bestemming.label.toString())bundle.putString(FirebaseAnalytics.Param.SCREEN_CLASS, currentFragmentClassName)FirebaseAnalytics.getInstance(requireContext())).logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, bundle).

}

Vergeet niet op te ruimen.

override fun onDestroy() {
super.onDestroy()
NavController?.removeOnDestinationChangedListener(listener)
}

Veel succes!

Related Tags:

firebasescreenreportingenabled,google analytics screen view,user_engagement firebase,screen_view event,firebase analytics uuid,firebase analytics set id,firebase fragment tracking,firebase_previous_id,firebaseanalytics java,setcurrentscreen in firebase,firebase current screen,firebase log screen,firebase debug view,react native firebase,google analytics,firebase console,android setcurrentscreen deprecated,react native-firebase screen tracking,setcurrentscreen deprecated react native,flutter firebase analytics screen tracking,firebase analytics screen tracking,firebase analytics android,disable firebase analytics debug android,google analytics screen tracking android,google_analytics_automatic_screen_reporting_enabled,firebase analytic debug,firebase analytics command,react native firebase analytics