付費(fèi)下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】如何用代碼分析活躍用戶數(shù)量減少的原因?
最近有網(wǎng)友發(fā)現(xiàn)友盟的數(shù)據(jù)統(tǒng)計(jì)里面,活躍用戶的數(shù)量有點(diǎn)不大對勁,跟啟動(dòng)次數(shù)相比,嚴(yán)重偏少。sdk的使用方式?jīng)]啥好說的,就那么簡單幾步,應(yīng)該不會(huì)是sdk設(shè)置的問題。于是就從友盟關(guān)于活躍用戶的定義開始,著手分析這個(gè)問題?;钴S用戶的定義:打開應(yīng)用的用戶即為活躍用戶,不考慮用戶的使用情況。從上面的文章,了解到Umeng里面對用戶的定義:友盟將一個(gè)獨(dú)立的設(shè)備視為一個(gè)用戶,然而每個(gè)獨(dú)立的用戶是通過UMID來進(jìn)行唯一標(biāo)識(shí)的。然而UMID又是神馬鬼東西?簡單來說就是友盟會(huì)在第一次安裝的時(shí)候生成一個(gè)UMID,當(dāng)ID生成以后友盟會(huì)盡量保證這個(gè)UMID不會(huì)發(fā)生變化。在應(yīng)用對應(yīng)的存儲(chǔ)目錄下面,我們可以找到這個(gè)UMID的身影:ngeIdentity.json這個(gè)文件來說,cat一下里面的內(nèi)容,應(yīng)該可以看到:筆者發(fā)現(xiàn)公司里多臺(tái)設(shè)備的UMID都居然是一個(gè)相同的UMID值,WTF?。?!也同樣是上面這串神秘的代碼:528c8e6cd4a3c6598999a0e9df15ad32。這個(gè)時(shí)候就需要查一下UMID的生成方式了,從上面那篇UMID方案解析的文章中,可以了解到Android系統(tǒng)中與UMID相關(guān)的幾個(gè)ID:imei、mac地址、android_id。有了這些關(guān)鍵點(diǎn),我們就可以開始去反編譯友盟的sdk包并進(jìn)行下一步的搜索了(這里反編譯了友盟最新的jar包:umeng-analytics-v6.0.1.jar)。。。果然,使用上面這幾個(gè)關(guān)鍵字,很快就搜索到了一些關(guān)鍵的代碼:段代碼邏輯比較簡單(由于筆者所調(diào)試系統(tǒng)<23,故省略了一部分代碼),首先TelephonyManager.getDeviceId()獲取imei,若取不到則調(diào)用u(context)函數(shù)獲取下一個(gè)字符串,若再取不到,則獲取android_id。其實(shí)這里可以猜測到,u()中返回的字符串應(yīng)該就是mac地址,我們來看下函數(shù)u()的邏輯代碼:果然,函數(shù)u(context)就是返回wifi的mac地址的。那么,回到剛剛的那個(gè)問題,到底那串神秘的UMID是528c8e6cd4a3c6598999a0e9df15ad32根據(jù)啥來生成的?看著這格式有點(diǎn)像md5。然后把機(jī)器上的imei、mac地址、android_id都打印了出來:突然發(fā)現(xiàn)公司設(shè)備上打印出來的mac地址都是00:00:00:00:00:00(因?yàn)槟居衱ifi模塊,只有ethernet模塊,囧!?。。瓕⑵滢D(zhuǎn)為md5,正是上面的串代碼??墒?,為啥當(dāng)mac地址是00:00:00:00:00:00的時(shí)候,不去選擇android_id呢?回去仔細(xì)看代碼,發(fā)現(xiàn)友盟用的是坑爹的TextUtils.isEmpty()來判斷mac地址的有效性,跪了,上面那串明明就是無效的mac地址好么?只能說代碼寫得不嚴(yán)謹(jǐn)。。。至此,代碼及原因分析完畢。當(dāng)一些Android平板設(shè)備統(tǒng)一返回相同的mac地址,如00:00:00:00:00:00時(shí)(有可能是沒有wifi模塊;也有可能是山寨機(jī)出現(xiàn)這種情況的時(shí)候),友盟將會(huì)將其數(shù)據(jù)識(shí)別成同一用戶,并且將會(huì)造成嚴(yán)重的MAC地址漂移。作為比較,我們來看一下友盟的競爭對手shareinstall的渠道統(tǒng)計(jì)代碼!首先,我們開看看shareinstall的web集成步驟:<!--建議直接引用下面的js鏈接,以便得到最及時(shí)的更新,我們將持續(xù)跟蹤各種主流瀏覽器的變化,為您提供最好的服務(wù)--><scripttype="text/javascript"src="http:///js/page/shareinstall.min.js"></script><scripttype="text/javascript">//錯(cuò)誤處理:確保app始終能正常的安裝vartimer=setTimeout(function(){varbutton=document.getElementById("downloadButton");button.style.visibility="visible";button.onclick=function(){varua=navigator.userAgent;if(ua.indexOf("MicroMessenger/")>-1){//微信中顯示遮罩提示在瀏覽器中打開或進(jìn)入應(yīng)用寶vardiv=document.createElement("div");div.innerHTML="<divstyle="font-size:2rem;color:#fff;text-align:center;"+"position:fixed;left:0;top:0;background:rgba(0,0,0,0.5);filter:alpha(opacity=50);"+"width:100%;height:100%;z-index:10000;">點(diǎn)擊右上角在瀏覽器中打開</div>";document.body.appendChild(div);}else{if(ua.indexOf("Android")>-1){//直接下載apk//window.location="apk地址";}elseif(ua.indexOf("iPhone")>-1||ua.indexOf("iPad")>-1||ua.indexOf("iPod")>-1){//直接進(jìn)入appstore//window.location="appstore地址";}}}},5000);//shareinstall初始化,初始化時(shí)將與shareinstall服務(wù)器交互,應(yīng)盡可能早的調(diào)用
/*web頁面向app傳遞的json數(shù)據(jù)(jsonstring/jsObject),應(yīng)用被拉起或是首次安裝時(shí),通過相應(yīng)的
android/iosapi可以獲取此數(shù)據(jù)*/
vardata=ShareInstall.parseUrlParams();//shareinstall.js中提供的工具函數(shù),解析url中的所有查詢參數(shù)
newShareInstall({
appKey:'F6BKAREBHF22EB',
onready:function(){
//shareinstall已成功回調(diào),清除定時(shí)器
clearTimeout(timer);
timer=null;
varm=this,button=document.getElementById("downloadButton");
button.style.visibility="visible";
/*用戶點(diǎn)擊某個(gè)按鈕時(shí)(假定按鈕id為downloadButton),安裝app*/
button.onclick=function(){
m.wakeupOrInstall();
}
}
},data);</script>shareinstall提供完整的javascriptapi,方便Web開發(fā)者實(shí)現(xiàn)完全自主的設(shè)計(jì)。再開看看shareinstall的代碼配置(測試):如果做測試,獲取參數(shù),則必須在Appdelegate.h加上如下測試代碼。#pragmamark將oc數(shù)據(jù)類型轉(zhuǎn)成NSString-(NSString*)DataTOjsonString:(id)object{if(!object){returnnull;}NSString*jsonString=null;
NSError*error;
NSData*jsonData=[NSJSONSerializationdataWithJSONObject:object
options:NSJSONWritingPrettyPrinted
error:&error];
if(!jsonData){
NSLog(@"Gotanerror:%@",error);
}else{jsonString=[[NSStringalloc]initWithData:jsonDataencoding:NSUTF8StringEncoding];}returnjsonString;}使用Shareinstall控制中心提供的渠道統(tǒng)計(jì)時(shí),在App用戶注冊完成后調(diào)用,可以統(tǒng)計(jì)渠道注冊量。警告:必須在注冊成功的時(shí)調(diào)用[ShareInstallSDKreportRegister]方法,否則可能導(dǎo)致注冊統(tǒng)計(jì)不準(zhǔn)。由上比較得知,shareinstall與友盟最大的優(yōu)勝點(diǎn)就在于首先實(shí)現(xiàn)完全自主。這很大一部分是因?yàn)?/p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 煤直接液化操作工安全宣貫競賽考核試卷含答案
- 海底管道保溫工標(biāo)準(zhǔn)化競賽考核試卷含答案
- ??诰羰课枧嘤?xùn)課件
- 景泰藍(lán)磨藍(lán)工崗前理論考核試卷含答案
- 化妝品制造工崗前理論知識(shí)考核試卷含答案
- 老年人入住手續(xù)辦理制度
- 浪琴手表培訓(xùn)課件
- 酒店財(cái)務(wù)會(huì)計(jì)制度
- 超市商品庫存預(yù)警制度
- 預(yù)拌混凝土生產(chǎn)線技術(shù)改造項(xiàng)目環(huán)境影響報(bào)告表
- 泰康入職測評題庫及答案
- 天津市河?xùn)|區(qū)2026屆高一上數(shù)學(xué)期末考試試題含解析
- 廣告法培訓(xùn)教學(xué)課件
- DB37-T6005-2026人為水土流失風(fēng)險(xiǎn)分級(jí)評價(jià)技術(shù)規(guī)范
- 彈性工作制度規(guī)范
- 2025年度病案管理科主治醫(yī)師工作總結(jié)及2026年工作規(guī)劃
- 仁愛科普版(2024)八年級(jí)上冊英語Unit1~Unit6補(bǔ)全對話練習(xí)題(含答案)
- 腎寶膠囊產(chǎn)品課件
- 2026河南安陽市兵役登記參考考試試題及答案解析
- Unit 1 Time to Relax Section B(1a-2c)教學(xué)課件 人教新教材2024版八年級(jí)英語下冊
- 買車背戶協(xié)議書
評論
0/150
提交評論