序
今天是在北京隔離的第十天 ,下週我就能去公司了 。
OAID 簡介
因傳統的移動終端設備標識如國際移動設備識別碼(IMEI)等已被部分國家認定爲用戶隱私的一部分,並存在被篡改和冒用的風險,所以在Android 10及後續版本中非廠商系統應用將無法獲取IMEI、MAC等設備信息。無法獲取IMEI會在用戶行爲統計過程中對設備識別產生一定影響。
近日移動安全聯盟針對該問題聯合國內手機廠商推出補充設備標準體系方案,選擇OAID字段作爲IMEI等的替代字段。OAID字段是由中國信通院聯合華爲、小米、OPPO、VIVO等廠商共同推出的設備識別字段,具有一定的權威性,可滿足用戶行爲統計的使用場景。
PS:簡單理解就是從 Android 10 開始 ,我們上線的應用將無法在獲取 IMEI 、MAC 等設備信息 。有什麼影響呢 ?如果使用百度統計的話 ,將會在用戶統計過程中對設備識別產生影響;如果項目中使用 IMEI 數據的話 ,你肯定獲取不到了 ,可以試一下看看會返回 Null 嗎 。
然後我這邊要求在這一版本上接入 OAID ,其實項目中我沒有使用 IMEI 這個字段數據 ,所以單純項目裏面沒有什麼影響,主要是百度統計的問題 。
接入 OAID 的考慮
講真的,我是不太贊同接入這個移動安全聯盟的 OAID的。
1. 兼容設備廠商問題
目前並沒有做到國內廠商的兼容 ,我相信未來一定是可以實現的。目前是主流的 華爲、小米、OPPO、VIVO 。你可以看一下應用統計裏面的數據 ,這幾個廠商幾乎全部的份額 。
2.更新日誌 (如下圖)
看上面的日誌 ,我相信很多人都能一下子看出來那些能造成閃退的日誌 。關於這一點是比較擔心的 。如果百度統計沒有統計到設備信息問題不大,但是接入這個SDK造成一些未知閃退就有點尷尬了。Android 開發都知道 ,這些未知的兼容問題是很致命的 。
說這麼多沒用 ,還是的接入
直接看OAID的接入pdf就可以了 。什麼aar包 、什麼json文件等等都比較簡單 。有個迷惑性的問題就是接入 pdf 中代碼調入這一塊。
就是在獲取設備 ID 的時候這些東西。看上面截圖 ,有兩種獲取方式
首先看 b1 :因爲 Android 9 以後類加載的限制 ,所以 Android 9 以後不建議使用這個方法 ,如需使用,需要做 MdidSdk.InitSdk 和 JLibrary.InitEntry()不能在一個類 裏,還要注意包含這兩個調用的類不能有依賴關係。 什麼意思呢 ?就是這兩行代碼不能在同一個類裏面。
然後看b2:反射調用 ,它的好處是 android 版本號無關,缺點是調用時間估計會長, 經過測試跟直接調用在用時上區別不大。這就很尷尬了 。
PS:那麼我們到底使用哪個方式調用獲取設備ID呢 ? b1是不建議使用 ,b2是可能調用時間會長但是經過測試跟直接調用在用事上區別不大 。哈哈哈 ,要是我選的話 ,那肯定是 b1 呀 ,麻煩點就麻煩點 。說實話 ,在項目總應該是很少去使用 反射這個黑科技的 ,到目前爲止我認爲是有益無害 。
PS :因爲現在在家辦公 ,手裏沒有 Android 10 的測試機 ,所以等下週到公司把他的代碼給跑一遍試試 。
待續。。。
PS:開始還這個技術債
獲取 IMEI 代碼
public static String getIMEI(Context context){
String imei = "";
try {
TelephonyManager tm = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE);
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP){
imei = tm.getDeviceId();
}else {
Method method = tm.getClass().getMethod("getImei");
imei = (String) method.invoke(tm);
Log.i("AAAAAAAAAAAA","IMEI = " + imei);
}
} catch (Exception e) {
e.printStackTrace();
}
return imei;
}
測試手機:華爲 P30 ,Android 系統 10
打印結果
2020-03-06 13:34:43.839 20110-20110/************* I/AAAAAAAAAAAA: IMEI = null
測試手機:小米 8 ,Android 系統 9
2020-03-06 13:46:00.911 14886-14886/*********** I/AAAAAAAAAAAA: IMEI = 861268046826351
如果感覺文章對您有幫助 ,可以關注我的公衆號 SuperMaxs (如果有技術問題可以通過公衆號加私人微信)。