Android 全埋点解决方案,大专生面试阿里P7居然过了

本文介绍了Android全埋点的实现方式,通过在Activity生命周期中注册回调,捕获页面变化并收集数据。详细展示了如何在Activity和Fragment中进行埋点,并提供了关键代码示例。还提及了通过拦截系统点击事件进行埋点的原理,涉及反射获取OnClickListener并替换为自定义代理点击事件。
摘要由CSDN通过智能技术生成

在生命周期方法中是有activity对象的,这样也可以拿到全路径作为唯一标示;

示例:

public static void registerActivityLifecycleCallbacks(Application application) {

application.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {

@Override

public void onActivityCreated(Activity activity, Bundle bundle) {

}

@Override

public void onActivityStarted(Activity activity) {

}

@Override

public void onActivityResumed(Activity activity) {

mBeginTime = System.currentTimeMillis();

}

@Override

public void onActivityPaused(Activity activity) {

trackAppViewScreen(activity);

}

@Override

public void onActivityStopped(Activity activity) {

}

@Override

public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

}

@Override

public void onActivityDestroyed(Activity activity) {

}

});

}

onActivityPaused的时候我们调用了一下trackAppViewScreen方法,并传入当前activity,来看看trackAppViewScreen方法。

private static void trackAppViewScreen(Activity activity) {

try {

if (activity == null) {

return;

}

if (mIgnoredActivities.contains(activity.getClass().getCanonicalName())) {

return;

}

JSONObject properties = new JSONObject();

//获取页面的参数

if (activity.toString().contains(“SecondActivity”)) {

String userId = activity.getIntent().getStringExtra(“userId”);

properties.put(“userId”, userId);

}

properties.put(“activity”, activity.getClass().getCanonicalName());

SensorsDataAPI.getInstance().track("$AppViewScreen", properties, mBeginTime);

} catch (Exception e) {

e.printStackTrace();

}

}

我们在trackAppViewScreen方法中创建了JSONObject对象properties,用来添加我们需要埋点的数据,比如页面的唯一标示key我们用activity表示,并取全路径作为value

这里有一点需要注意的,我们除了可以收集一些固定参数之外,activity中intent的参数也是可以获取的,比如其他页面跳转到这个页面传的参数,我们同样可以获取到并作为埋点的参数使用的。

就像上面的SecondActivity,当MainActivity跳转到SecondActivity时传的userId是可以通过getIntent获取到的。

最后调用了SensorsDataAPI类的track方法,继续看

public void track(@NonNull String eventName, @Nullable JSONObject properties, long beginTime) {

try {

JSONObject jsonObject = new JSONObject();

jsonObject.put(“event”, eventName);

// jsonObject.put(“device_id”, mDeviceId);

JSONObject sendProperties = new JSONObject(mDeviceInfo);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值