- 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/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!