草庐IT

ios - Firebase Analytics 持续跟踪 UINavigationController

coder 2023-09-06 原文

我正在从 Google Analytics 过渡到 Firebase Analytics。与 Google Analytics 不同,Firebase 会自动跟踪屏幕浏览量,这太棒了!但是,它不是跟踪屏幕,而是不断尝试跟踪 UINavigationController。每次导航到不同的 View Controller 时,我都会收到两次以下错误日志。

[Firebase/Analytics][I-ACS031006] View controller already tracked. Class, ID: UINavigationController, -1770652405567491888

当你有一个导航 Controller 时,是否需要一些配置?如何让自动屏幕跟踪在这种情况下起作用?

更新:我还没有找到解决这个问题的方法,但我至少找到了问题的原因。如果您的初始 View Controller 是选项卡栏 Controller ,那么 Firebase 似乎无法理解您的 View Controller 层次结构。我的主 Storyboard中的初始 View Controller 是一个选项卡栏 Controller 。如果我去掉这个,我会从我的应用程序中获得良好的屏幕跟踪报告。

更新: 看起来我已经找到了一个好的解决方案,但我仍然想知道是否有人有更好的主意。由于 Firebase 将我的选项卡栏 Controller 下的所有 View Controller 视为同一个 UINavigationController,因此我可以在 viewDidAppear 中为所有 View Controller 手动调用 setScreenName。

Analytics.setScreenName(screenName, screenClass: screenClass)

这没问题,因为它并不比 Google Analytics 差,但它并不理想,因为系统仍会尝试为每个 View Controller 跟踪 UINavigationController 两次,而且我也没有获得自动屏幕跟踪的好处。我研究了尝试从 Firebase 中删除 Tab Bar Controller,因为有些人似乎已经这样做了,但看起来这些方法已从当前 (v4.0.0) 版本的 Firebase SDK 中删除。

最佳答案

Google Analytics for Firebase 会自动跟踪屏幕。您可以在主仪表板的用户参与卡中看到它。这已在 Firebase Version 3.8.0 中介绍适用于 iOS。更多内容 track screen医生。引用文档:

这些屏幕上发生的事件会自动使用参数 firebase_screen_class(例如,menuViewController 或 MenuActivity)和生成的 firebase_screen_id 进行标记。如果您的应用为每个屏幕使用不同的 UIViewController 或 Activity,Analytics 可以自动跟踪每个屏幕转换并生成按屏幕分割的用户参与度报告。

但是,您也可以跟踪屏幕 manually使用 setCurrentScreen() 方法。当您从下拉列表中选择 ScreenName 时,此屏幕的详细信息应该会显示在用户参与卡中,代码中手动跟踪的所有屏幕都应该显示在那里,平均持续时间分割。

请注意,setScreenName 不是一个事件,而是一个事件参数,它与 logEvent() 方法调用中跟踪的事件一起出现。

关于ios - Firebase Analytics 持续跟踪 UINavigationController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45081680/

有关ios - Firebase Analytics 持续跟踪 UINavigationController的更多相关文章

  1. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  2. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  3. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  4. jenkins部署1--jenkins+gitee持续集成 - 2

    前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon

  5. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

  6. ruby - Sinatra session 未按预期持续 - 2

    我正在尝试使用Sinatra中的重定向和session在网站周围传递一些数据。这是一个简化的示例,使用PrettyPrint进行调试:require'pp'require'rubygems'require'sinatra'enable:sessionsget'/'dosession[:foo]='12345'puts'session1'ppsessionredirectto('/redir')endget'/redir'doputs'session2'ppsession'helloworld'end查看Thin的输出,我看到:>>Listeningon0.0.0.0:4567,CTRL

  7. ruby - 如何从 URL 中删除 Google 跟踪参数 (UTM)? - 2

    我有一堆要清理的URL。它们都包含UTM参数,在这种情况下不是必需的,或者是有害的。示例:http://houseofbuttons.tumblr.com/post/22326009438?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+HouseOfButtons+%28House+of+Buttons%29所有可能的参数都以utm_开头。如何使用ruby​​脚本/结构轻松删除它们而不破坏其他潜在的“好”URL参数? 最佳答案 您可以将正则表达式应用于url以清

  8. ruby - 为 IO::popen 拯救 "command not found" - 2

    当我将IO::popen与不存在的命令一起使用时,我在屏幕上打印了一条错误消息:irb>IO.popen"fakefake"#=>#irb>(irb):1:commandnotfound:fakefake有什么方法可以捕获此错误,以便我可以在脚本中进行检查? 最佳答案 是:升级到ruby​​1.9。如果您在1.9中运行它,则会引发Errno::ENOENT,您将能够拯救它。(编辑)这是在1.8中的一种hackish方式:error=IO.pipe$stderr.reopenerror[1]pipe=IO.popen'qwe'#

  9. ruby-on-rails - Rails Asset Pipeline 更好的错误或堆栈跟踪 - 2

    刚刚将应用程序从rails3.0.9升级到3.2.1,当我运行bundleexecrakeassets:precompile时出现错误,这很好,但是回溯没有告诉我在哪里语法问题来self的css或scss文件。我尝试对“0ee5c0e69c92af0”进行greping,但该字符串没有出现在我的项目中。bundleexecrakeassets:precompile:allRAILS_ENV=productionRAILS_GROUPS=assets--trace**Invokeassets:precompile:all(first_time)**Executeassets:precom

  10. ruby - IO::EAGAINWaitReadable:资源暂时不可用 - 读取会阻塞 - 2

    当我尝试使用“套接字”库中的方法“read_nonblock”时出现以下错误IO::EAGAINWaitReadable:Resourcetemporarilyunavailable-readwouldblock但是当我通过终端上的IRB尝试时它工作正常如何让它读取缓冲区? 最佳答案 IgetthefollowingerrorwhenItrytousethemethod"read_nonblock"fromthe"socket"library当缓冲区中的数据未准备好时,这是预期的行为。由于异常IO::EAGAINWaitReadab

随机推荐