- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我只有一个Activity
,在Fragment
中有多个ViewPager
。
目前,这是将屏幕查看事件发送到Google Analytics(分析)和Firebase的方法
public static void trackView(Activity activity, String view) {
trackFBView(activity, view);
trackGAView(view);
}
private static void trackFBView(Activity activity, String view) {
if (activity == null) {
return;
}
FirebaseAnalytics firebaseAnalytics = getFirebaseAnalytics();
if (firebaseAnalytics == null) {
return;
}
firebaseAnalytics.setCurrentScreen(activity, view, null);
}
private static void trackGAView(String view) {
Tracker tracker = Utils.getTracker();
if (tracker == null) {
return;
}
tracker.setScreenName(view);
tracker.send(new HitBuilders.ScreenViewBuilder().build());
}
public static FirebaseAnalytics getFirebaseAnalytics() {
if (false == isGooglePlayServicesAvailable()) {
return null;
}
return FirebaseAnalytics.getInstance(JStockApplication.instance());
}
ViewPager
的侦听器中,这就是我发送屏幕查看事件的方式。
private ViewPager.OnPageChangeListener getOnPageChangeListener() {
return new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if (position == 0) {
Utils.trackView(DetailedStockFragmentActivity.this, "InfoFragment");
firebaseAnalytics.setCurrentScreen
实际上并未将屏幕查看事件发送到Firebase。
firebaseAnalytics.setCurrentScreen
仅准备一个隐式参数。只会在下一个事件期间发送到Firebase。
private static void trackFBView(Activity activity, String view) {
if (activity == null) {
return;
}
FirebaseAnalytics firebaseAnalytics = getFirebaseAnalytics();
if (firebaseAnalytics == null) {
return;
}
firebaseAnalytics.setCurrentScreen(activity, view, null);
// Question: Should I do this to help Firebase makes better prediction?
firebaseAnalytics.logEvent(view + "_ScreenView", null);
}
最佳答案
我认为这里有一些误解。
首先,您已经注意到,setCurrentScreen
创建一个参数,该参数会自动附加到将来的事件。事件是发送到Firebase的唯一东西,并且附加了参数-参数只能与事件相关。 “屏幕参数”比正常参数要特殊一些,因为它们出现在崩溃报告日志中,您可以更轻松地使用它们来创建受众。这个answer总结了我刚才所说的话。
第二个误解是关于Firebase Predictions如何工作的。截至今天的预测只能对事件起作用。也就是说,如果您创建自定义预测,则它将不使用任何参数,而只能预测用户是否将执行操作(事件)。
对于您的情况,我需要更多地了解您要做什么。如果您正在寻找用户参与度,那么已经有了“用户流失”预测。 (而且,不,记录分析事件不会影响预测,因为它基于全局“用户正在使用此应用程序”的想法。)另一方面,现在,如果您想知道是否用户正在使用应用程序的一部分,那么您将创建一个自定义事件(例如select_stock
),并使用“预测”来猜测用户是否要查看股票。我喜欢将“预测”或“A / B测试”用于衡量参与度或所执行的特定动作的增加。
根据一般经验,应该使用用户操作而不是被动的观看者来吸引应用程序。例如,当用户选择股票,收藏,共享,搜索时,您可以采取行动。然后,在“预测”或A / B测试中,您可以查看所做的更改如何影响用户整体参与度中的特定部分-“用户是在做X的多还是少?”
TL; DR :不,因为日志记录事件很笼统,所以它不会影响用户流失预测,“预计此应用是否会在 future 7天使用?”但是,您可能试图弄清楚用户是要执行更多还是更少的某项操作,然后记录一个要在预测或A / B测试中使用的事件。
有关predefined predictions的信息,using the predictions feature的概述以及与full length example of how predictions can be used的交谈。
编辑,回答评论:
首先,我不是Firebase工程师,并且我怀疑Google员工是否会与您分享他们的商业机密,因此我在此猜测。我将使用一个结帐示例,因为这是我能想到的最简单的示例。
好的,要尝试理解“预测”,我们首先需要了解一些机器学习。如果您考虑一下,ML模型有点愚蠢:它们只是试图将一组输入映射到一些输出数字(概率)。由于Predictions不接受事件参数,因此我猜想Google会根据给定用户会话期间发生的一系列分析事件提供反馈。 AFAIK,将输入提供给ML模型的顺序无关紧要,因此不会考虑事件发生的顺序(Google可能已经想出了解决办法,不知道)。
有了关于ML模型的假设,我们可以回到结帐示例。基本上,我认为您仅通过跟踪用户访问的屏幕,实际上会对您进行错误的培训或至少记录无意义的事件。假设用户浏览了“购物车”,“输入您的地址”和“结帐”屏幕。在那种情况下,该模型将进行自我训练,以确保这些事件集与购买高度相关。
您可能会想,“好极了!”没那么快,这种预测是没有用的,因为它实际上并没有预测任何东西。只是说,“哦,到结帐屏幕的用户通常会购买东西。”在这种情况下,我认为登录屏幕事件实际上会使您的预测更糟:假设用户访问了结帐屏幕,但随后又离开了,因为他们害怕给您信用卡或其他东西。模型会想,“他们参观了那个屏幕,所以他们完全会买东西。”但这是错误的。
另一方面,对我来说有意义的是,如前所述,记录用户操作将更为有用。例如,可以使用item_added_to_card
事件的数量来训练实际上可以预测事物的更准确的预测。用户添加到购物车中的物品越多,他们对购买商品的 promise 就越多。
再说一次,我对您的应用程序了解不多,但记录点击事件以查看详细的文章窗格,喜欢该文章或共享它,在我看来,它们可以提供比仅查看文章窗格更多的见解。但是,我认为这取决于您具有哪种用户行为。如果您购买商品的大多数用户还在文章屏幕上花费了很多时间,那么是的,我看不到记录事件有什么害处。
我试图传达的一般观点是,我认为预测将更好地用于衡量用户参与度的事件。因此,被动观看功能可以起作用,但是如果某些用户只想保持该屏幕打开,或者文章视图甚至是您的默认标签,该怎么办?然后,由于几乎所有用户都将通过该屏幕,因此它并没有真正为模型提供任何新信息。我的经验法则是:“如果用户单击它,请对其进行记录。”然后,您一定会获得大量的ML模型分析事件来查找模式,例如单击查看文章的用户更有可能购买商品。
PS:对这种模型进行逆向工程非常困难,我的假设可能完全错了。
关于java - 如何发送屏幕查看事件,以帮助Firebase预测做出更准确的预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47993845/
我正在使用 voip 推送通知制作 ios 应用程序。 我想从 Node js 发送 voip 推送通知,但不是很好。 我阅读了本教程 CallKit iOS Swift Tutorial for V
我编写了一个服务器,当浏览器尝试连接到某些站点时,它会检查黑名单并发回 404,但是当我调用 send() 时没有错误,但消息不会出现在网络上浏览器,除非我关闭连接? 有什么建议吗? 接受来自浏览器的
#include int main() { char c = getchar(); //EOF (ctrl + d ) while( ( c = getchar() ) != '?'
我正在尝试使用MailMessage对象通过PowerShell发送电子邮件。该脚本使用Import-CSV来使用文件,然后在电子邮件正文中使用ConvertTo-HTML。由于我要发送的电子邮件客户
我需要创建一个脚本,每 30 秒对网络流量进行一次采样并存储发送/接收的字节。该数据随后用于绘制图形。我编写了一个在 Windows 2012 上完美运行的程序,但我意识到某些 cmdlet 在以前的
我正在运行“autoit3.chm”文件。当它运行时,我想发送一个向下键箭头,但它不起作用: $file = FileGetShortName("C:\Users\PHSD100-SIC\Deskto
当我使用网络浏览器测试我的程序时,我可以很好地写入套接字/FD,所以我决定循环它并在连接中途切断连接,我发现了一个问题。 send() 能够在套接字不可用时关闭整个程序。我认为问题在于该程序陷入了第
我正在运行“autoit3.chm”文件。当它运行时,我想发送一个向下键箭头,但它不起作用: $file = FileGetShortName("C:\Users\PHSD100-SIC\Deskto
所以我试图向自己发送数据并接收数据然后打印它,现在我已经测试了一段时间,我注意到它没有发送任何东西,事实上,也许它是,但我没有正确接收它,我需要这方面的帮助。 这就是我用来发送数据的
问题:开发人员创建自己的序列化格式有多常见?具体来说,我使用 java 本质上将对象作为一个巨大的字符串发送,并用标记来分隔变量。 我的逻辑:我选择这个是因为它几乎消除了语言依赖性(忽略java的修改
我必须在 Linux 上编写一个应用程序,该应用程序需要与具有自定义以太网类型的设备进行通信。甚至在如何编写这样的应用程序中也有很多解决方案。一个缺点是需要 root 访问权限(AFAIK)。之后释放
我有一个包含三个单选按钮选项的表单。我需要将表单数据提交到另一个文件,但由于某种原因,发送的数据包含所选单选按钮的值“on”,而不是 value 属性的值。 我尝试通过 post() 函数手动操作和发
基本上我想实现这样的目标: Process 1 Thread 1 Receive X from process 2 Thread 2 Receive Y from proces
我目前正在 Google App Engine 上开发一个系统,对它还很陌生,我正在使用 Java 平台进行开发。我在 servlet 之间发送 session 对象时遇到问题。我已经在 appeng
当我尝试将“this”(触发的元素)作为参数发送给函数时,函数收到“Object[Document build.php]”作为参数,而不是触发的元素。请让我知道我的错误: function set(a
我正在寻找让我的应用响应联系人 > 发送的魔法咒语。我希望能够接收联系人的 URI 以便检索联系人。谁有 list 过滤器/代码 fragment 吗? 最佳答案 我没有睾丸,但您可以尝试基于 ACT
关于我心爱的套接字的另一个问题。我先解释一下我的情况。之后我会告诉你是什么困扰着我。 我有一个客户端和一个服务器。这两个应用程序都是用 C++ 编写的,实现了 winsock2。连接通过 TCP 和
我看到了这篇文章 http://www.eskimo.com/~scs/cclass/int/sx5.html 但这部分让我感到困惑:如果我们已经使用 send_array 或 send_array_
我对这行代码有疑问。我必须将一个数据包带到一个端口并重新发送到接口(interface)(例如:eth0)。我的程序成功地从端口获取数据包,但是当我重新发送(使用 send())到接口(interfa
我正在尝试编写一个 X11 输入驱动程序,它可以使用我的 Android 手机上的触摸屏来移动和单击鼠标。我可以正常移动鼠标,但我无法让应用程序正确识别点击。我当前的代码位于 https://gist
我是一名优秀的程序员,十分优秀!