头条投放sdk获取imei的方式

  • 问题:
    头条的点击量中的设备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为卡槽位置

你可能感兴趣的:(头条投放sdk获取imei的方式)