1.獲取手機的唯一設備標識符IMEI
public static String getMobileIMEI(Context context) {
String imei = null;
try {
TelephonyManager mTelephonyMgr = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
imei = mTelephonyMgr.getDeviceId();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return imei;
}
2.獲取手機唯一的入網標識符IMSI:
public static String getMobileIMSI(Context context) {
// 獲取手機的IMSI碼
String imsi = null;
try {
TelephonyManager mTelephonyMgr = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
String sendNum = null;
imsi = mTelephonyMgr.getSubscriberId();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return imsi;
}
3.獲取手機的入網手機號:
public static String getMobileNumber(Context context) {
String number = null;
try {
TelephonyManager tm = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
number = tm.getLine1Number();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return number;
}
【先說結論】
UDID是移動端相對最靠譜的設備標識碼,不論Android或iOS。
【名詞釋義】
- Device ID:設備ID。
- IMEI:International Mobile Equipment Identity,國際移動設備身份碼的縮寫。是由15位數字組成的“電子串號”,它與每臺手機一一對應,每個IMEI在世界上都是唯一的。
- IDFA:Identifier For Advertising,iOS獨有的廣告標識符。
- UDID:Unique Device Identifier,唯一設備標識碼。
- UUID:Universally Unique Identifier,通用唯一識別碼。目前最廣泛應用的UUID,是微軟公司的全局唯一標識符GUID。其目的是讓分佈式系統中的所有元素,都能有唯一的辨識信息,而不需要通過中央控制端來做辨識信息的指定。
【再說過程】
名詞釋義是不是看得一臉懵逼?莫慌,下圖介紹了各個設備標識碼的區別,以及目前的情況。
點擊圖片查看清晰大圖
Android設備標識碼
- device ID。
又叫設備ID。可以用系統提供的TelephonyManager服務來獲取,具有唯一性。其中又包括IMEI和MEID/ESN。 - IMEI:GSM設備返回的,並且是寫在主板上的,重裝APP不會改變IMEI。Android 6.0以上系統需要用戶授予read_phone_state權限,如果用戶拒絕就無法獲得。
- mac地址:硬件標識符,包括WiFi mac地址和藍牙mac地址。Android 6.0之後被禁止,若獲取則會被判定爲有害應用。
- MEID/ESN:CDMA設備返回的,一般不使用。
- UDID:用來標示設備的唯一性。獲取UUID後,寫入.so文件生成UDID。即使APP重裝,值也不變,除非root手機(普通用戶做不到)
- UUID:APP重裝後會改變。
iOS設備標識碼
- device ID。
- IMEI:iOS 5 之後被禁止。寫在主板上,重裝APP不會改變。
- IDFA:於iOS 6 時面世,可以監控廣告效果,同時保證用戶設備不被APP追蹤的折中方案。可能發生變化,如系統重置、在設置裏還原廣告標識符。用戶可以在設置裏打開“限制廣告跟蹤”。
- mac地址:硬件標識符,包括WiFi mac地址和藍牙mac地址。iOS 7 之後被禁止(同時禁止的還有OpenUDID)。
- UDID:用來標示設備的唯一性 。iOS 6 之後被禁止獲取系統原生的UDID,但可以通過uuid,寫入到鑰匙串中,從而獲得自定義的UDID(非系統原生),即使用戶重裝APP,只要每次都取這個鑰匙串返回,就是不變的。
- UUID:APP重裝後會改變。
【總結】
若想用於數據統計,使用UDID是最靠譜的。
鏈接:https://www.jianshu.com/p/38f4d1a4763b