成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

注意!Electron 無法獲取設(shè)備ID了!

開發(fā) 前端
正常情況下,我們希望用戶打開應(yīng)用的時(shí)候,主動(dòng)獲取設(shè)備 ID 并發(fā)給渲染進(jìn)程。然而經(jīng)過測(cè)試,在創(chuàng)建瀏覽器窗口的同時(shí)立即獲取設(shè)備 ID 并通知渲染進(jìn)程,在正式環(huán)境中,渲染進(jìn)程往往接受不到消息。這是因?yàn)閯?chuàng)建窗口時(shí),頁面還沒有初始化完成,自然接收不到消息。

大家好,我是楊成功。

在桌面應(yīng)用開發(fā)中,常常需要獲取設(shè)備唯一 ID 來表示當(dāng)前客戶端的唯一性。一般的設(shè)備 ID 需要滿足兩個(gè)條件:

  • 基于硬件和系統(tǒng)配置生成,確保設(shè)備的唯一性。
  • 只要不重裝系統(tǒng),設(shè)備 ID 多次獲取都是唯一的。

node-machine-id 是一個(gè)常用的 Node.js 模塊,它能夠在 Electron 中獲取機(jī)器的唯一標(biāo)識(shí)。

我們的產(chǎn)品就是使用該模塊,用法也很簡(jiǎn)單:

import { machineIdSync } from 'node-machine-id';
let id = machineIdSync();

但是昨天出現(xiàn)了問題,排查結(jié)果是多臺(tái)設(shè)備獲取的 ID 竟然是一樣的,造成了一些設(shè)備的數(shù)據(jù)被篡改,我從 issues 中找到了一些端倪。

圖片

也就是在 Window Ghost 系統(tǒng)中會(huì)出現(xiàn)問題(啥是 Window Ghost ?)。

Window 中還經(jīng)常遇到權(quán)限問題,而且這個(gè) ID 總歸不可控,所以還是用自定義的方式實(shí)現(xiàn)吧。

自定義設(shè)置設(shè)備 ID

自定義的設(shè)備 ID 首先需要唯一,其次在安裝和卸載應(yīng)用時(shí)設(shè)備 ID 不變。

滿足這兩個(gè)要求,最佳的方案就是將自己生成的設(shè)備 ID 存儲(chǔ)在用戶目錄下。

假設(shè)當(dāng)前用戶叫張三,他的用戶目錄:

  • Window:C:\Users\張三\
  • MacOS:/Users/張三/

很多應(yīng)用程序都把配置寫到用戶目錄下,且該目錄一般不會(huì)遇到權(quán)限問題。

使用 uuid 生成設(shè)備 ID:

import { v4 as uuidv4 } from 'uuid';
const device_id = uuidv4();

在主進(jìn)程中獲取到用戶目錄,非常簡(jiǎn)單:

import { app } from 'electron';
const user_path = app.getPath('home'); // 自動(dòng)獲取 Win 或 Mac 的用戶目錄

在用戶目錄下創(chuàng)建 .elappid 文件,存放生成的設(shè)備 ID:

import { join } from 'node:path';
import fs from 'node:fs';
// 獲取配置文件地址
let appid_path = join(user_path, '.elappid');
// 判斷文件是否存在,不存在就先創(chuàng)建,并寫入設(shè)備ID
if (!fs.existsSync(appid_path)) {
  fs.writeFileSync(appid_path, device_id, 'utf8');
}

讀取設(shè)備 ID,并發(fā)送給渲染進(jìn)程:

let appid = fs.readFileSync(appid_path, 'utf8');
win.webContents.send('susr-config', { appid });

寫一個(gè)進(jìn)程間交互的方法,就能拿到設(shè)備 ID 了。

什么時(shí)候獲取設(shè)備 ID

正常情況下,我們希望用戶打開應(yīng)用的時(shí)候,主動(dòng)獲取設(shè)備 ID 并發(fā)給渲染進(jìn)程。

然而經(jīng)過測(cè)試,在創(chuàng)建瀏覽器窗口的同時(shí)立即獲取設(shè)備 ID 并通知渲染進(jìn)程,在正式環(huán)境中,渲染進(jìn)程往往接受不到消息。

這是因?yàn)閯?chuàng)建窗口時(shí),頁面還沒有初始化完成,自然接收不到消息。

保險(xiǎn)的方法就是在頁面加載完成后再獲取設(shè)備 ID,方法如下:

win = new BrowserWindow({...})

// 頁面加載完成后觸發(fā):
win.webContents.on("did-finish-load", () => {
  console.log('在這里獲取設(shè)備ID吧')
})

大功告成,你也試試吧!

責(zé)任編輯:姜華 來源: 程序員成功
相關(guān)推薦

2009-07-06 16:44:49

WinCE中獲取設(shè)備I

2009-09-03 17:51:34

C#獲取設(shè)備的ID

2022-05-17 10:01:21

ChromeAndroidGoogle

2021-06-23 20:33:38

Mac蘋果面容ID

2016-12-05 13:53:23

2017-05-12 10:59:19

Windows 10USB設(shè)備

2024-03-28 16:27:03

2021-02-01 16:55:13

iPhoneTouch ID蘋果

2020-04-03 08:30:44

RabbitMQKafka軟件

2021-01-12 09:24:24

Apple ID蘋果鎖定

2013-11-26 15:12:40

2022-12-30 16:19:48

鴻蒙開發(fā)工具

2011-08-22 16:39:15

iOS內(nèi)存

2023-10-27 16:12:29

2020-07-17 07:15:38

數(shù)據(jù)庫ID代碼

2018-11-28 15:00:58

MySQLGROUP BY索引

2022-03-21 11:15:03

SafariWebKit

2011-07-07 13:12:58

移動(dòng)設(shè)備端設(shè)計(jì)注意力

2010-11-25 13:53:13

UI設(shè)計(jì)移動(dòng)

2013-07-05 09:15:28

Android
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩精品在线一区 | 欧美精品在线一区二区三区 | 亚洲高清成人 | 一区二区在线观看免费视频 | 久久久久久久一区 | 国产精品一区二区福利视频 | 国产欧美精品区一区二区三区 | 岛国毛片在线观看 | 色狠狠一区 | 成人免费在线视频 | 久久久高清 | 天天操天天操 | 亚洲成人自拍 | 久久久久成人精品 | 黄色片在线免费看 | 日韩欧美在线播放 | 欧美色999 | 91精品国产色综合久久不卡蜜臀 | 婷婷色国产偷v国产偷v小说 | 免费观看一级特黄欧美大片 | 日韩午夜电影在线观看 | 欧美成年网站 | 亚洲一区二区视频 | 久久久久久久久国产精品 | 男女羞羞视频在线看 | 欧洲精品久久久久毛片完整版 | 一区二区国产精品 | 日韩一区二区av | 久久精品国产一区 | 中文字幕一区二区视频 | 伊人网综合 | 国产一级毛片精品完整视频版 | 在线第一页 | 神马福利 | 日本人做爰大片免费观看一老师 | 欧美在线不卡 | 国产精品欧美一区二区 | 99精品99久久久久久宅男 | 美女爽到呻吟久久久久 | 亚洲国产精品va在线看黑人 | 91视频.|