本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,特別涉及一種監(jiān)控應(yīng)用中控件的方法、服務(wù)器及系統(tǒng)。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)和硬件技術(shù)的不斷發(fā)展,越來越多的人開始使用如智能手機(jī)、平板電腦等移動(dòng)終端設(shè)備。同時(shí),移動(dòng)互聯(lián)網(wǎng)的廣泛普及促使移動(dòng)應(yīng)用的發(fā)展更加迅猛,用戶通過使用移動(dòng)終端上安裝的各類移動(dòng)應(yīng)用,進(jìn)行閱讀、聊天、購物等各項(xiàng)活動(dòng)。為了進(jìn)一步提升用戶體驗(yàn),提供更好的移動(dòng)應(yīng)用,需要了解用戶對(duì)移動(dòng)應(yīng)用的使用情況以便改進(jìn)應(yīng)用性能。
現(xiàn)有的用戶數(shù)據(jù)采集方法多為人工埋點(diǎn),即由開發(fā)人員人工地定義控件所對(duì)應(yīng)的統(tǒng)計(jì)邏輯,并將該統(tǒng)計(jì)邏輯寫入該控件對(duì)應(yīng)的代碼里。當(dāng)用戶使用該控件時(shí),可以通過埋點(diǎn)代碼收集用戶的行為數(shù)據(jù)。然而,人工埋點(diǎn)方式需要編寫額外的埋點(diǎn)代碼,費(fèi)時(shí)費(fèi)力且容易出錯(cuò)。當(dāng)應(yīng)用功能升級(jí)時(shí),需要重新定義埋點(diǎn)邏輯并編寫相應(yīng)的埋點(diǎn)代碼,一旦修改了埋點(diǎn)邏輯,還需要對(duì)整個(gè)應(yīng)用版本進(jìn)行升級(jí),加大了開發(fā)及測試的工作量。
技術(shù)實(shí)現(xiàn)要素:
為此,本發(fā)明提供一種監(jiān)控應(yīng)用中控件的方案,以力圖解決或者至少緩解上面存在的問題。
根據(jù)本發(fā)明的一個(gè)方面,提供一種監(jiān)控應(yīng)用中控件的方法,適于在監(jiān)控服務(wù)器中執(zhí)行,監(jiān)控服務(wù)器分別與第一客戶端和第二客戶端通信連接,該方法包括:接收第一客戶端發(fā)送的與待監(jiān)控應(yīng)用中目標(biāo)頁面相關(guān)的頁面信息集合,目標(biāo)頁面為待監(jiān)控應(yīng)用的當(dāng)前頁面,頁面信息集合包括頁面截圖和頁面控件信息,頁面控件信息包括目標(biāo)頁面的視圖樹和控件屬性信息;基于控件屬性信息,將視圖樹轉(zhuǎn)化為渲染樹,并生成可監(jiān)控控件的標(biāo)記信息;組合頁面截圖、渲染樹、頁面控件信息和標(biāo)記信息來生成渲染信息集合;將渲染信息集合發(fā)送給第二客戶端,并指示第二客戶端根據(jù)渲染信息集合將標(biāo)記出可監(jiān)控控件的目標(biāo)頁面渲染出來;根據(jù)接收到的第二客戶端發(fā)送的已選定的可監(jiān)控控件及其對(duì)應(yīng)的監(jiān)控事件信息,生成埋點(diǎn)配置信息;接收第一客戶端發(fā)送的埋點(diǎn)配置信息請(qǐng)求,將埋點(diǎn)配置信息發(fā)送給第一客戶端,并指示第一客戶端根據(jù)埋點(diǎn)配置信息在待監(jiān)控應(yīng)用中查找到選定的可監(jiān)控控件進(jìn)行埋點(diǎn)處理以便監(jiān)控。
可選地,在根據(jù)本發(fā)明的監(jiān)控應(yīng)用中控件的方法中,控件屬性信息包括控件名稱、控件ID、HashCode、位置、尺寸、可見性、父子關(guān)系和可點(diǎn)擊性中的至少一種。
可選地,在根據(jù)本發(fā)明的監(jiān)控應(yīng)用中控件的方法中,基于控件屬性信息,將視圖樹轉(zhuǎn)化為渲染樹息包括:從控件屬性信息中獲取控件的HashCode的值;根據(jù)控件的HashCode的值,將視圖樹轉(zhuǎn)化為渲染樹。
可選地,在根據(jù)本發(fā)明的監(jiān)控應(yīng)用中控件的方法中,根據(jù)接收到的第二客戶端發(fā)送的已選定的可監(jiān)控控件及其對(duì)應(yīng)的監(jiān)控事件信息,生成埋點(diǎn)配置信息包括:向接收到的第二客戶端發(fā)送的已選定的可監(jiān)控控件添加一條監(jiān)控事件;對(duì)監(jiān)控事件分配一個(gè)對(duì)應(yīng)的監(jiān)控事件ID;根據(jù)已選定的可監(jiān)控控件及其控件屬性信息,利用視圖樹生成查找該控件的路徑信息;將已選定的可監(jiān)控控件的監(jiān)控事件信息、監(jiān)控事件ID和路徑信息組合生成埋點(diǎn)配置信息。
可選地,在根據(jù)本發(fā)明的監(jiān)控應(yīng)用中控件的方法中,接收第一客戶端發(fā)送的埋點(diǎn)配置信息請(qǐng)求,將埋點(diǎn)配置信息發(fā)送給第一客戶端包括:接收第一客戶端發(fā)送的埋點(diǎn)配置信息請(qǐng)求;從接收到的第一客戶端發(fā)送的埋點(diǎn)配置信息請(qǐng)求中獲取第一配置信息版本號(hào);獲取監(jiān)控服務(wù)器中埋點(diǎn)配置信息的第二配置信息版本號(hào);若第二配置信息版本號(hào)高于第一配置信息版本號(hào),則將埋點(diǎn)配置信息發(fā)送給第一客戶端。
可選地,在根據(jù)本發(fā)明的監(jiān)控應(yīng)用中控件的方法中,還包括:若第二配置信息版本號(hào)不高于第一配置信息版本號(hào),則向第一客戶端發(fā)送暫不更新埋點(diǎn)配置信息的通知。
根據(jù)本發(fā)明的一個(gè)方面,提供一種監(jiān)控應(yīng)用中控件的方法,適于在監(jiān)控控件系統(tǒng)中執(zhí)行,監(jiān)控控件系統(tǒng)包括監(jiān)控服務(wù)器、第一客戶端和第二客戶端,其中,監(jiān)控服務(wù)器分別與第一客戶端和第二客戶端通信連接,該方法包括:第一客戶端對(duì)待監(jiān)控應(yīng)用的目標(biāo)頁面進(jìn)行截圖操作以獲得頁面截圖,將頁面截圖和目標(biāo)頁面的頁面控件信息組合生成頁面信息集合,并發(fā)送給監(jiān)控服務(wù)器,其中,目標(biāo)頁面為待監(jiān)控應(yīng)用的當(dāng)前頁面,頁面控件信息包括目標(biāo)頁面的視圖樹和控件屬性信息;監(jiān)控服務(wù)器接收第一客戶端發(fā)送的頁面信息集合,基于控件屬性信息,將視圖樹轉(zhuǎn)化為渲染樹,并生成可監(jiān)控控件的標(biāo)記信息,組合頁面截圖、渲染樹、頁面控件信息和標(biāo)記信息來生成渲染信息集合,將渲染信息集合發(fā)送給第二客戶端;第二客戶端根據(jù)接收到的渲染信息集合,將標(biāo)記出可監(jiān)控控件的目標(biāo)頁面渲染出來,獲取開發(fā)人員選定的可監(jiān)控控件及其對(duì)應(yīng)的監(jiān)控事件信息并發(fā)送給監(jiān)控服務(wù)器;監(jiān)控服務(wù)器根據(jù)接收到的已選定的可監(jiān)控控件及其對(duì)應(yīng)的監(jiān)控事件信息,生成埋點(diǎn)配置信息;第一客戶端向監(jiān)控服務(wù)器發(fā)送埋點(diǎn)配置信息請(qǐng)求;監(jiān)控服務(wù)器根據(jù)接收到的埋點(diǎn)配置信息請(qǐng)求,將埋點(diǎn)配置信息發(fā)送給第一客戶端;第一客戶端根據(jù)接收到的埋點(diǎn)配置信息,在待監(jiān)控應(yīng)用中查找到選定的可監(jiān)控控件進(jìn)行埋點(diǎn)處理以便監(jiān)控。
可選地,在根據(jù)本發(fā)明的監(jiān)控應(yīng)用中控件的方法中,第一客戶端對(duì)待監(jiān)控應(yīng)用的目標(biāo)頁面進(jìn)行截圖操作以獲取頁面截圖包括:獲取待監(jiān)控應(yīng)用中目標(biāo)頁面的Activity組件;通過Activity組件來獲取目標(biāo)頁面中視圖樹的根控件;調(diào)用根控件對(duì)應(yīng)的截屏函數(shù)對(duì)目標(biāo)頁面進(jìn)行屏幕截圖以獲取屏幕圖片,并將屏幕圖片保存為Bitmap類型對(duì)象;根據(jù)從屏幕圖片的Bitmap類型對(duì)象中獲取的圖片縮放比例重新調(diào)整屏幕圖片的寬高,以獲取目標(biāo)頁面的頁面截圖。
可選地,在根據(jù)本發(fā)明的監(jiān)控應(yīng)用中控件的方法中,第二客戶端根據(jù)接收到的渲染信息集合,將標(biāo)記出可監(jiān)控控件的目標(biāo)頁面渲染出來包括:從渲染信息集合中獲取頁面截圖、渲染樹、頁面控件信息和標(biāo)記信息;根據(jù)頁面截圖、渲染樹、頁面控件信息和標(biāo)記信息,將標(biāo)記出可監(jiān)控控件的目標(biāo)頁面渲染出來。
可選地,在根據(jù)本發(fā)明的監(jiān)控應(yīng)用中控件的方法中,第一客戶端根據(jù)接收到的埋點(diǎn)配置信息,在待監(jiān)控應(yīng)用中查找到選定的可監(jiān)控控件進(jìn)行埋點(diǎn)處理以便監(jiān)控包括:根據(jù)接收到的埋點(diǎn)配置信息,對(duì)待監(jiān)控應(yīng)用中的控件進(jìn)行匹配以查找選定的可監(jiān)控控件;向查找到的選定的可監(jiān)控控件添加埋點(diǎn)事件以便監(jiān)控。
根據(jù)本發(fā)明的一個(gè)方面,提供一種監(jiān)控服務(wù)器,分別與第一客戶端和第二客戶端通信連接,該監(jiān)控服務(wù)器包括第一接收模塊、信息處理模塊、第一組合模塊、第一發(fā)送模塊、生成模塊、第二接收模塊和第二發(fā)送模塊。其中,第一接收模塊,適于接收第一客戶端發(fā)送的與待監(jiān)控應(yīng)用中目標(biāo)頁面相關(guān)的頁面數(shù)據(jù),目標(biāo)頁面為待監(jiān)控應(yīng)用的當(dāng)前頁面,頁面數(shù)據(jù)包括頁面截圖和頁面控件信息,頁面控件信息包括目標(biāo)頁面的視圖樹和控件屬性信息;信息處理模塊,適于基于控件屬性信息,將視圖樹轉(zhuǎn)化為渲染樹,并生成可監(jiān)控控件的標(biāo)記信息;第一組合模塊,適于組合頁面截圖、渲染樹、頁面控件信息和標(biāo)記信息來生成渲染信息集合;第一發(fā)送模塊,適于將渲染信息集合發(fā)送給第二客戶端,并指示第二客戶端根據(jù)渲染信息集合將標(biāo)記出可監(jiān)控控件的目標(biāo)頁面渲染出來;生成模塊,適于根據(jù)接收到的第二客戶端發(fā)送的已選定的可監(jiān)控控件及其對(duì)應(yīng)的監(jiān)控事件信息,生成埋點(diǎn)配置信息;第二接收模塊,適于接收第一客戶端發(fā)送的埋點(diǎn)配置信息請(qǐng)求;第二發(fā)送模塊,適于將埋點(diǎn)配置信息發(fā)送給第一客戶端,并指示第一客戶端根據(jù)埋點(diǎn)配置信息在待監(jiān)控應(yīng)用中查找到選定的可監(jiān)控控件進(jìn)行埋點(diǎn)處理以便監(jiān)控。
根據(jù)本發(fā)明的又一個(gè)方面,提供一種監(jiān)控控件系統(tǒng),包括監(jiān)控服務(wù)器、第一客戶端和第二客戶端,監(jiān)控服務(wù)器分別與第一客戶端和第二客戶端通信連接,其中,第一客戶端包括第一監(jiān)控處理裝置,第一監(jiān)控處理裝置包括截圖模塊、第二組合模塊、第三發(fā)送模塊、第四發(fā)送模塊和埋點(diǎn)監(jiān)控模塊。其中,截圖模塊適于對(duì)待監(jiān)控應(yīng)用的目標(biāo)頁面進(jìn)行截圖操作以獲得頁面截圖;第二組合模塊適于將頁面截圖和目標(biāo)頁面的頁面控件信息組合生成頁面信息集合;第三發(fā)送模塊適于向監(jiān)控服務(wù)器發(fā)送頁面信息集合;第四發(fā)送模塊適于向監(jiān)控服務(wù)器發(fā)送埋點(diǎn)配置信息請(qǐng)求;埋點(diǎn)監(jiān)控模塊適于根據(jù)接收到的埋點(diǎn)配置信息,在待監(jiān)控應(yīng)用中查找到選定的可監(jiān)控控件進(jìn)行埋點(diǎn)處理以便監(jiān)控。
根據(jù)本發(fā)明的監(jiān)控應(yīng)用中控件的技術(shù)方案,將待監(jiān)控應(yīng)用中目標(biāo)頁面渲染到可供開發(fā)人員使用的終端設(shè)備中,根據(jù)開發(fā)人員對(duì)可監(jiān)控控件的選定,在監(jiān)控服務(wù)器之中生成埋點(diǎn)配置信息,從而實(shí)現(xiàn)了待監(jiān)控控件與外部配置文件的關(guān)聯(lián),不需要在應(yīng)用源文件中為待監(jiān)控控件編寫埋點(diǎn)監(jiān)控代碼,而是通過監(jiān)控服務(wù)器來實(shí)現(xiàn)對(duì)控件的監(jiān)聽。當(dāng)用戶使用應(yīng)用時(shí),涉及到與待監(jiān)控控件相關(guān)的操作一旦觸發(fā),監(jiān)控服務(wù)器即可實(shí)時(shí)采集用戶行為數(shù)據(jù)。上述監(jiān)控應(yīng)用控件的方法將埋點(diǎn)監(jiān)控代碼與應(yīng)用源代碼分離,減輕了應(yīng)用開發(fā)人員的編碼負(fù)擔(dān),隨時(shí)埋點(diǎn),即時(shí)生效。同時(shí),埋點(diǎn)配置信息在服務(wù)器端進(jìn)行配置,在更新配置信息時(shí),無需對(duì)應(yīng)用本身進(jìn)行更新。
附圖說明
為了實(shí)現(xiàn)上述以及相關(guān)目的,本文結(jié)合下面的描述和附圖來描述某些說明性方面,這些方面指示了可以實(shí)踐本文所公開的原理的各種方式,并且所有方面及其等效方面旨在落入所要求保護(hù)的主題的范圍內(nèi)。通過結(jié)合附圖閱讀下面的詳細(xì)描述,本公開的上述以及其它目的、特征和優(yōu)勢(shì)將變得更加明顯。遍及本公開,相同的附圖標(biāo)記通常指代相同的部件或元素。
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的監(jiān)控控件系統(tǒng)100的示意圖;
圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的監(jiān)控應(yīng)用中控件的方法500的流程圖;
圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的待監(jiān)控應(yīng)用的目標(biāo)頁面的頁面截圖;
圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的顯示于第二客戶端中根據(jù)渲染信息集合渲染的標(biāo)記出可監(jiān)控控件的目標(biāo)頁面;
圖5示出了根據(jù)本發(fā)明又一個(gè)實(shí)施例的監(jiān)控應(yīng)用中控件的方法600的流程圖;
圖6示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的監(jiān)控服務(wù)器200的示意圖;
圖7示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的第一監(jiān)控處理裝置700的示意圖;以及
圖8示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的第二監(jiān)控處理裝置800的示意圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的監(jiān)控控件系統(tǒng)100的示意圖。如圖1所示,監(jiān)控控件系統(tǒng)100中包括監(jiān)控服務(wù)器200、第一客戶端300和第二客戶端400。其中,監(jiān)控服務(wù)器200分別與第一客戶端300和第二客戶端400通信連接,第一客戶端300為移動(dòng)終端,可以是智能手機(jī)、平板電腦等,但不限于此,其數(shù)量也不做限制。第二客戶端400為計(jì)算設(shè)備,如PC機(jī)等,也并不限于此,其數(shù)量也不進(jìn)行限制。第一客戶端300中安裝有移動(dòng)應(yīng)用A,移動(dòng)應(yīng)用A即為待監(jiān)控應(yīng)用,第一客戶端300對(duì)移動(dòng)應(yīng)用A中的當(dāng)前頁面進(jìn)行截圖操作以獲得頁面截圖,將頁面截圖和當(dāng)前頁面的頁面控件信息組合生成頁面信息集合,并發(fā)送給監(jiān)控服務(wù)器200,其中,頁面控件信息包括目標(biāo)頁面的視圖樹和控件屬性信息。監(jiān)控服務(wù)器200接收到第一客戶端A發(fā)送的頁面信息集合后,基于控件屬性信息將視圖樹轉(zhuǎn)化為渲染樹,并生成可監(jiān)控控件的標(biāo)記信息,組合頁面截圖、渲染樹、頁面控件信息和標(biāo)記信息來生成渲染信息集合并發(fā)送給第二客戶端400。第二客戶端400根據(jù)接收到的渲染信息集合,將標(biāo)記出可監(jiān)控控件的目標(biāo)頁面渲染出來,獲取開發(fā)人員選定的可監(jiān)控控件及其對(duì)應(yīng)的監(jiān)控事件信息并發(fā)送給監(jiān)控服務(wù)器200。監(jiān)控服務(wù)器200根據(jù)接收到的已選定的可監(jiān)控控件及其對(duì)應(yīng)的監(jiān)控事件信息,生成埋點(diǎn)配置信息,并根據(jù)接收到的第一客戶端300發(fā)送的埋點(diǎn)配置信息請(qǐng)求,將埋點(diǎn)配置信息發(fā)送給第一客戶端300。第一客戶端300根據(jù)接收到的埋點(diǎn)配置信息,在移動(dòng)應(yīng)用A中查找到選定的可監(jiān)控控件進(jìn)行埋點(diǎn)處理以便監(jiān)控。通過本監(jiān)控控件系統(tǒng)100,當(dāng)用戶使用移動(dòng)應(yīng)用A時(shí),監(jiān)控服務(wù)器200可實(shí)時(shí)采集用戶行為數(shù)據(jù),而且埋點(diǎn)配置信息是在服務(wù)器端生成的,在更新時(shí)無需對(duì)移動(dòng)應(yīng)用A進(jìn)行更新操作,降低了應(yīng)用開發(fā)人員的工作負(fù)擔(dān)。
圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的監(jiān)控應(yīng)用中控件的方法500的流程圖。監(jiān)控應(yīng)用中控件的方法500適于在監(jiān)控服務(wù)器200中執(zhí)行。
如圖2所示,方法500適于步驟S510。在步驟S510中,接收第一客戶端發(fā)送的與待監(jiān)控應(yīng)用中目標(biāo)頁面相關(guān)的頁面信息集合,目標(biāo)頁面為待監(jiān)控應(yīng)用的當(dāng)前頁面,頁面信息集合包括頁面截圖和頁面控件信息,頁面控件信息包括目標(biāo)頁面的視圖樹和控件屬性信息。其中,控件屬性信息包括控件名稱、控件ID、HashCode、位置、尺寸、可見性、父子關(guān)系和可點(diǎn)擊性中的至少一種。在本實(shí)施例中,待監(jiān)控應(yīng)用是名為Demo的移動(dòng)應(yīng)用,圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的待監(jiān)控應(yīng)用的目標(biāo)頁面的頁面截圖,該頁面截圖中顯示的移動(dòng)應(yīng)用Demo是在第一客戶端300中執(zhí)行,在移動(dòng)應(yīng)用Demo執(zhí)行時(shí)對(duì)其當(dāng)前頁面進(jìn)行截圖獲得了對(duì)應(yīng)的頁面截圖,并由第一客戶端300發(fā)送給監(jiān)控服務(wù)器200。如圖3所示,在移動(dòng)應(yīng)用Demo的當(dāng)前頁面的頁面截圖中,用戶通過點(diǎn)擊了“EVENTS”選項(xiàng),在其下方展示出5個(gè)可供選擇的選項(xiàng),即“EVENT_1”、“EVENT_2”、“EVENT_MAP”、“INVOKE ERROR”和“CRASH”,這5個(gè)選項(xiàng)均對(duì)應(yīng)為點(diǎn)擊控件。
隨后,進(jìn)入步驟S520,基于控件屬性信息,將視圖樹轉(zhuǎn)化為渲染樹,并生成可監(jiān)控控件的標(biāo)記信息。在將視圖樹轉(zhuǎn)化為渲染樹時(shí),是先從控件屬性信息中獲取控件的HashCode的值,再根據(jù)該控件的HashCode的值,將視圖樹轉(zhuǎn)化為渲染樹。在本實(shí)施例中,首先遍歷視圖樹中的所有元素,即從根控件開始,逐一向下查找子控件,在上述查找過程中,在各個(gè)父控件的控件屬性信息中父子關(guān)系這一項(xiàng),即Subviews字段里,記錄當(dāng)前控件的所有子控件的HashCode的值,再根據(jù)所有控件的HashCode的值來組織生成渲染樹。同時(shí),根據(jù)各個(gè)控件的控件屬性信息中的可點(diǎn)擊性,判斷出該控件是否可監(jiān)控,只有當(dāng)可點(diǎn)擊性為True時(shí),其對(duì)應(yīng)的控件才是可監(jiān)控的。最后,將上述可監(jiān)控控件的可點(diǎn)擊性和該控件在當(dāng)前頁面中的位置組合生成標(biāo)記信息。
在步驟S520中將視圖樹轉(zhuǎn)化為渲染樹并生成可監(jiān)控控件的標(biāo)記信息后,執(zhí)行步驟S530,組合頁面截圖、渲染樹、頁面控件信息和標(biāo)記信息來生成渲染信息組合。接下來,進(jìn)入步驟S540,將步驟S530中生成的渲染信息集合發(fā)送給第二客戶端,并指示第二客戶端根據(jù)渲染信息集合將標(biāo)記出可監(jiān)控控件的目標(biāo)頁面渲染出來。在本實(shí)施例中,第二客戶端400中安裝有一個(gè)適于根據(jù)渲染信息組合渲染頁面的渲染應(yīng)用,這個(gè)渲染應(yīng)用可以為瀏覽器,在第二客戶端400中的渲染應(yīng)用根據(jù)渲染信息集合渲染頁面時(shí),會(huì)利用頁面控件信息中各控件的位置和標(biāo)記信息,在渲染出的目標(biāo)頁面上將可監(jiān)控控件進(jìn)行標(biāo)記,從而顯示出標(biāo)記有可監(jiān)控控件的目標(biāo)頁面。在實(shí)際處理過程成,還可以通過不同顏色的矩形框?qū)⒖杀O(jiān)控控件進(jìn)行進(jìn)一步標(biāo)記,以分辨出該可監(jiān)控控件的當(dāng)前狀態(tài),如黃色矩形框標(biāo)記的控件代表當(dāng)前控件可以被監(jiān)控,但尚未被開發(fā)人員選定,藍(lán)色矩形框標(biāo)記的控件代表當(dāng)前可監(jiān)控控件已處于被監(jiān)控中的狀態(tài),綠色矩形框標(biāo)出的控件代表當(dāng)前可監(jiān)控控件已經(jīng)被選定并且準(zhǔn)備添加監(jiān)控事件。圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的顯示于第二客戶端中的根據(jù)渲染信息集合渲染的標(biāo)記出可監(jiān)控控件的目標(biāo)頁面。如圖4所示,在第二客戶端400中所顯示的頁面中,“EVENT_1”這個(gè)點(diǎn)擊控件被黃色矩形框標(biāo)記,說明“EVENT_1”可以被監(jiān)控,而“EVENT_2”這個(gè)點(diǎn)擊控件被綠色矩形框標(biāo)記,說明“EVENT_2”已經(jīng)被選定并且準(zhǔn)備添加監(jiān)控事件。需要說明的是,由于附圖中無法顯示彩色,標(biāo)記“EVENT_1”和“EVENT_2”的矩形框均以灰色代替表示。
接下里,在步驟S550中,根據(jù)接收到的第二客戶端發(fā)送的已選定的可監(jiān)控控件及其對(duì)應(yīng)的監(jiān)控事件信息,生成埋點(diǎn)配置信息。首先,向接收到的第二客戶端發(fā)送的已選定的可監(jiān)控控件添加一條監(jiān)控事件,再對(duì)監(jiān)控事件分配一個(gè)對(duì)應(yīng)的監(jiān)控事件ID,根據(jù)已選定的可監(jiān)控控件及其控件屬性信息,利用視圖樹生成查找該控件的路徑信息,最后將已選定的可監(jiān)控控件的監(jiān)控事件信息、監(jiān)控事件ID和路徑信息組合生成埋點(diǎn)配置信息。在本實(shí)施例中,監(jiān)控服務(wù)器200根據(jù)當(dāng)前已選定的可監(jiān)控控件及其對(duì)應(yīng)的監(jiān)控信息事件,在之前接收到的第一客戶端300所發(fā)送的視圖樹中查找該控件的位置,并根據(jù)該控件的HashCode的值找到該控件的父控件,再查找這個(gè)控件的父控件的父控件,知道找到視圖樹的根控件為止,基于上述查找的過程生成對(duì)應(yīng)的查找路徑,再結(jié)合各控件的控件屬性信息形成對(duì)應(yīng)的路徑信息,將已選定的可監(jiān)控控件的監(jiān)控事件信息、監(jiān)控事件ID和路徑信息組合生成埋點(diǎn)配置信息,即生成一個(gè)路徑表。路徑表中包含有可監(jiān)控控件的控件ID、控件名稱、路徑信息等,以下給出了一個(gè)路徑表的示例,具體如下所示:
{
"id":"8cda1dd9f26349a3a9a7da6c83deecdb",
"name":"e2",
"type":"click",
"path":[{
"index":0,
"prefix":"shortest",
"id":16908290
},
{
"index":0,
"id_name":"android:tabhost"
},
{
"index":0,
"class":"android.widget.LinearLayout"
},
{
"index":0,
"id_name":"pager"
},
{
"index":0,
"class":"android.widget.LinearLayout"
},
{
"index":0,
"id_name":"button_test2"
}],
"target":null
}
在如上所示的路徑表中,id表示監(jiān)控服務(wù)器200為本次監(jiān)控事件生成的監(jiān)控事件ID,name表示已選定的可監(jiān)控控件對(duì)應(yīng)的監(jiān)控事件信息,即為開發(fā)人員在第二客戶端400所渲染出的頁面中對(duì)已選定的可監(jiān)控控件配置的監(jiān)控事件別名,type表示要監(jiān)控的事件類型,其值為“click”說明要監(jiān)控的事件類型為點(diǎn)擊事件,path表示路徑信息,是查找控件所必須的信息,path中從上到下依次為視圖層級(jí)結(jié)構(gòu)中的最頂層到具體選定的控件。如path中第一個(gè)元素"id":16908290,代表當(dāng)前頁面中的根控件的id,"id_name":"button_test2"元素代表選定的可監(jiān)控控件的控件ID,是開發(fā)人員在移動(dòng)應(yīng)用開發(fā)階段設(shè)置的值。
最后,進(jìn)入步驟S560,接收第一客戶端發(fā)送的埋點(diǎn)配置信息請(qǐng)求,將埋點(diǎn)配置信息發(fā)送給第一客戶端,并指示第一客戶端根據(jù)埋點(diǎn)配置信息在待監(jiān)控應(yīng)用中查找到選定的可監(jiān)控控件進(jìn)行埋點(diǎn)處理以便監(jiān)控。首先,監(jiān)控服務(wù)器接收第一客戶端發(fā)送的埋點(diǎn)配置信息請(qǐng)求,從接收到的第一客戶端發(fā)送的埋點(diǎn)配置信息請(qǐng)求中獲取第一配置信息版本號(hào),獲取監(jiān)控服務(wù)器中埋點(diǎn)配置信息的第二配置信息版本號(hào),若第二配置信息版本號(hào)高于第一配置信息版本號(hào),則將埋點(diǎn)配置信息發(fā)送給第一客戶端,若第二配置信息版本號(hào)不高于第一配置信息版本號(hào),則向第一客戶端發(fā)送暫不更新埋點(diǎn)配置信息的通知。在本實(shí)施例中,第一客戶端300發(fā)送的埋點(diǎn)配置信息請(qǐng)求中的第一配置信息版本號(hào)為1.3,監(jiān)控服務(wù)器200中埋點(diǎn)配置信息的第二配置信息版本號(hào)為1.5,很明顯,第二配置信息版本號(hào)高于第一配置信息版本號(hào),因此,將監(jiān)控服務(wù)器200中第二配置信息版本號(hào)為1.5的埋點(diǎn)配置信息發(fā)送給第一客戶端300,進(jìn)而指示第一客戶端300根據(jù)埋點(diǎn)配置信息在待監(jiān)控應(yīng)用中查找到選定的可監(jiān)控控件,以上述的路徑表為示例,第一客戶端300在查找選定的可監(jiān)控控件的過程中,會(huì)檢查每個(gè)控件與路徑表中path的元素的對(duì)應(yīng)關(guān)系,比如id、id_name或class的繼承關(guān)系,如果做到對(duì)應(yīng)的控件,再進(jìn)一步搜索該控件的子控件,直到找到選定的可監(jiān)控控件為止。在找到選定的可監(jiān)控控件后,修改控件的AccessibilityDelegate對(duì)象,在回調(diào)方法中添加了埋點(diǎn)事件,使控件在頁面中所顯示的按鈕每次觸發(fā)點(diǎn)擊事件的同時(shí)也會(huì)觸發(fā)一次埋點(diǎn)事件,將該埋點(diǎn)事件記錄下來,其對(duì)應(yīng)的用戶數(shù)據(jù)會(huì)在下次上報(bào)數(shù)據(jù)的時(shí)候發(fā)送到服務(wù)器端。
圖5示出了根據(jù)本發(fā)明又一個(gè)實(shí)施例的監(jiān)控應(yīng)用中控件的方法600的流程圖。監(jiān)控應(yīng)用中控件的方法600適于在監(jiān)控控件系統(tǒng)100中執(zhí)行。如圖5所示,步驟S620、S640和S660是監(jiān)控應(yīng)用中控件的方法600中以監(jiān)控服務(wù)器為執(zhí)行主體的步驟,在方法500中已經(jīng)進(jìn)行了詳細(xì)描述,此處不予以贅述。
方法600始于步驟S610,在步驟S610中,第一客戶端對(duì)待監(jiān)控應(yīng)用的目標(biāo)頁面進(jìn)行截圖操作以獲得頁面截圖,將頁面截圖和目標(biāo)頁面的頁面控件信息組合生成頁面信息集合,并發(fā)送給監(jiān)控服務(wù)器,其中,目標(biāo)頁面為待監(jiān)控應(yīng)用的當(dāng)前頁面,頁面控件信息包括目標(biāo)頁面的視圖樹和控件屬性信息。對(duì)待監(jiān)控應(yīng)用的目標(biāo)頁面進(jìn)行截圖操作以獲得頁面截圖時(shí),首先獲取待監(jiān)控應(yīng)用中目標(biāo)頁面的Activity組件,通過Activity組件來獲取目標(biāo)頁面中視圖樹的根控件,調(diào)用根控件對(duì)應(yīng)的截屏函數(shù)對(duì)目標(biāo)頁面進(jìn)行屏幕截圖以獲取屏幕圖片,并將屏幕圖片保存為Bitmap類型對(duì)象,根據(jù)從屏幕圖片的Bitmap類型對(duì)象中獲取的圖片縮放比例重新調(diào)整屏幕圖片的寬高,以獲取目標(biāo)頁面的頁面截圖。在本實(shí)施例中,第一客戶端300中的待監(jiān)控應(yīng)用為移動(dòng)應(yīng)用Demo,當(dāng)移動(dòng)應(yīng)用Demo啟動(dòng)后,會(huì)先通過WebSocket向服務(wù)端請(qǐng)求連接,等待連接成功后,第一客戶端300開始執(zhí)行截圖操作。首先,獲取移動(dòng)應(yīng)用Demo中當(dāng)前頁面的Activity組件,通過該Activity組件來調(diào)用mActivity.getWindow().getDecorView().getRootView()函數(shù)來獲取當(dāng)前視圖樹的根控件,并獲取當(dāng)前屏幕的大小,通過反射調(diào)用該根控件對(duì)應(yīng)的截屏函數(shù)createSnapshot()方法對(duì)當(dāng)前頁面進(jìn)行屏幕截圖,以獲取當(dāng)前整體屏幕內(nèi)容對(duì)應(yīng)的屏幕圖片,將該屏幕圖片保存為Bitmap類型對(duì)象。如果通過上述方法沒有獲取到屏幕圖片,則調(diào)用根控件的getDrawingCache()方法來進(jìn)行獲取。在得到屏幕圖片的Bitmap類型對(duì)象后,從中獲取屏幕密度Density,根據(jù)Density計(jì)算出當(dāng)前屏幕圖片的圖片縮放比例,根據(jù)該比例重新調(diào)整屏幕圖片的寬高,從而獲取第一客戶端300當(dāng)前展示的整個(gè)界面的圖片。圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的待監(jiān)控應(yīng)用的目標(biāo)頁面的頁面截圖。如圖3所示,在移動(dòng)應(yīng)用Demo的當(dāng)前頁面的頁面截圖中,用戶通過點(diǎn)擊了“EVENTS”選項(xiàng),在其下方展示出5個(gè)可供選擇的選項(xiàng),即“EVENT_1”、“EVENT_2”、“EVENT_MAP”、“INVOKE ERROR”和“CRASH”,這5個(gè)選項(xiàng)均對(duì)應(yīng)為點(diǎn)擊控件。頁面控件信息中的視圖樹是基于截圖操作中獲取到的當(dāng)前頁面的根控件,以該根控件為起始點(diǎn)進(jìn)行子控件的查找而獲取到的,在遍歷視圖樹的過程中,會(huì)獲取到每個(gè)控件的控件屬性信息,控件屬性信息包括控件名稱、控件ID、HashCode、位置、尺寸、可見性、父子關(guān)系和可點(diǎn)擊性中的至少一種,最終將視圖樹及各控件對(duì)應(yīng)的控件屬性信息組織成Json格式以形成頁面控件信息,和頁面截圖一同生成頁面信息集合后通過WebSocket發(fā)送給監(jiān)控服務(wù)器200。
隨后,進(jìn)入步驟S620,監(jiān)控服務(wù)器接收第一客戶端發(fā)送的頁面信息集合,基于控件屬性信息,將視圖樹轉(zhuǎn)化為渲染樹,并生成可監(jiān)控控件的標(biāo)記信息,組合頁面截圖、渲染樹、頁面控件信息和標(biāo)記信息來生成渲染信息集合,將渲染信息集合發(fā)送給第二客戶端。在將視圖樹轉(zhuǎn)化為渲染樹時(shí),是先從控件屬性信息中獲取控件的HashCode的值,再根據(jù)該控件的HashCode的值,將視圖樹轉(zhuǎn)化為渲染樹。在本實(shí)施例中,監(jiān)控服務(wù)器200首先遍歷視圖樹中的所有元素,即從根控件開始,逐一向下查找子控件,在上述查找過程中,在各個(gè)父控件的控件屬性信息中父子關(guān)系這一項(xiàng),即Subviews字段里,記錄當(dāng)前控件的所有子控件的HashCode的值,再根據(jù)所有控件的HashCode的值來組織生成渲染樹。同時(shí),根據(jù)各個(gè)控件的控件屬性信息中的可點(diǎn)擊性,判斷出該控件是否可監(jiān)控,只有當(dāng)可點(diǎn)擊性為True時(shí),其對(duì)應(yīng)的控件才是可監(jiān)控的。最后,將上述可監(jiān)控控件的可點(diǎn)擊性和該控件在當(dāng)前頁面中的位置組合生成標(biāo)記信息,并與頁面截圖、渲染樹、頁面控件信息進(jìn)行組合生成渲染信息集合,再將渲染信息集合發(fā)送給第二客戶端400。接下來,在步驟S630中,第二客戶端根據(jù)接收到的渲染信息集合,將標(biāo)記出可監(jiān)控控件的目標(biāo)頁面渲染出來,獲取開發(fā)人員選定的可監(jiān)控控件及其對(duì)應(yīng)的監(jiān)控事件信息并發(fā)送給監(jiān)控服務(wù)器。首先,第二客戶端從渲染信息集合中獲取頁面截圖、渲染樹、頁面控件信息和標(biāo)記信息,再根據(jù)頁面截圖、渲染樹、頁面控件信息和標(biāo)記信息,將標(biāo)記出可監(jiān)控控件的目標(biāo)頁面渲染出來。在本實(shí)施例中,第二客戶端400中安裝有一個(gè)適于根據(jù)渲染信息組合渲染頁面的渲染應(yīng)用,這個(gè)渲染應(yīng)用可以為瀏覽器,在第二客戶端400中的渲染應(yīng)用根據(jù)渲染信息集合渲染頁面時(shí),會(huì)利用頁面控件信息中各控件的位置和標(biāo)記信息,在渲染出的目標(biāo)頁面上將可監(jiān)控控件進(jìn)行標(biāo)記,從而顯示出標(biāo)記有可監(jiān)控控件的目標(biāo)頁面。在實(shí)際處理過程成,還可以通過不同顏色的矩形框?qū)⒖杀O(jiān)控控件進(jìn)行進(jìn)一步標(biāo)記,以分辨出該可監(jiān)控控件的當(dāng)前狀態(tài),如黃色矩形框標(biāo)記的控件代表當(dāng)前控件可以被監(jiān)控,但尚未被開發(fā)人員選定,藍(lán)色矩形框標(biāo)記的控件代表當(dāng)前可監(jiān)控控件已處于被監(jiān)控中的狀態(tài),綠色矩形框標(biāo)出的控件代表當(dāng)前可監(jiān)控控件已經(jīng)被選定并且準(zhǔn)備添加監(jiān)控事件。圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的顯示于第二客戶端中的根據(jù)渲染信息集合渲染的標(biāo)記出可監(jiān)控控件的目標(biāo)頁面。如圖4所示,在第二客戶端400中所顯示的頁面中,“EVENT_1”這個(gè)點(diǎn)擊控件被黃色矩形框標(biāo)記,說明“EVENT_1”可以被監(jiān)控,而“EVENT_2”這個(gè)點(diǎn)擊控件被綠色矩形框標(biāo)記,說明“EVENT_2”已經(jīng)被選定并且準(zhǔn)備添加監(jiān)控事件。需要說明的是,由于附圖中無法顯示彩色,標(biāo)記“EVENT_1”和“EVENT_2”的矩形框均以灰色代替表示。第二客戶端400獲取開發(fā)人員選定的可監(jiān)控控件,比如開發(fā)人員在上述渲染出的頁面中選定了“CRASH”,并對(duì)“CRASH”配置對(duì)應(yīng)的監(jiān)控事件別名作為監(jiān)控事件信息,再將“CRASH”及其對(duì)應(yīng)的監(jiān)控事件信息發(fā)送給監(jiān)控服務(wù)器200。
當(dāng)已選定的可監(jiān)控控件及其對(duì)應(yīng)的監(jiān)控事件信息發(fā)送給監(jiān)控服務(wù)器后,執(zhí)行步驟S640,監(jiān)控服務(wù)器根據(jù)接收到的已選定的可監(jiān)控控件及其對(duì)應(yīng)的監(jiān)控事件信息,生成埋點(diǎn)配置信息。在本實(shí)施例中,埋點(diǎn)配置信息即為路徑表,包含有可監(jiān)控控件的控件ID、控件名稱、路徑信息等,具體可參見方法500中步驟550給出的路徑表示例,其中,id表示監(jiān)控服務(wù)器200為本次監(jiān)控事件生成的監(jiān)控事件ID,name表示已選定的可監(jiān)控控件對(duì)應(yīng)的監(jiān)控事件信息,即為開發(fā)人員在第二客戶端400所渲染出的頁面中對(duì)已選定的可監(jiān)控控件配置的監(jiān)控事件別名,type表示要監(jiān)控的事件類型,其值為“click”說明要監(jiān)控的事件類型為點(diǎn)擊事件,path表示路徑信息,是查找控件所必須的信息,path中從上到下依次為視圖層級(jí)結(jié)構(gòu)中的最頂層到具體選定的控件。如path中第一個(gè)元素"id":16908290,代表當(dāng)前頁面中的根控件的id,"id_name":"button_test2"元素代表選定的可監(jiān)控控件的控件ID,是開發(fā)人員在移動(dòng)應(yīng)用開發(fā)階段設(shè)置的值。
在步驟S650中,第一客戶端向監(jiān)控服務(wù)器發(fā)送埋點(diǎn)配置信息請(qǐng)求。在本實(shí)施例中,第一客戶端300向監(jiān)控服務(wù)器200發(fā)送埋點(diǎn)配置信息請(qǐng)求,埋點(diǎn)配置信息請(qǐng)求中可包括第一配置信息版本號(hào),第一配置信息版本表示第一客戶端300中當(dāng)前埋點(diǎn)配置信息的版本。
隨后,進(jìn)入步驟S660,監(jiān)控服務(wù)器根據(jù)接收到的埋點(diǎn)配置信息請(qǐng)求,將埋點(diǎn)配置信息發(fā)送給第一客戶端。首先,從接收到的第一客戶端發(fā)送的埋點(diǎn)配置信息請(qǐng)求中獲取第一配置信息版本號(hào),再獲取監(jiān)控服務(wù)器中埋點(diǎn)配置信息的第二配置信息版本號(hào),若第二配置信息版本號(hào)高于第一配置信息版本號(hào),則將埋點(diǎn)配置信息發(fā)送給第一客戶端,若第二配置信息版本號(hào)不高于第一配置信息版本號(hào),則向第一客戶端發(fā)送暫不更新埋點(diǎn)配置信息的通知。在本實(shí)施例中,第一客戶端300發(fā)送的埋點(diǎn)配置信息請(qǐng)求中包括有第一配置信息版本號(hào),其值為1.3,而監(jiān)控服務(wù)器200中埋點(diǎn)配置信息的第二配置信息版本號(hào)為1.5,很明顯,第二配置信息版本號(hào)高于第一配置信息版本號(hào),因此,將第二配置信息版本號(hào)為1.5的埋點(diǎn)配置信息發(fā)送給第一客戶端300。
最后,在步驟S670中,第一客戶端根據(jù)接收到的埋點(diǎn)配置信息,在待監(jiān)控應(yīng)用中查找到選定的可監(jiān)控控件進(jìn)行埋點(diǎn)處理以便監(jiān)控。首先,根據(jù)接收到的埋點(diǎn)配置信息,對(duì)待監(jiān)控應(yīng)用中的控件進(jìn)行匹配以查找選定的可監(jiān)控控件,再向查找到的選定的可監(jiān)控控件添加埋點(diǎn)事件以便監(jiān)控。在本實(shí)施例中,第一客戶端300在查找選定的可監(jiān)控控件的過程中,會(huì)檢查每個(gè)控件與路徑表中path的元素的對(duì)應(yīng)關(guān)系,比如id、id_name或class的繼承關(guān)系,如果做到對(duì)應(yīng)的控件,再進(jìn)一步搜索該控件的子控件,直到找到選定的可監(jiān)控控件為止。在找到選定的可監(jiān)控控件后,修改控件的AccessibilityDelegate對(duì)象,在回調(diào)方法中添加了埋點(diǎn)事件,使控件在頁面中所顯示的按鈕每次觸發(fā)點(diǎn)擊事件的同時(shí)也會(huì)觸發(fā)一次埋點(diǎn)事件,將該埋點(diǎn)事件記錄下來,其對(duì)應(yīng)的用戶數(shù)據(jù)會(huì)在下次上報(bào)數(shù)據(jù)的時(shí)候發(fā)送到服務(wù)器端。
圖6示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的監(jiān)控服務(wù)器200的示意圖。如圖6所示,監(jiān)控服務(wù)器200分別與第一客戶端300和第二客戶端400通信連接,包括第一接收模塊210、信息處理模塊220、第一組合模塊230、第一發(fā)送模塊240、生成模塊250、第二接收模塊260和第二發(fā)送模塊270。
第一接收模塊210適于接收第一客戶端300發(fā)送的與待監(jiān)控應(yīng)用中目標(biāo)頁面相關(guān)的頁面數(shù)據(jù),目標(biāo)頁面為待監(jiān)控應(yīng)用的當(dāng)前頁面,頁面數(shù)據(jù)包括頁面截圖和頁面控件信息,頁面控件信息包括目標(biāo)頁面的視圖樹和控件屬性信息。其中,控件屬性信息包括控件名稱、控件ID、HashCode、位置、尺寸、可見性、父子關(guān)系和可點(diǎn)擊性中的至少一種。
信息處理模塊220與第一接收模塊210相連,適于基于第一接收模塊210所接收到控件屬性信息,將視圖樹轉(zhuǎn)化為渲染樹,并生成可監(jiān)控控件的標(biāo)記信息,進(jìn)一步適于從控件屬性信息中獲取控件的HashCode的值,根據(jù)控件的HashCode的值,將視圖樹轉(zhuǎn)化為渲染樹。
第一組合模塊230分別與第一接收模塊210和信息處理模塊220相連,適于組合頁面截圖、渲染樹、頁面控件信息和標(biāo)記信息來生成渲染信息集合,其中頁面截圖和頁面控件信息從第一接收模塊210中獲取,渲染樹和標(biāo)記信息從信息處理模塊220中獲取。
第一發(fā)送模塊240與第一組合模塊230相連,適于將渲染信息集合發(fā)送給第二客戶端400,并指示第二客戶端400根據(jù)渲染信息集合將標(biāo)記出可監(jiān)控控件的目標(biāo)頁面渲染出來。
生成模塊250適于根據(jù)接收到的第二客戶端400發(fā)送的已選定的可監(jiān)控控件及其對(duì)應(yīng)的監(jiān)控事件信息,生成埋點(diǎn)配置信息,進(jìn)一步適于向接收到的第二客戶端400發(fā)送的已選定的可監(jiān)控控件添加一條監(jiān)控事件,對(duì)監(jiān)控事件分配一個(gè)對(duì)應(yīng)的監(jiān)控事件ID,根據(jù)已選定的可監(jiān)控控件及其控件屬性信息,利用視圖樹生成查找該控件的路徑信息,將已選定的可監(jiān)控控件的監(jiān)控事件信息、監(jiān)控事件ID和路徑信息組合生成埋點(diǎn)配置信息。
第二接收模塊260適于接收第一客戶端300發(fā)送的埋點(diǎn)配置信息請(qǐng)求。
第二發(fā)送模塊270分別與生成模塊250和第二接收模塊260相連,適于在第二接收模塊260接收到埋點(diǎn)配置信息請(qǐng)求后,將生成模塊250所生成的埋點(diǎn)配置信息發(fā)送給第一客戶端300,并指示第一客戶端300根據(jù)埋點(diǎn)配置信息在待監(jiān)控應(yīng)用中查找到選定的可監(jiān)控控件進(jìn)行埋點(diǎn)處理以便監(jiān)控。第二發(fā)送模塊270進(jìn)一步適于從第二接收模塊260接收到的第一客戶端300發(fā)送的埋點(diǎn)配置信息請(qǐng)求中,獲取第一配置信息版本號(hào),獲取監(jiān)控服務(wù)器200中埋點(diǎn)配置信息的第二配置信息版本號(hào),當(dāng)?shù)诙渲眯畔姹咎?hào)高于第一配置信息版本號(hào)時(shí),將埋點(diǎn)配置信息發(fā)送給第一客戶端300,當(dāng)?shù)诙渲眯畔姹咎?hào)不高于第一配置信息版本號(hào)時(shí),向第一客戶端300發(fā)送暫不更新埋點(diǎn)配置信息的通知。
圖7示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的第一監(jiān)控處理裝置700的示意圖。如圖7所示,第一監(jiān)控處理裝置700駐留在第一客戶端300中,并與監(jiān)控服務(wù)器200通信連接,其包括截圖模塊710、第二組合模塊720、第三發(fā)送模塊730、第四發(fā)送模塊740和埋點(diǎn)監(jiān)控模塊750。
截圖模塊710適于對(duì)第一客戶端300中待監(jiān)控應(yīng)用的目標(biāo)頁面進(jìn)行截圖操作以獲得頁面截圖,進(jìn)一步適于獲取待監(jiān)控控件中目標(biāo)頁面的Activity組件,通過Activity組件來獲取目標(biāo)頁面中視圖樹的根控件,調(diào)用根控件對(duì)應(yīng)的截屏函數(shù)對(duì)目標(biāo)頁面進(jìn)行屏幕截圖以獲取屏幕圖片,并將屏幕圖片保存為Bitmap類型對(duì)象,根據(jù)從屏幕圖片的Bitmap類型對(duì)象中獲取的圖片縮放比例重新調(diào)整屏幕圖片的寬高,以獲取目標(biāo)頁面的頁面截圖。
第二組合模塊720與截圖模塊710相連,適于將截圖模塊710中獲取的頁面截圖和目標(biāo)頁面的頁面控件信息組合生成頁面信息集合。
第三發(fā)送模塊730與第二組合模塊720相連,適于向監(jiān)控服務(wù)器200發(fā)送第二組合模塊720組合生成的頁面信息集合。
第四發(fā)送模塊740適于向監(jiān)控服務(wù)器200發(fā)送埋點(diǎn)配置信息請(qǐng)求。
埋點(diǎn)監(jiān)控模塊750適于根據(jù)從監(jiān)控服務(wù)器200接收到的埋點(diǎn)配置信息,在待監(jiān)控應(yīng)用中查找到選定的可監(jiān)控控件進(jìn)行埋點(diǎn)處理以便監(jiān)控,進(jìn)一步適于根據(jù)接收到的埋點(diǎn)配置信息,對(duì)待監(jiān)控應(yīng)用中的控件進(jìn)行匹配以查找選定的可監(jiān)控控件,向查找到的選定的可監(jiān)控控件添加埋點(diǎn)事件以便監(jiān)控。
圖8示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的第二監(jiān)控處理裝置800的示意圖。如圖8所示,第二監(jiān)控處理裝置800駐留在第二客戶端400中,并與監(jiān)控服務(wù)器200通信連接,其包括渲染模塊810、獲取模塊820和第五發(fā)送模塊830。
渲染模塊810適于根據(jù)接收到的監(jiān)控服務(wù)器200發(fā)送的渲染信息集合,將標(biāo)記出可監(jiān)控控件的目標(biāo)頁面渲染出來。
獲取模塊820適于獲取開發(fā)人員在第二客戶端400所渲染出的標(biāo)記出可監(jiān)控控件的目標(biāo)頁面中、選定的可監(jiān)控控件及其對(duì)應(yīng)的監(jiān)控事件信息;
第五發(fā)送模塊830與獲取模塊820相連,適于向監(jiān)控服務(wù)器200發(fā)送從獲取模塊820中獲取的已選定的可監(jiān)控控件及其對(duì)應(yīng)的監(jiān)控事件信息。
關(guān)于監(jiān)控應(yīng)用中控件的具體步驟以及實(shí)施例,在基于圖1~5的描述中已經(jīng)詳細(xì)公開,此處不再贅述。
現(xiàn)有的監(jiān)控應(yīng)用中控件的方法,多是由開發(fā)人員人工地定義控件所對(duì)應(yīng)的統(tǒng)計(jì)邏輯,并將該統(tǒng)計(jì)邏輯寫入該控件對(duì)應(yīng)的代碼里,當(dāng)應(yīng)用功能升級(jí)時(shí),需要重新定義埋點(diǎn)邏輯并編寫相應(yīng)的埋點(diǎn)代碼,費(fèi)時(shí)費(fèi)力且容易出錯(cuò)。根據(jù)本發(fā)明的監(jiān)控應(yīng)用中控件的技術(shù)方案,將待監(jiān)控應(yīng)用中目標(biāo)頁面渲染到可供開發(fā)人員使用的終端設(shè)備中,根據(jù)開發(fā)人員對(duì)可監(jiān)控控件的選定,在監(jiān)控服務(wù)器之中生成埋點(diǎn)配置信息,從而實(shí)現(xiàn)了待監(jiān)控控件與外部配置文件的關(guān)聯(lián),不需要在應(yīng)用源文件中為待監(jiān)控控件編寫埋點(diǎn)監(jiān)控代碼,而是通過監(jiān)控服務(wù)器來實(shí)現(xiàn)對(duì)控件的監(jiān)聽。當(dāng)用戶使用應(yīng)用時(shí),涉及到與待監(jiān)控控件相關(guān)的操作一旦觸發(fā),監(jiān)控服務(wù)器即可實(shí)時(shí)采集用戶行為數(shù)據(jù)。上述監(jiān)控應(yīng)用控件的方法將埋點(diǎn)監(jiān)控代碼與應(yīng)用源代碼分離,減輕了開發(fā)人員的編碼負(fù)擔(dān),隨時(shí)埋點(diǎn),即時(shí)生效。同時(shí),埋點(diǎn)配置信息在服務(wù)器端進(jìn)行配置,在更新配置信息時(shí),無需對(duì)應(yīng)用本身進(jìn)行更新。
B8.如B7所述的方法,所述第一客戶端對(duì)待監(jiān)控應(yīng)用的目標(biāo)頁面進(jìn)行截圖操作以獲取頁面截圖包括:
獲取待監(jiān)控應(yīng)用中目標(biāo)頁面的Activity組件;
通過所述Activity組件來獲取目標(biāo)頁面中視圖樹的根控件;
調(diào)用所述根控件對(duì)應(yīng)的截屏函數(shù)對(duì)目標(biāo)頁面進(jìn)行屏幕截圖以獲取屏幕圖片,并將所述屏幕圖片保存為Bitmap類型對(duì)象;
根據(jù)從屏幕圖片的Bitmap類型對(duì)象中獲取的圖片縮放比例重新調(diào)整屏幕圖片的寬高,以獲取目標(biāo)頁面的頁面截圖。
B9.如B7或8所述的方法,所述第二客戶端根據(jù)接收到的所述渲染信息集合,將標(biāo)記出可監(jiān)控控件的目標(biāo)頁面渲染出來包括:
從所述渲染信息集合中獲取所述頁面截圖、渲染樹、頁面控件信息和標(biāo)記信息;
根據(jù)所述所述頁面截圖、渲染樹、頁面控件信息和標(biāo)記信息,將標(biāo)記出可監(jiān)控控件的目標(biāo)頁面渲染出來。
B10.如B7-9中任一項(xiàng)所述的方法,所述第一客戶端根據(jù)接收到的埋點(diǎn)配置信息,在待監(jiān)控應(yīng)用中查找到選定的可監(jiān)控控件進(jìn)行埋點(diǎn)處理以便監(jiān)控包括:
根據(jù)接收到的埋點(diǎn)配置信息,對(duì)待監(jiān)控應(yīng)用中的控件進(jìn)行匹配以查找選定的可監(jiān)控控件;
向查找到的選定的可監(jiān)控控件添加埋點(diǎn)事件以便監(jiān)控。
C12.如C11所述的監(jiān)控服務(wù)器,其中所述控件屬性信息包括控件名稱、控件ID、HashCode、位置、尺寸、可見性、父子關(guān)系和可點(diǎn)擊性中的至少一種。
C13.如C12所述的監(jiān)控服務(wù)器,所述信息處理模塊進(jìn)一步適于:
從所述控件屬性信息中獲取控件的HashCode的值;
根據(jù)所述控件的HashCode的值,將所述視圖樹轉(zhuǎn)化為渲染樹。
C14.如C11-13中任一項(xiàng)所述的監(jiān)控服務(wù)器,所述生成模塊進(jìn)一步適于:
向接收到的第二客戶端發(fā)送的已選定的可監(jiān)控控件添加一條監(jiān)控事件;
對(duì)所述監(jiān)控事件分配一個(gè)對(duì)應(yīng)的監(jiān)控事件ID;
根據(jù)已選定的可監(jiān)控控件及其控件屬性信息,利用所述視圖樹生成查找該控件的路徑信息;
將所述已選定的可監(jiān)控控件的監(jiān)控事件信息、監(jiān)控事件ID和路徑信息組合生成埋點(diǎn)配置信息。
C15.如C11-14中任一項(xiàng)所述的監(jiān)控服務(wù)器,所述第二發(fā)送模塊進(jìn)一步適于:
從接收到的第一客戶端發(fā)送的埋點(diǎn)配置信息請(qǐng)求中獲取第一配置信息版本號(hào);
獲取監(jiān)控服務(wù)器中埋點(diǎn)配置信息的第二配置信息版本號(hào);
當(dāng)所述第二配置信息版本號(hào)高于所述第一配置信息版本號(hào)時(shí),將所述埋點(diǎn)配置信息發(fā)送給第一客戶端。
C16.如C15所述的監(jiān)控服務(wù)器,所述第二發(fā)送模塊進(jìn)一步適于:
當(dāng)所述第二配置信息版本號(hào)不高于所述第一配置信息版本號(hào)時(shí),向第一客戶端發(fā)送暫不更新埋點(diǎn)配置信息的通知。
D18.如D17所述的監(jiān)控控件系統(tǒng),所述截圖模塊進(jìn)一步適于:
獲取所述待監(jiān)控控件中目標(biāo)頁面的Activity組件;
通過所述Activity組件來獲取目標(biāo)頁面中視圖樹的根控件;
調(diào)用所述根控件對(duì)應(yīng)的截屏函數(shù)對(duì)目標(biāo)頁面進(jìn)行屏幕截圖以獲取屏幕圖片,并將所述屏幕圖片保存為Bitmap類型對(duì)象;
根據(jù)從屏幕圖片的Bitmap類型對(duì)象中獲取的圖片縮放比例重新調(diào)整屏幕圖片的寬高,以獲取目標(biāo)頁面的頁面截圖。
D19.如D17或18所述的監(jiān)控控件系統(tǒng),所述埋點(diǎn)監(jiān)控模塊進(jìn)一步適于:
根據(jù)接收到的埋點(diǎn)配置信息,對(duì)待監(jiān)控應(yīng)用中的控件進(jìn)行匹配以查找選定的可監(jiān)控控件;
向查找到的選定的可監(jiān)控控件添加埋點(diǎn)事件以便監(jiān)控。
在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下被實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域那些技術(shù)人員應(yīng)當(dāng)理解在本文所公開的示例中的設(shè)備的模塊或單元或組件可以布置在如該實(shí)施例中所描述的設(shè)備中,或者可替換地可以定位在與該示例中的設(shè)備不同的一個(gè)或多個(gè)設(shè)備中。前述示例中的模塊可以組合為一個(gè)模塊或者此外可以分成多個(gè)子模塊。
本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。
此外,所述實(shí)施例中的一些在此被描述成可以由計(jì)算機(jī)系統(tǒng)的處理器或者由執(zhí)行所述功能的其它裝置實(shí)施的方法或方法元素的組合。因此,具有用于實(shí)施所述方法或方法元素的必要指令的處理器形成用于實(shí)施該方法或方法元素的裝置。此外,裝置實(shí)施例的在此所述的元素是如下裝置的例子:該裝置用于實(shí)施由為了實(shí)施該發(fā)明的目的的元素所執(zhí)行的功能。
如在此所使用的那樣,除非另行規(guī)定,使用序數(shù)詞“第一”、“第二”、“第三”等等來描述普通對(duì)象僅僅表示涉及類似對(duì)象的不同實(shí)例,并且并不意圖暗示這樣被描述的對(duì)象必須具有時(shí)間上、空間上、排序方面或者以任意其它方式的給定順序。
盡管根據(jù)有限數(shù)量的實(shí)施例描述了本發(fā)明,但是受益于上面的描述,本技術(shù)領(lǐng)域內(nèi)的技術(shù)人員明白,在由此描述的本發(fā)明的范圍內(nèi),可以設(shè)想其它實(shí)施例。此外,應(yīng)當(dāng)注意,本說明書中使用的語言主要是為了可讀性和教導(dǎo)的目的而選擇的,而不是為了解釋或者限定本發(fā)明的主題而選擇的。因此,在不偏離所附權(quán)利要求書的范圍和精神的情況下,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說許多修改和變更都是顯而易見的。對(duì)于本發(fā)明的范圍,對(duì)本發(fā)明所做的公開是說明性的,而非限制性的,本發(fā)明的范圍由所附權(quán)利要求書限定。