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

Ionic + Capacitor项目iOS端获取设备UUID返回null如何解决

问题原因

iOS 11及以上系统出于用户隐私政策限制,禁止第三方应用获取设备真实UDID、IMEI等永久唯一硬件标识,这是@ionic-native/unique-device-id在iOS环境返回null的根本原因。

可行解决方案

方案1:使用Capacitor官方Device组件(推荐)

该组件在iOS端会返回IDFV(Vendor专属标识),同一开发者账号下的所有App在同一台设备上的IDFV一致,仅当设备上该开发者账号下的全部App都被卸载后才会变更,完全满足SNS设备注册的唯一标识需求。

安装步骤

npm install @capacitor/device
npx cap sync

代码修改示例

原有代码需要调整为异步获取设备标识逻辑,修改后如下:

import { Device } from '@capacitor/device';

async registerTokenOnSNS(tokenString): Promise<any> {
    const tokenDTO: TokenDTO = {
        deviceToken: '',
        deviceUuid: '', // 注意和你定义的DTO字段对齐,原代码用了imei字段,可按需调整
        osType: '',
    };
    // 系统类型判断
    if (this.platform.is('android')) {
        tokenDTO.osType = 'Android';
    } else {
        tokenDTO.osType = 'iOS';
    }
    tokenDTO.deviceToken = tokenString;
    // 获取设备唯一标识
    const deviceInfo = await Device.getId();
    tokenDTO.deviceUuid = deviceInfo.uuid;

    return this.http.post<Response>(this.apiBaseUrl + '/register-endpoint', JSON.stringify(tokenDTO)).pipe(
        map((result) => {
            console.log('BE Received Token');
            return result.body;
        })
    );
}

方案2:使用Cordova钥匙串存储自定义UUID(永久唯一)

如果你的项目仍在使用Cordova架构,可生成一个随机UUID存储到iOS钥匙串中,存储后的UUID即使App卸载重装也不会丢失,可作为永久设备标识:

  • 安装cordova-plugin-ios-keychain插件
  • 首次启动App时判断钥匙串中是否存在自定义UUID,不存在则生成并写入
  • 后续直接读取钥匙串中的UUID作为deviceUuid使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 18:45:00