


下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】如何用代碼分析活躍用戶(hù)數(shù)量減少的原因?
最近有網(wǎng)友發(fā)現(xiàn)友盟的數(shù)據(jù)統(tǒng)計(jì)里面,活躍用戶(hù)的數(shù)量有點(diǎn)不大對(duì)勁,跟啟動(dòng)次數(shù)相比,嚴(yán)重偏少。sdk的使用方式?jīng)]啥好說(shuō)的,就那么簡(jiǎn)單幾步,應(yīng)該不會(huì)是sdk設(shè)置的問(wèn)題。于是就從友盟關(guān)于活躍用戶(hù)的定義開(kāi)始,著手分析這個(gè)問(wèn)題。活躍用戶(hù)的定義:打開(kāi)應(yīng)用的用戶(hù)即為活躍用戶(hù),不考慮用戶(hù)的使用情況。從上面的文章,了解到Umeng里面對(duì)用戶(hù)的定義:友盟將一個(gè)獨(dú)立的設(shè)備視為一個(gè)用戶(hù),然而每個(gè)獨(dú)立的用戶(hù)是通過(guò)UMID來(lái)進(jìn)行唯一標(biāo)識(shí)的。然而UMID又是神馬鬼東西?簡(jiǎn)單來(lái)說(shuō)就是友盟會(huì)在第一次安裝的時(shí)候生成一個(gè)UMID,當(dāng)ID生成以后友盟會(huì)盡量保證這個(gè)UMID不會(huì)發(fā)生變化。在應(yīng)用對(duì)應(yīng)的存儲(chǔ)目錄下面,我們可以找到這個(gè)UMID的身影:ngeIdentity.json這個(gè)文件來(lái)說(shuō),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),我們就可以開(kāi)始去反編譯友盟的sdk包并進(jìn)行下一步的搜索了(這里反編譯了友盟最新的jar包:umeng-analytics-v6.0.1.jar)。。。果然,使用上面這幾個(gè)關(guān)鍵字,很快就搜索到了一些關(guān)鍵的代碼:段代碼邏輯比較簡(jiǎn)單(由于筆者所調(diào)試系統(tǒng)<23,故省略了一部分代碼),首先TelephonyManager.getDeviceId()獲取imei,若取不到則調(diào)用u(context)函數(shù)獲取下一個(gè)字符串,若再取不到,則獲取android_id。其實(shí)這里可以猜測(cè)到,u()中返回的字符串應(yīng)該就是mac地址,我們來(lái)看下函數(shù)u()的邏輯代碼:果然,函數(shù)u(context)就是返回wifi的mac地址的。那么,回到剛剛的那個(gè)問(wèn)題,到底那串神秘的UMID是528c8e6cd4a3c6598999a0e9df15ad32根據(jù)啥來(lái)生成的?看著這格式有點(diǎn)像md5。然后把機(jī)器上的imei、mac地址、android_id都打印了出來(lái):突然發(fā)現(xiàn)公司設(shè)備上打印出來(lái)的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()來(lái)判斷mac地址的有效性,跪了,上面那串明明就是無(wú)效的mac地址好么?只能說(shuō)代碼寫(xiě)得不嚴(yán)謹(jǐn)。。。至此,代碼及原因分析完畢。當(dāng)一些Android平板設(shè)備統(tǒng)一返回相同的mac地址,如00:00:00:00:00:00時(shí)(有可能是沒(méi)有wifi模塊;也有可能是山寨機(jī)出現(xiàn)這種情況的時(shí)候),友盟將會(huì)將其數(shù)據(jù)識(shí)別成同一用戶(hù),并且將會(huì)造成嚴(yán)重的MAC地址漂移。作為比較,我們來(lái)看一下友盟的競(jìng)爭(zhēng)對(duì)手shareinstall的渠道統(tǒng)計(jì)代碼!首先,我們開(kāi)看看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){//微信中顯示遮罩提示在瀏覽器中打開(kāi)或進(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)擊右上角在瀏覽器中打開(kāi)</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頁(yè)面向app傳遞的json數(shù)據(jù)(jsonstring/jsObject),應(yīng)用被拉起或是首次安裝時(shí),通過(guò)相應(yīng)的
android/iosapi可以獲取此數(shù)據(jù)*/
vardata=ShareInstall.parseUrlParams();//shareinstall.js中提供的工具函數(shù),解析url中的所有查詢(xún)參數(shù)
newShareInstall({
appKey:'F6BKAREBHF22EB',
onready:function(){
//shareinstall已成功回調(diào),清除定時(shí)器
clearTimeout(timer);
timer=null;
varm=this,button=document.getElementById("downloadButton");
button.style.visibility="visible";
/*用戶(hù)點(diǎn)擊某個(gè)按鈕時(shí)(假定按鈕id為downloadButton),安裝app*/
button.onclick=function(){
m.wakeupOrInstall();
}
}
},data);</script>shareinstall提供完整的javascriptapi,方便Web開(kāi)發(fā)者實(shí)現(xiàn)完全自主的設(shè)計(jì)。再開(kāi)看看shareinstall的代碼配置(測(cè)試):如果做測(cè)試,獲取參數(shù),則必須在Appdelegate.h加上如下測(cè)試代碼。#pragmamark將oc數(shù)據(jù)類(lèi)型轉(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用戶(hù)注冊(cè)完成后調(diào)用,可以統(tǒng)計(jì)渠道注冊(cè)量。警告:必須在注冊(cè)成功的時(shí)調(diào)用[ShareInstallSDKreportRegister]方法,否則可能導(dǎo)致注冊(cè)統(tǒng)計(jì)不準(zhǔn)。由上比較得知,shareinstall與友盟最大的優(yōu)勝點(diǎn)就在于首先實(shí)現(xiàn)完全自主。這很大一部分是因?yàn)?/p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)能量保鮮蛋數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 科技類(lèi)企業(yè)如何利用社交網(wǎng)絡(luò)提升傳播效率
- 二零二五年度貨運(yùn)駕駛員安全駕駛教育與雇傭協(xié)議
- 2025年度環(huán)保產(chǎn)業(yè)職業(yè)經(jīng)理人綠色管理聘用協(xié)議
- 二零二五年度農(nóng)村土地流轉(zhuǎn)與農(nóng)業(yè)循環(huán)經(jīng)濟(jì)合作協(xié)議
- 二零二五年度美工師勞動(dòng)合同(UIUX設(shè)計(jì))
- 二零二五年度環(huán)境污染賠償協(xié)議
- 科技賦能下的現(xiàn)代綠色建筑設(shè)計(jì)新思路
- 二零二五年度跨境電商股份轉(zhuǎn)讓免責(zé)協(xié)議
- 二零二五年度商業(yè)門(mén)面競(jìng)業(yè)禁止租賃合同
- 課件-DeepSeek從入門(mén)到精通
- 17J008擋土墻(重力式、衡重式、懸臂式)圖示圖集
- 藥品類(lèi)體外診斷試劑專(zhuān)項(xiàng)培訓(xùn)課件
- 心電監(jiān)護(hù)儀的操作及注意事項(xiàng) 課件
- GB/T 718-2024鑄造用生鐵
- 食品經(jīng)營(yíng)操作流程圖
- 小學(xué)生必背古詩(shī)詞80首硬筆書(shū)法字帖
- 中風(fēng)(腦梗死恢復(fù)期)中醫(yī)護(hù)理方案(課堂PPT)
- X52K銑床參數(shù)
- 橡膠履帶力學(xué)分析及優(yōu)化設(shè)計(jì)
- CFM56-7發(fā)動(dòng)機(jī)滑油系統(tǒng)及其常見(jiàn)故障分析(共41頁(yè))
評(píng)論
0/150
提交評(píng)論