Android全埋点解决方案--读书笔记2

$AppViewScreen全埋点方案

$AppViewScreen事件,即页面浏览事件。在Android系统中,页面浏览其实就是指切换不同的Activity或Fragment。对于一个Activity,它的哪个生命周期执行了,代表该页面显示出来了呢?通过对Activity执行到onsume(Activity activity)生命周期时,也就代表该页面已经显示出来了,即该页面被浏览了。我们只要自动地在onResume里触发$AppViewScreen事件,即可解决$AppViewScreen事件的全埋点。

关键技术Application.ActivityLifecycleCallbacks 是Application的一个内部接口,是从API 14(即Android 4.0)开始提供的。Application类通过此接口提供了一系列的回调方法,用于让开发者可以对Activity的所有生命周期事件进行集中处理(或称监控)。我们可以通过Application类提供的registerActivityLifecycleCallback(ActivityLifecycleCallbacks callback)方法来注册ActivityLifecycleCallback的回调。

完善方案 即Runtime Permissions,又称运行时权限。在一般情况下,我们如果要使用Runtime Permission主要分为四个步骤,下面我们以使用(申请)

第一步:声明权限 需要在AndroidManifest.xml文件中使用users-permission声明应用程序要使用的权限列表。

第二步:检查权限  如果应用程序需要使用READ_CONTACTS权限,则要在每次真正使用READ_CONTACTS权限之前,检测当前应用程序是否已经拥有该权限,这是因为用户可能随时会在Android系统的设置中关掉授予当前应用程序的任何权限。

第三步:申请权限  可以通过调用Activity-Compat的requestPermission方法来申请一个或一组权限。

第四步:处理权限请求结果   用户选择之后的结果会回调当前Activity的onRequestPermissoinsResult,我们可以根据requestCode和grantResults参数来判断用户选择了“允许”还是“禁止”按钮。

可以考虑给埋点SDK新增一个功能,即用户可以设置想要过滤哪些Activity的页面浏览事件(即指定不采集哪些Activity的页面浏览事件),然后通过灵活使用这个接口,解决上面的问题。步骤:

第一步:在SensorsDataAPI中新增两个接口

第二步:修改trackAppViewScreen(Activity activity)方法添加相应的判断逻辑。

第三步:修改申请权限的Activity 在申请权限的Activity中,在它的onRequestPermissionResult回调中首先调用ignoreAutoTrackActivity方法来忽略当前Activity的页面浏览事件,然后在onStop生命周期函数恢复采集当前Activity的页面浏览事件。

对于$AppStart和$AppEnd,归根到底就是判断当前应用程序是处于前台还是处于后台。而Android系统本身并没有给应用程序提供相关的接口来判断这些状态。步骤:

第一步:新建一个项目

第二步:创建sdk module

第三步:添加依赖关系

第四步:编写埋点SDK

第五步:注册ActivityLifecycleCallBack回调

第六步:定义SensorsDatabaseHelper

第七步:定义SensorsDataContentProvider

第八步:初始化埋点SDK

第九步:声明自定义的Application 

缺点:应用程序发生崩溃或者应用程序被强杀等场景,需要下次启动应用程序的时候才能有机会补发$AppEnd事件。如果用户不再启动应用程序或者将应用程序卸载掉,会导致“丢失”$AppEnd事件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值