Android設備標識-沒有完美的解決方案-只有取捨

本文鏈接    http://blog.csdn.net/xiaodongrush/article/details/28864845

1.  幾種常用的設備標識碼

     IMEI,Sim卡序列號,Wifi模塊Mac地址,Android_ID

TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
String imei = telephonyManager.getDeviceId();
String simNo = telephonyManager.getSimSerialNumber();
WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE);
String wifiAddress = wm.getConnectionInfo().getMacAddress();
String androidId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
    IMEI是可以用軟件直接改寫的,重複是無法避免的,標準是15位數字,有些設備上,連這個標準都保證不了。IMEI與每臺手機對應,PAD沒有IMEI。此外,小米2上發現,如果不信任一個APP,那麼這個APP將讀取不到IMEI,即讀到的結果是null。IMEI是有多麼的不靠譜。
    PAD沒有Sim卡,自然也沒有Sim卡序列號,雙卡的手機還會有兩個Sim卡序列號。PAD也麻煩的,沒有IMEI,沒有SIM卡序列號。
    某些手機或者設備沒有Wifi模塊,Mac地址讀取不到。一個移動設備都有wifi,這個應該都會有,不過也是不能保證不重複。
    Android_ID在每次恢復工廠模式後,都會重新生成,另外個別手機存在bug,產生的Android_ID都是一樣的。與其交給系統產生id,還不如自己產生id。

2. 常用標識的組合

    1. 如果IMEI不爲空,返回IMEI,否則,進入2
    2. 如果Sim卡序列號不爲空,返回序列號,否則,進入3
    3. 如果MAC地址不爲空,md5(mac+"mac_address"),否則進入4
    4. 如果Android_ID不爲空,返回Android_ID,否則進入5
    5. 返回"invalid_imei"

    如果是統計APP的安裝量一般用上面這些方法就可以了。這樣統計到的設備數量只會更少,不會更多。

3. 如果要實現設備管理這樣的功能怎麼辦

    這就要求保證每個設備的標識不能重複,因此使用上面的方法就不行了。使用UUID來處理,並且持久化到SharedPreference和SD卡,這樣只要APP和文件沒有同時被幹掉,就不會重新生成新的標識。

設備id生成

1. 如果imei不爲空,並且長度等於15,那麼deviceid = android-imei-uuid-timestamp。否則進入2。
2. deviceid = android-uuid-timestamp

設備id讀取

1. 如果從sharedpreference中,讀到deviceid,將該id存儲到sd卡上,返回改id,否則進入2
2. 如果sd卡中,讀到deviceid,那麼將該id存儲到sharedpreference,返回該id,否則進入3
3. 生成deviceid,存儲到sd卡和sharedpreference中

4. 參考文章

    http://android-developers.blogspot.com/2011/03/identifying-app-installations.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章