【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】如何用代碼分析活躍用戶(hù)數(shù)量減少的原因_第1頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】如何用代碼分析活躍用戶(hù)數(shù)量減少的原因_第2頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】如何用代碼分析活躍用戶(hù)數(shù)量減少的原因_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論