头条巨量引擎上报踩坑

头条API上报,上报接口执行一遍,联调那会有两遍数据,头条的问题,暂无法解决;
上报的时候遇到的坑:
1.上报需要imei android,oaid
a. imei :android10以上获取不到:
b, androidID 和头条的比对不上,(下面是我使用的方法,有知道原因的请告诉我)
c.oaid需要使用msa_mdid_1.0.13这版本的aar(有需要这版本的可以联系我)
(移动开发联盟)
使用oaid + imei +androidID
以下是获取的方法:

//获取imei
public static String getDeviceId() {
        String deviceId = "";
        try {
            if (ContextCompat.checkSelfPermission(MyApplication.getContext(), Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
                TelephonyManager tm = (TelephonyManager) MyApplication.getContext().getSystemService(TELEPHONY_SERVICE);
                deviceId = tm.getDeviceId();
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    deviceId =  tm.getImei();
                    Log.e("aaaa", "获取返回设备id 成功:"+ tm.getDeviceId());
                }
            }
        } catch (Exception e) {
        }
        return deviceId;
    }

public class SystemUtil {

    public static String getPacakcageModel() {
        return "ocrtwo";
    }

    /**
     * 获取版本号
     *
     * @param
     * @return
     */
    public static String getVersion() {
        try {
            PackageManager manager = MyApplication.getContext().getPackageManager();
            PackageInfo info = manager.getPackageInfo(MyApplication.getContext().getPackageName(), 0);
            return info.versionCode + "";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "0";
    }

    /**
     * 获取版本号
     *
     * @param
     * @return
     */
    public static String getVersionName() {
        try {
            PackageManager manager = MyApplication.getContext().getPackageManager();
            PackageInfo info = manager.getPackageInfo(MyApplication.getContext().getPackageName(), 0);
            return info.versionName + "";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "1.0.0";
    }

    /**
     * 获取包名
     *
     * @param
     * @return
     */
    public static String getPckName() {
        return MyApplication.getContext().getPackageName();
    }

    /**
     * 获取渠道
     *
     * @param
     * @return
     */
    public static String getChannel() {
        try {
            ApplicationInfo appInfo = MyApplication.getContext().getPackageManager()
                      .getApplicationInfo(MyApplication.getContext().getPackageName(),
                                PackageManager.GET_META_DATA);
            if (null != appInfo.metaData) {
                return appInfo.metaData.getString("UMENG_CHANNEL");
            } else {
                return null;
            }

        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取手机厂商
     *
     * @return 手机厂商
     */
    public static String getDeviceBrand() {
        return Build.BRAND;
    }

    /**
     * 获取手机型号
     *
     * @return 手机型号
     */
    public static String getSystemModel() {
        return Build.MODEL;
    }

    /**
     * 系统版本
     * @return
     */
    public static String getSystemRelease() {
        return Build.VERSION.RELEASE;
    }

    public static String getDeviceId() {
        String deviceId = "";
        try {
            if (ContextCompat.checkSelfPermission(MyApplication.getContext(), Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
                TelephonyManager tm = (TelephonyManager) MyApplication.getContext().getSystemService(TELEPHONY_SERVICE);
                deviceId = tm.getDeviceId();
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    deviceId =  tm.getImei();
                    Log.e("aaaa", "获取返回设备id 成功:"+ tm.getDeviceId());
                }
            }
        } catch (Exception e) {
        }
        return deviceId;
    }

    public static String getMD5Imei(){
        String deviceId = "";

        if (!TextUtils.isEmpty(getDeviceId())) {
            deviceId = MD5Utils.MD5_32bit(getDeviceId());
        }

        return deviceId;
    }
    public static String getMD5Android(Context context){
        String deviceId = "";

        if (!TextUtils.isEmpty(getAndroidId(context))) {
            deviceId = MD5Utils.MD5_32bit(getAndroidId(context));
        }

        return deviceId;
    }

    public static String getUniquePsuedoID() {
        String serial = null;

        String m_szDevIDShort = "35" +
                  Build.BOARD.length() % 10 + Build.BRAND.length() % 10 +
                  Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10 +
                  Build.DISPLAY.length() % 10 + Build.HOST.length() % 10 +
                  Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10 +
                  Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10 +
                  Build.TAGS.length() % 10 + Build.TYPE.length() % 10 +
                  Build.USER.length() % 10; //13 位
        try {
            serial = Build.class.getField("SERIAL").get(null).toString();
            //API>=9 使用serial号
            return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
        } catch (Exception exception) {
            //serial需要一个初始化
            serial = "serial"; // 随便一个初始化
        }
        //使用硬件信息拼凑出来的15位号码
        return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
    }

    public static String getAndroidId (Context context) {
        String ANDROID_ID = Settings.System.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
        return ANDROID_ID;
    }

    /**
     * 获取wifi的mac地址,适配到android Q
     * @param paramContext
     * @return
     */
    public static String getMac(Context paramContext) {
        try {
            if (Build.VERSION.SDK_INT >= 23) {
                String str = getMacMoreThanM(paramContext);
                if (!TextUtils.isEmpty(str))
                    return str;
            }
            // 6.0以下手机直接获取wifi的mac地址即可
            WifiManager wifiManager = (WifiManager)paramContext.getSystemService("WIFI");
            WifiInfo wifiInfo = wifiManager.getConnectionInfo();
            if (wifiInfo != null)
                return wifiInfo.getMacAddress();
        } catch (Throwable throwable) {}
        return null;
    }

    public static String getMacMd5(Context context){
        String mac = getMac(context);
        mac =  mac.replaceAll(":","");
        mac = mac.toUpperCase();
        mac = MD5Utils.MD5_32bit(mac);
        return mac;
    }

    /**
     * android 6.0+获取wifi的mac地址
     * @param paramContext
     * @return
     */
    private static String getMacMoreThanM(Context paramContext) {
        try {
            //获取本机器所有的网络接口
            Enumeration enumeration = NetworkInterface.getNetworkInterfaces();
            while (enumeration.hasMoreElements()) {
                NetworkInterface networkInterface = (NetworkInterface)enumeration.nextElement();
                //获取硬件地址,一般是MAC
                byte[] arrayOfByte = networkInterface.getHardwareAddress();
                if (arrayOfByte == null || arrayOfByte.length == 0) {
                    continue;
                }

                StringBuilder stringBuilder = new StringBuilder();
                for (byte b : arrayOfByte) {
                    //格式化为:两位十六进制加冒号的格式,若是不足两位,补0
                    stringBuilder.append(String.format("%02X:", new Object[] { Byte.valueOf(b) }));
                }
                if (stringBuilder.length() > 0) {
                    //删除后面多余的冒号
                    stringBuilder.deleteCharAt(stringBuilder.length() - 1);
                }
                String str = stringBuilder.toString();
                // wlan0:无线网卡 eth0:以太网卡
                if (networkInterface.getName().equals("wlan0")) {
                    return str;
                }
            }
        } catch (SocketException socketException) {
            return null;
        }
        return null;
    }


}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,376评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,126评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,966评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,432评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,519评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,792评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,933评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,701评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,143评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,488评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,626评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,292评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,896评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,324评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,494评论 2 348

推荐阅读更多精彩内容

  • 随着Google对隐私的重视以及Android10的逐渐普及,获取设备的唯一标识越来越来难,在Android10以...
    百事可乐99阅读 2,511评论 0 1
  •  androidQ(api29)出来后,IMEI等等这些个设备唯一号都没法获取了,虽然androidID还能用但是...
    隐藏的用户阅读 11,101评论 0 2
  • 原文链接链接://www.greatytc.com/p/6be91ee932a7[https://www...
    Small_Cake阅读 17,634评论 18 207
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,699评论 2 59
  • 问题:头条的点击量中的设备id与我方获取的设备id差异大,即是自然量多 分析:在android10以前是用imei...
    wsspace阅读 2,351评论 0 2