/** * 设备ID管理工具 * 为每个访问设备生成并存储唯一的设备ID */ import { makeDeviceId } from './ids' const DEVICE_ID_KEY = 'metarec_device_id' /** * 生成唯一的设备ID */ function generateDeviceId(): string { return makeDeviceId() } /** * 获取或创建设备ID * 如果localStorage中已有设备ID,则返回它 * 否则生成新的设备ID并存储 */ export function getDeviceId(): string { try { // 尝试从localStorage获取 let deviceId = localStorage.getItem(DEVICE_ID_KEY) if (!deviceId) { // 如果没有,生成新的 deviceId = generateDeviceId() localStorage.setItem(DEVICE_ID_KEY, deviceId) } return deviceId } catch (error) { // 如果localStorage不可用(如隐私模式),使用sessionStorage console.warn('localStorage not available, using sessionStorage:', error) try { let deviceId = sessionStorage.getItem(DEVICE_ID_KEY) if (!deviceId) { deviceId = generateDeviceId() sessionStorage.setItem(DEVICE_ID_KEY, deviceId) } return deviceId } catch (e) { // 如果都不可用,生成临时ID(会话期间有效) console.warn('sessionStorage not available, using temporary ID:', e) return generateDeviceId() } } } /** * 清除设备ID(用于测试或重置) */ export function clearDeviceId(): void { try { localStorage.removeItem(DEVICE_ID_KEY) sessionStorage.removeItem(DEVICE_ID_KEY) } catch (error) { console.warn('Failed to clear device ID:', error) } }