Android6.0以上获取APP设备唯一标识的正确姿势

问题

在用户没有登录的情况下必须确保设备的唯一性,于是惯性思维想到的肯定是使用DevicesId 来作为设备的唯一标识。

但Android6.0后google对权限加以限制和国内rom的不同等原因导致无法一个稳定的唯一标示

常见唯一标示

  • imei

  • Android_id

  • mac地址

  • Installtion ID : UUID

  • Pseudo-Unique ID

IMEI

获取权限
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
获取方法

TelephonyManager telephonyManager =(TelephonyManager)context.getSystemService(context.TELEPHONY_SERVICE);
String imei = telephonyManager.getDeviceId();

问题:
Android6.0后当无法获取到该权限后,方法直接报错,imei作为唯一标示可靠性太差。

Android_id

获取
String ANDROID_ID = Settings.System.getString(getContentResolver(), Settings.System.ANDROID_ID);
问题:
Android_id是不需要权限,但它跟手机rom和手机厂商有关(Android_id是设备首次运行随机生成的64位数字)有点手机是获取不到,恢复出厂设置时也会改变,可靠性也较差

Mac地址

获取方法

/**
     * Android 6.0 之前(不包括6.0)获取mac地址
     * 必须的权限 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
     * @param context * @return
     */
    public static String getMacDefault(Context context) {
        String mac = "";
        if (context == null) {
            return mac;
        }
        WifiManager wifi = (WifiManager)context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        WifiInfo info = null;
        try {
            info = 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值