Tracklytics 一個安卓埋點庫
聲明:該庫是由 https://github.com/orhanobut/tracklytics 作者的埋點庫修改而來
推薦先看下原作者的文檔先裹驰,他寫的更詳細映屋,我的僅僅是修復了問題及導入方式不同而已,使用上依然是一樣的矩屁。
修復了如下問題:
1抡柿、解耦了Aspectjx AOP
庫
2舔琅、修復無法跨庫使用的問題
1、導入
在你的項目主build.gradle
中加入aspectjx
依賴
buildscript {
dependencies {
classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.10'
}
}
在所需要用到埋點的模塊module/build.gradle
中引用aspectjx
的插件
apply plugin: 'com.hujiang.android-aspectjx'
以及引用依賴
dependencies {
implementation 'com.ubitar.tracklytics:tracklytics:1.0.0'
}
2洲劣、使用
注冊埋點監(jiān)聽器备蚓,每當出發(fā)埋點時將會調(diào)用
Tracklytics.init(new EventSubscriber() {
@Override public void onEventTracked(Event event) {
// Send your events to Mixpanel, Fabric etc
}
});
添加埋點事件
@TrackEvent("event_name")
public void foo() {
}
3、常見問題
編譯時出現(xiàn) zip file is empty
參考https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx/issues/287 這個是Aspectjx的版本問題囱稽,多去issues里搜搜解決辦法
4郊尝、更多使用功能(從這里我就直接搬運了,太多了)
@TrackEvent
Scope: Method
Track an event and notify the subscriber(EventSubscriber) on each method invocation.
@TrackEvent("event_name")
public void foo() {
}
@Attribute
Scope: Method, Method parameters
There are multiple ways to add an attribute to the corresponding event. Assigns the values in runtime dynamically.
By using method parameters: Parameter value will be used as attribute value.
@TrackEvent("event_name")
public void foo(@Attribute("attribute_key") String name) {
// something
}
By using the return value of the method as attribute value.
@TrackEvent("event_name")
@Attribute("attribute_key")
public String foo() {
// something
return "attribute_value";
}
Set a default value when the expected value is null.
@TrackEvent("event_name")
public void foo(@Attribute(value="attribute_key", defaultValue="defaultValue") String name) {
// something
}
@FixedAttribute
Scope: Method, Class
If the attribute values are constant, use FixedAttribute.
On method: Only this event will have this fixed attribute.
@TrackEvent("eventName")
@FixedAttribute(key="Login", value="Success")
public void foo(){
}
On class: These attributes will be added to each event that is triggered within this class. For example: Following foo()
method will also have screen_name
attribute.
@FixedAttribute(key="screen_name", value="Login")
public class LoginPresenter{
@TrackEvent("login")
public void onLoggedIn(){
}
}
@FixedAttributes
Scope: Method, Class
Prior to Java 8, repeated annotations are not available. Sometimes you may need more fixed attributes. Use this annotation to add multiple attributes
@TrackEvent("event_name")
@FixedAttributes({
@FixedAttribute(key="name", value="Something"),
@FixedAttribute(key="last_name", value="Something")
})
public void foo(){
}
Filters
Use filters to differentiate some events. You may only want to send specific events to a specific analytics tool. ie: Send login event to Fabric.
@TrackEvent(value="event_name",filters=100)
public void foo() {
}
Tags
You can use tags to send more information about the tracked event. For example: Adjust requires token for their events.
@TrackEvent(value="event",filters=100, tags="abc123")
public void trackNoValues() {
}
Super Attributes
Some attributes might be used for every event within the app such as device id. Tracklytics call them as super attributes. These attributes will be automatically added to each event. You only need to set them once and Tracklytics will do the rest.
Access super attributes via Event class
Tracklytics.init(new EventSubscriber() {
@Override public void onEvent(Event event) {
// event.superAttributes
}
});
Set any attribute as super
@Attribute(value="key", isSuper=true)
Set any fixed attribute as super
@FixedAttribute(key="key", value="value", isSuper=true)
Add super attribute directly
tracklytics.addSuperAttribute("key","value");
Remove super attribute
tracklytics.removeSuperAttribute("key");
@TrackableAttribute / @Trackable
You can make the class trackable in order to provide preset values. Imagine your domain models, they contain a lot of information and you can re-use them as a source for tracking. For the following use case: When event
is triggered, attributes from Foo.getTrackableAttributes()
will be added to this event.
class Foo implements Trackable {
String name;
@Override public Map<String, String> getTrackableAttributes() {
Map<String,String> values = new HashMap<>();
values.put("name", name);
return values;
}
}
@TrackEvent("event")
void something(@TrackableAttribute FooTrackable foo){
}
@TransformAttribute / @TransformAttributeMap
Sometimes values are not in the correct form, such as position or index is in Integer type. This might not be clear if you track them as raw. You may want to send a more understandable value to the analytic tools. Use TransformAttribute to solve this issue.
For example: In the following example, index is represented by integer and you want to have a String value which represent exact value such as menu item.
class Foo {
@TrackEvent("event")
@TransformAttributeMap(
keys = {0, 1},
values = {"value0", "value1"}
)
public void foo(@TransformAttribute("key") int index) {
}
}
// foo(0) : event -> [{"key","value0}]
// foo(1) : event -> [{"key","value1}]
Log
Tracklytics provides a stream for logs which sends formatted event messages.
Tracker tracklytics = Tracker.init(...);
tracklytics.setEventLogListener(new EventLogListener() {
@Override public void log(String message) {
// Set your logger here. ie: Logger or Timber
Log.d("Tracker", message);
}
});
Log output sample
eventName:{key=value}, super attrs: {key=value}, tags={100,200}
More API options
You can also track event directly without annotations.
tracklytics.trackEvent(String eventName)
tracklytics.trackEvent(String eventName, Map attributes)