Tracklytics 一個安卓埋點庫

Tracklytics 一個安卓埋點庫

聲明:該庫是由 https://github.com/orhanobut/tracklytics 作者的埋點庫修改而來
推薦先看下原作者的文檔先,他寫的更詳細(xì),我的僅僅是修復(fù)了問題及導(dǎo)入方式不同而已,使用上依然是一樣的。

修復(fù)了如下問題:
1、解耦了Aspectjx AOP
2、修復(fù)無法跨庫使用的問題

1、導(dǎo)入

在你的項目主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)聽器,每當(dāng)出發(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、更多使用功能(從這里我就直接搬運(yùn)了,太多了)

@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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容