- 问题:
头条的点击量中的设备id与我方获取的设备id差异大,即是自然量多
- 分析:
在android10以前是用imei进行归因,imei的获取接口有getImei和getDeviceId,imei的获取方式和结果可能与头条有差异
- 解决方法:
通过提交工单了解头条获取imei的机制,并采用相同的机制获取
- 结果:工单已经提交我3个工作日了,仍未获得头条的答复(失望)
- 延伸:获取imei的方式
- getImei:这个接口是api在26以后推荐使用的,能获取imei
- getDeviceId:这个接口是api在26以前的,目前已为过时的方法,该方法在卡槽插入为移动和联通卡时,获取的值为imei,在卡槽插入为电信卡时,获取的值为meid (当你拨出sim卡,不插入时,获取的值为上次插卡时获取的值,如上次插入为电信卡,拨卡后再获取仍为电信卡)
- getMeid:在api26以后,获取电信卡的meid有了专门的方法
综上,个人得出以下获取imei的方法(最好在得到imei码后,将其缓存,以后要使用直接从缓存中读取):
public static String getIMEI(Context context) {
String imei = "";
try {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (Build.VERSION.SDK_INT >= 29) {
imei = "";
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
imei = telephonyManager.getImei();
} else {
imei = telephonyManager.getDeviceId();
}
} catch (Exception e) {
e.printStackTrace();
}
return imei;
}
- 双卡的手机获取情况又如何?
- getImei
- 主卡槽为移动联通电信:获取的值均为imei
- 主卡槽为空,卡槽2为任意运营商卡:获取的值为卡槽2的imei
- getDeviceId
- 主卡槽为移动联通:获取的值为imei
- 主卡槽为电信:获取的值为meid
- 主卡槽为空,卡槽2为任意运营商卡:获取的值为卡槽1的imei
- getImei(index):获取指定卡槽的imei,index为卡槽位置
- getDeviceId(index):获取指定卡槽的imei或meid,index为卡槽位置
网友评论