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

Android平台使用Capacitor/Device获取36位UUID失败求助

问题解答

当前获取到的16位字符是什么?

你通过Device.getId()获取到的16位字符,是Capacitor 4.x对系统级设备标识符做处理后生成的应用专属短标识符:

  • Android端:基于Settings.Secure.ANDROID_ID做SHA-256哈希后截取前16位
  • iOS端:基于UIDevice.current.identifierForVendor的完整UUID(去掉横杠)后截取前16位

它用于稳定标识当前应用在设备上的实例,符合隐私合规要求,但并非标准的36位RFC4122格式UUID。

如何获取36位标准UUID?

Capacitor官方插件没有直接提供获取36位UUID的接口,推荐通过自行生成并持久化的方式实现,具体步骤如下:

1. 依赖准备

安装uuid库生成标准UUID,同时用Capacitor的Storage做本地持久化:

npm install uuid @capacitor/storage

2. 修改代码实现

在组件初始化时检查本地存储,若无已生成的UUID则创建并保存,确保每个应用实例拥有唯一且稳定的36位UUID:

import { Component, OnInit } from '@angular/core';
import { AppService } from './app.service';
import { Device } from '@capacitor/device';
import { Storage } from '@capacitor/storage';
import { v4 as uuidv4 } from 'uuid';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
  title!: string;

  checked: boolean = false;
  deviceId: any;
  result: any;
  platform: any;
  info: any;
  standard36Uuid: string = '';

  constructor (private appService: AppService) {}

  async ngOnInit() {
    // 读取本地存储的UUID,不存在则生成新的
    const storedUuid = await Storage.get({ key: 'app_unique_uuid' });
    if (storedUuid.value) {
      this.standard36Uuid = storedUuid.value;
    } else {
      this.standard36Uuid = uuidv4(); // 生成36位标准UUID
      await Storage.set({ key: 'app_unique_uuid', value: this.standard36Uuid });
    }
  }

  async sendNotification () {
    this.info = await Device.getInfo();
    this.platform = this.info.platform;
    const deviceIdResult = await Device.getId();
    this.deviceId = deviceIdResult.uuid;
    // 使用自定义的36位UUID调用推送接口
    this.result = this.appService.sendNotification(this.platform, this.standard36Uuid);
  }
}

补充说明

如果确实需要系统级的36位标识符(需注意隐私合规限制),则需要自定义Capacitor插件:

  • Android:直接获取Settings.Secure.ANDROID_ID(Android 8+为应用签名级唯一值)或Build.SERIAL(需申请权限)
  • iOS:直接获取UIDevice.current.identifierForVendor?.uuidString(完整36位格式)

但自定义插件成本较高,且系统级标识符可能因系统版本、设备重置等因素变化,因此更推荐自行生成持久化的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:45:10