You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 10及以上获取IMEI/IMSI/MAC地址的可行方案咨询

Android 10+ 设备识别(一机一登录)替代方案及设备配置控制器使用指南

一、非敏感信息的设备识别替代方案

Android 10+ 严格限制了IMEI、IMSI、MAC这类敏感标识符的获取权限,优先推荐以下合规替代方案实现一机一登录:

  • Android ID:调用Settings.Secure.ANDROID_ID获取,同一设备上的所有应用会获得相同值(恢复出厂设置后会重置),无需特殊权限。
  • 自定义唯一ID:首次启动应用时生成UUID,存储到SharedPreferences或本地文件,卸载重装会重置,适合不需要跨卸载识别的场景。
  • 广告ID:依赖Google Play Services获取,用户可主动重置,适合非强制的识别场景。

二、设备配置控制器(DPC)与工作配置文件的适用性

DPC和工作配置文件主要面向企业管理场景,无法直接获取IMEI/IMSI/MAC,但可通过以下方式实现设备级识别:

  1. 工作配置文件是与个人空间隔离的独立容器,同一设备的工作配置有唯一标识符,可用于工作范围内的一机一登录。
  2. DPC应用可管理设备的工作配置,通过绑定设备的工作配置ID实现识别,全程无需敏感权限。

三、DPC与工作配置文件的使用步骤及示例

1. 添加依赖

在build.gradle中引入必要依赖:

dependencies {
    implementation 'androidx.work:work-runtime:2.8.1'
    implementation 'com.google.android.gms:play-services-management:17.0.0'
}

2. 实现DPC核心接收器

创建继承自DeviceAdminReceiver的广播接收器,处理工作配置初始化完成事件:

public class MyDeviceAdminReceiver extends DeviceAdminReceiver {
    @Override
    public void onProfileProvisioningComplete(Context context, Intent intent) {
        super.onProfileProvisioningComplete(context, intent);
        // 获取工作配置文件的唯一ID
        String profileId = getProfileUniqueId(context);
        // 将profileId传入后端做一机一登录验证
        Log.d("DPC_DEMO", "工作配置ID: " + profileId);
    }

    private String getProfileUniqueId(Context context) {
        DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
        ComponentName adminComponent = new ComponentName(context, MyDeviceAdminReceiver.class);
        return dpm.getProfileOwnerId(adminComponent);
    }
}

3. 注册DPC组件

在AndroidManifest.xml中注册接收器并声明权限:

<uses-permission android:name="android.permission.BIND_DEVICE_ADMIN" />

<receiver
    android:name=".MyDeviceAdminReceiver"
    android:permission="android.permission.BIND_DEVICE_ADMIN">
    <meta-data
        android:name="android.app.device_admin"
        android:resource="@xml/device_admin" />
    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
        <action android:name="android.app.action.PROFILE_PROVISIONING_COMPLETE" />
    </intent-filter>
</receiver>

4. 创建设备管理配置文件

在res/xml/下新建device_admin.xml,配置DPC权限范围:

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <manage-profile />
        <limit-password />
        <force-lock />
    </uses-policies>
</device-admin>

5. 触发工作配置创建流程

在应用中启动工作配置初始化:

public void initWorkProfile(Context context) {
    Intent provisionIntent = new Intent(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE);
    provisionIntent.putExtra(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME,
            new ComponentName(context, MyDeviceAdminReceiver.class).flattenToString());
    if (provisionIntent.resolveActivity(context.getPackageManager()) != null) {
        context.startActivity(provisionIntent);
    }
}

四、注意事项

  • 工作配置文件仅适用于企业场景,普通消费级应用使用可能增加用户操作成本,需评估业务适配性。
  • 所有合规方案都无法完全替代IMEI的永久唯一性(如恢复出厂设置会重置Android ID),需根据业务容忍度选择合适方案。

内容的提问来源于stack exchange,提问作者Renuka Sachin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:12:11