android统计view数量,安卓view曝光统计实现方案

安卓端有效曝光统计步骤

1 ,要确定什么样的算有效曝光(在屏幕停留时间超过一个值如2秒)

2,监听到每个view移入和移出屏幕的事件

3,把数据绑定到view(view相当于数据的载体)

4,根据监听事件拿到view里的数据

5,根据曝光字典筛选出运营想要的有效数据

1,什么算有效曝光

需要和运营同学一起确认下,一个view在屏幕停留的时长大于多少秒时算有效曝光。目前安卓这边是可以拿到view从进屏幕到移出屏幕的时间差,暂时以view进入屏幕到离开屏幕的时差大于2秒算一次有效曝光。

588bc9060935

image.png

2,监听view的移入和移出事件

安卓这边有具体的监听事件可以监听到view进入和移出屏幕的事件。

588bc9060935

image.png

在监听到view进入屏幕这一事件的同时,我们记录下当前时间戳,然后在view移出屏幕时,再获取下时间戳,用这个时间戳减去进入屏幕的时间戳,就可以求出view在屏幕的停留时间。

这里有一个特殊的情况。当用户进入商城,切换tab或者进入商品详情页时,view并没有从屏幕移出,而是隐藏不可见了。这种特殊情况的统计,就要用到另外一个监听事件了。

监听当前view是否可见

588bc9060935

image.png

同样,安卓有提供监测view是否可见的监听事件。这种情况下我们来监听以下几种情况(要确认下那些用户行为算有效曝光)。

用户行为

怎么监听

进入商城->切换tab

计算当前屏幕里所有view从用户进入商城到切换tab的时间差

进入商城->进入详情页

计算当前屏幕里所有view从用户进入商城到进详情的时间差

进入商城->点home键

计算当前屏幕里所有view从用户进入商城到点home键的时间差

进入商城->熄屏

计算当前屏幕里所有view从用户进入商城到点home键的时间差

3,怎么把数据绑定到view

把数据绑定到view里,需要自定义系统view,给系统view添加存储数据的功能。

这里以组件view和组件里的元素view为例

组件view

588bc9060935

image.png

我们这里以LinearLayout为例,我们自己写个ExLinearLayout继承系统的LinearLayout,然后给我们的ExLinearLayout添加设置数据的方法。

然后在需要统计的组件view的根布局使用我们自定义的ExLinearLayout,如下:

588bc9060935

image.png

元素view

588bc9060935

image.png

这里以AppCompatTextView为例,我们自定义ExTextView继承系统AppCompatTextView,然后给我们的AppCompatTextView添加设置数据的方法。

然后在我们的布局里使用,如在商品组件的标题和描述view里使用如下:

588bc9060935

image.png

上面把自定义view写到布局里以后,就需要在代码里设置数据了。设置数据的方法如下:

588bc9060935

把数据绑定到view-1

图中的holder.itemView就是我们的ExLinearLayout,

knowledge就是我们当前条目所显示的数据。这样就可以把数据绑定到view里了。

再看下recordExposure方法具体做了什么

588bc9060935

把数据绑定到view-2

我们这里做的就是把组件里的数据,封装成我们运营想要的数据。然后把封装好的数据绑定到view里。

588bc9060935

绑定数据到view-3

我们这里在做数据绑定之前,需要通过曝光字典过滤下,当前组件类型是不是我们想要统计的。如果是我们想要统计的类型,才做数据绑定。

到这里我们绑定数据这一步就完成了。这也是最重要的一步。因为只有把数据成功绑定到view里,后面才能从view里取数据。

4,怎么拿到view里的数据

上面第三步已经把数据绑定到view里了,我们拿数据就比较方便了。

我们只需要在view移出屏幕,或者view进入后台不可见时获取当前时间戳和view刚进入屏幕时的时间戳求差,大于2秒时,就取view里的数据。

588bc9060935

image.png

588bc9060935

image.png

我们这里收集数据是还要判断view从进屏幕到出屏幕这个过程中,有没有显示超过50%,没有超过50%的也不算有效曝光的。这样我们就可以拿到所有的组件及组件里元素的数据。

588bc9060935

image.png

如我们拿到商品组件的数据如下

{

"micro_page_name": "我是主页",

"micro_page_id": "3",

"micro_cindex": 3,

"component_name": "",

"micro_component_type": "groupbuyBargainList",

"micro_component_sindex": 1,

"exposure_content": "为全文",

"exposure_content_link": "http:\/\/m.ngmm001.com\/goods\/32702?componentName=groupbuyBargin-list",

"exposure_id": "32702"

}

拿到这些数据后,我们再做下有效曝光时间判断。比如view从进入屏幕绑定数据到移出屏幕的时间差大于2秒,才算有效曝光,才做数据上传。

588bc9060935

时间过滤

如我们把有效的曝光数据上传到神策数据后台。

588bc9060935

上传的有效数据

588bc9060935

神策收集

可以看到我们的数据就能成功上传到神策了。

5,怎么筛选出运营想要的有效数据

这里我们就要定义一个曝光策略字典了,这个字典通过以下几个步骤来告知我们需要统计那些数据

统计那个页面(如商城页)

统计那些组件view(如商品组件,banner组件,音频组件)

统计组件里的那些元素view(如商品的标题,商品的价格)

如我们想统计

首页:

轮播图组件,banner组件,知识付费组件,商品组件

就要定义如下曝光字典

{

"page": ["*"],

"event": [{

"eventName": "exposure",

"time": 2,

"area": 0.5

}, {

"eventName": "click"

}],

"component": ["slider", "banner","knowledgeList", "goodsList"]

}

简单说下上面数据格式。

page字段:代表我们要统计那些页面,如果是 * 代表所有页面都统计

event字段:代表我们要统计那些事件,如曝光事件,点击事件。

component字段:代表我们要统计那些组件,如果是 * 就统计所有组件。

然后我根据上面的曝光字典去过滤出运营所需要的数据,这个曝光字典是可以动态配置的。统计那些数据全部由曝光字典来定义。

安卓开发使用步骤

1,使用自定义的组件view替换根布局

2,用自定的ExLinearLayout,ExRelativeLayout等替换布局中的对应的view

3,绑定数据到view

4,获取符合条件的view并取数据

5,根据曝光字典上传数据

我们以搜索页的曝光统计为例。

如我们想统计知识结果下每个条目的曝光数据

588bc9060935

曝光条目

1,用自定义ExLinearLayout替换我们的根布局LinearLayout

588bc9060935

替换布局

2,到知识对应的viewholder,就是能获取到数据的地方,把数据绑定到view

588bc9060935

绑定数据到view

我们只需要做这两步,就可以轻松实现曝光的统计了。

588bc9060935

数据上传成功

后面还会有结合曝光的点击数据上传。就是用来统计从曝光到点击的转化率用的。

点击统计是基于上面两步的基础上做的。我们要统计曝光组件点击统计只需要在点击的地方写入下面代码即可。

588bc9060935

曝光组件的点击统计

原理就是把我们存储数据的view传进去,当用户点击时,就可以从这个view上拿到想要的数据了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio中,可以使用视图绑定(ViewBinding)来替代findViewById方法,以更方便地访问和操作视图元素。下面是使用视图绑定实现视图的步骤: 1. 确保你的项目已经升级到Android Studio 3.6 Canary 11或更高版本。 2. 在项目的build.gradle文件中,将以下代码添加到android块中: ```groovy viewBinding { enabled = true } ``` 3. 在布局文件中,使用<layout>标签将布局文件包裹起来,例如: ```xml <layout xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 布局内容 --> </LinearLayout> </layout> ``` 4. 在Activity或Fragment中,使用以下代码来获取视图绑定实例: ```java // 对于Activity private ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); // 现在可以通过binding对象访问布局中的视图元素了 binding.textView.setText("Hello World!"); } // 对于Fragment private FragmentMainBinding binding; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = FragmentMainBinding.inflate(inflater, container, false); View rootView = binding.getRoot(); // 现在可以通过binding对象访问布局中的视图元素了 binding.textView.setText("Hello World!"); return rootView; } ``` 通过使用视图绑定,你可以直接使用布局文件中定义的视图元素,而无需手动调用findViewById方法。这样可以提高代码的可读性和开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值