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.
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:
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