Skip to main content

SDK接入指南

简介

Bugly Electron 端 SDK 主要包含两部分,一部分是主进程SDK,集成在Electron应用的主进程当中,用于监控主进程的质量和性能信息并完成上报,另一部分是渲染进程SDK,集成在Electron应用的渲染进程当中,用于监控渲染进程的质量和性能信息并完成上报。

danger

Electron 监控还在灰度验证中,请接入业务先尝试小范围灰度试用,质量验证符合预期后,再正式上线

SDK接入

创建产品

打开Bugly的控制管理台,进入我的产品列表,点击右上角的创建产品按钮,选择 electron 产品。 产品创建后,可在设置->产品信息查看该产品的APP ID 和 APP KEY。APP ID 和 APP KEY是SDK与Bugly服务端通信的重要凭证,也是识别一个产品的唯一标识。

我的产品列表

安装SDK

设置腾讯npm源

npm config set registry https://mirrors.tencent.com/npm/

使用npm安装SDK

// 安装主进程SDK
npm install -save @tencent/bugly-electron-main@1.0.12-beta.4
// 安装渲染进程SDK
npm install -save @tencent/bugly-electron-renderer@2.0.11-beta.2

使用pnpm安装SDK

packages.json里添加以下内容

    "dependencies": {
"@tencent/bugly-electron-main": "1.0.12-beta.4",
"@tencent/bugly-electron-renderer": "2.0.11-beta.2",
"@tencent/minidump": "0.0.8-beta.3"
}

pnpm-workspace.yaml里添加以下内容:

  onlyBuiltDependencies:
- '@tencent/minidump'

最后安装SDK

  pnpm install -save @tencent/bugly-electron-main
pnpm install -save @tencent/bugly-electron-renderer
提醒

SDK目前仅支持NPM以及PNPM安装导入的方式,后续将会支持以CDN形式导入。

SDK使用

主进程接入SDK

const Aegis= require('@tencent/bugly-electron-main');

const aegis = new Aegis({
id : 'xxx', // 产品对应的产品id,必须
appKey: 'xxxx', // 产品对应的appKey,必须
env: "debug", // 默认为production,设置为debug时输出sdk使用时的日志信息
// minidumpBinDir,uploadCrashLog 使用崩溃监控功能时可以在初始化时设置这两个字段,具体作用在【崩溃】栏目中说明
plugin: {
pagePerformance: true, // 开启性能上报,包括cpu和内存
error: true, // 开启错误上报
crash: true, // 开启崩溃上报
api: { // API监控配置
apiDetail: true, // 开启上报API请求的详细信息(包括详细的请求和响应参数)
retCodeHandler: () => {}, // 自定义返回码handler函数,在API监控部分有详细使用方法
},
}
})

渲染进程接入SDK

import Aegis from "@tencent/bugly-electron-renderer";

window.Aegis = new Aegis({
id : 'xxx', // 产品对应的产品id,必须
appKey: 'xxx', // 产品对应的appKey,必须
env: "debug", // 默认为production,设置为debug时输出sdk使用时的日志信息
plugin: {
spa: true, // 开启pv数据收集
error: true, // 开启JS错误数据收集
assetSpeed: true, // 开启静态资源数据收集
pagePerformance: true, // 开启页面加载数据收集
webVitals: true, // 开启页面性能数据收集
session: true, // 开启会话追踪数据收集
api: { // 开启API数据收集
apiDetail: true, // 开启上报API请求的详细信息(包括详细的请求和响应参数)
retCodeHandler: () => {}, // 自定义返回码handler函数,在API监控部分有详细使用方法
},
}
});
提醒

如果electron应用加载页面的方式是loadfile而不是loadurl,很多功能无法正常使用,例如页面访问,页面加载等与web相关的功能。

配置方法

Electron分为主进程与渲染进程,有部分应用数据只能在主进程获得而无法在渲染进程获得,建议使用IPC方法在主进程与渲染进程共享关键的应用数据,如设备ID,用户ID等。

主进程设置IPC调用

const { app, ipcMain } = require('electron');

// 设置用户ID,设备ID跟bundleID
const userID = 'userID';
const deviceID = "devieID";
const bundleID = "bundleID";

// 提供应用版本给渲染进程
ipcMain.handle('get-app-version', () => {
return app.getVersion();
});

// 提供设备ID给渲染进程
ipcMain.handle('get-device-id', () => {
return deviceID;
});

// 提供用户ID给渲染进程
ipcMain.handle('get-user-id', () => {
return userID;
});

// 提供bundleID给渲染进程
ipcMain.handle('get-bundle-id', () => {
return bundleID;
});

暴露IPC函数到渲染进程

在perload.js里注册在主进程声明的IPC调用

const { contextBridge, ipcRenderer } = require('electron');

contextBridge.exposeInMainWorld('electronAPI', {
getAppVersion: () => ipcRenderer.invoke('get-app-version'),
getDeviceId: () => ipcRenderer.invoke('get-device-id'),
getUserId: () => ipcRenderer.invoke('get-user-id'),
getBundleId:() => ipcRenderer.invoke('get-bundle-id'),
});

渲染进程获得应用数据

// 通过IPC获得app版本,设备ID,用户ID,bundleID
const appVersion = await window.electronAPI.getAppVersion();
const deviceID = await window.electronAPI.getDeviceId();
const userID = await window.electronAPI.getUserId();
const bundleID = await window.electronAPI.getBundleId();

setConfig

该方法用来修改实例配置,比如下面场景: 在实例化 SDK 时需要传入配置对象

// 主进程修改实例配置
aegis.setConfig({
uid: userID,
aid: deviceID,
extField: {bundleID: bundleID},
});

// 渲染进程修改实例配置
window.Aegis.setConfig({
uid: userID,
aid: deviceID,
extField: { appVersion: appVersion, bundleID: bundleID},
});

很多情况下,并不能一开始就获取到用户的 uid,而等获取到用户的 uid 才开始实例化 SDK 就晚了,这期间发生的错误 SDK 将监听不到。uid 的设置可以在获取到用户的时候:

const aegis = new Aegis({
id: 'pGUVFTCZyewxxxxx'
//...
//...其他配置
})

// 拿到uid之后...
aegis.setConfig({
uid: userID
})