Tracklytics 一個安卓埋點庫

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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末战惊,一起剝皮案震驚了整個濱河市流昏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吞获,老刑警劉巖况凉,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異衫哥,居然都是意外死亡茎刚,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門撤逢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膛锭,“玉大人,你說我怎么就攤上這事蚊荣〕跽” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵互例,是天一觀的道長奢入。 經(jīng)常有香客問我,道長媳叨,這世上最難降的妖魔是什么腥光? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任关顷,我火速辦了婚禮,結(jié)果婚禮上武福,老公的妹妹穿的比我還像新娘议双。我一直安慰自己,他們只是感情好捉片,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布平痰。 她就那樣靜靜地躺著,像睡著了一般伍纫。 火紅的嫁衣襯著肌膚如雪宗雇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天莹规,我揣著相機與錄音赔蒲,去河邊找鬼。 笑死访惜,一個胖子當著我的面吹牛嘹履,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播债热,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼幼苛!你這毒婦竟也來了窒篱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤舶沿,失蹤者是張志新(化名)和其女友劉穎墙杯,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體括荡,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡高镐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了畸冲。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫉髓。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖邑闲,靈堂內(nèi)的尸體忽然破棺而出算行,到底是詐尸還是另有隱情,我是刑警寧澤苫耸,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布州邢,位于F島的核電站,受9級特大地震影響褪子,放射性物質(zhì)發(fā)生泄漏量淌。R本人自食惡果不足惜骗村,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呀枢。 院中可真熱鬧叙身,春花似錦、人聲如沸硫狞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽残吩。三九已至财忽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泣侮,已是汗流浹背即彪。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留活尊,地道東北人隶校。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像蛹锰,于是被迫代替她去往敵國和親深胳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348