1. 程式人生 > >android自定義(無埋點)收集使用者行為統計 (非常方便 可以自己拓展)

android自定義(無埋點)收集使用者行為統計 (非常方便 可以自己拓展)

EventCollect

這是收集使用者行為統計的程式碼

reademe:

需求::
用於App統計使用者行為 。 實際上就是監控所有事件 並把事件 傳送到服務上去

要求: 可以監控使用者的所有行為,例如使用者誰(沒有登入的情況使用UUID),

進入那個頁面,進入的時間,在這個頁面操作了什麼(點選了那個按鈕,或者是點選了列表那個列),

離開頁面時間,以及其他統計資訊,例如版本號,手機系統版本,使用者當前網路,使用者位置,使用者單次使用App時長等

。使用者是否把App退到了後臺。使用者離開了哪一個頁面,離開時間。

解決方案:

重寫 dispatchTouchEvent負責分發事件 的方法在這裡 遍歷 所有節點 收集按下的x y 座標

在擡起的時候通過使用者動作的範圍查詢相應的View,並組成自己所需要的json 引數

功能 特點::

可以無埋點 只需要在baseActivity裡面 加上幾行程式碼就可以實現收集使用者

操作資訊的功能.

注意 :
統計上報介面採用分散式,不然所有資料都請求同一個介面,那麼日活大的情況下,

伺服器掛了 不僅無法收到資料,反而影響客戶端其他正常的功能

演示操作 gif圖有點大 :

我這裡演示 模擬請求成功和請求失敗的情況

在DateSender類中MySend 執行緒 中控制請求成功和失敗

第一種情況: 收集事件達到五次 上傳資料成功的演示:

image

第二種情況: 收集事件達到五次 上傳資料不成功的演示 存入本地:

image

第三種情況: 收集事件達到五次 上傳資料成功 並且把以前未上傳成功的資料一起上傳:

image

流程圖

image

上傳的json資料

    {
        "userData":{
            "app_channel":"",
            "network":"NONE",
            "sysVersion":"6.0.1",
            "w_and_h":"1080*1920",
            "UUID":"ffffffff-89a3-f09e-115f-86b90033c587",
            "version":1,
            "phoneModel":"Redmi Note 3",
            "comeFrom":"az_wn",
            "user_loaction":{
                "district":"朝陽區",
                "streetName":"三元橋",
                "province":"北京",
                "lat":"37.0",
                "lng":"37.0",
                "city":"北京"
            }
        },
        "events":[
            {
                "type":"app",
                "evenTime":1499672827876,
                "even":"in",
                "page":"MainActivity",
                "name":"首頁"
            },
            {
                "evenTime":1499672844001,
                "name":"點選收集資料",
                "page":"MainActivity",
                "even":"click",
                "type":"button"
            },
            {
                "evenTime":1499672844604,
                "name":"點選收集資料",
                "page":"MainActivity",
                "even":"click",
                "type":"button"
            },
            {
                "evenTime":1499672845334,
                "name":"自定義事件",
                "page":"MainActivity",
                "even":"click",
                "type":"button"
            },
            {
                "evenTime":1499672845338,
                "name":"nihao",
                "attributes":{
                    "item-category":"book"
                },
                "page":"MainActivity",
                "even":"click",
                "type":"custum"
            }
        ],
        "session":{
            "id":"1499672845390_1951868",
            "time":1499672845390
        }
    }

last:

感謝github上各種收集事件專案給我的思路.

所以我也把自己寫的貢獻出來,希望能幫助到有需要的人