更新时间:2026-08-13 GMT+08:00
分享

Harmony SDK接入

APM Harmony SDK拥有以下应用监控能力:采集上报App崩溃、卡顿、错误信息、网络请求、终端设备、自定义事件等。

支持平台

API 12及以上。

传输协议

HTTPS

版本更新说明

表1 版本更新说明

版本号

SDK下载地址

更新说明

系统

2.0.6

SDK下载

  • 解决用户在初始化之后setUid和setTag不生效的问题。
  • 解决用户ID在特殊场景下自动刷新的问题。
  • 封装HTTP请求方法,监听HTTP请求下的API数据。

API 12 及以上

2.0.5

SDK下载

解决setUid和setTag方法被混淆的问题。

API 12 及以上

2.0.3

SDK下载

  • 添加参数校验。
  • 添加调试日志。

API 12 及以上

2.0.2

SDK下载

解除SDK中对其他包的依赖。

API 12 及以上

2.0.1

SDK下载

提供采集上报App启动性能、崩溃、卡顿、错误、网络请求、终端设备、自定义上报等应用监控能力。

API 12 及以上

集成SDK

  1. 项目引入Harmony SDK。

    • 方法一:从Harmony仓库拉取SDK。
      1. 使用如下命令,从Harmony仓库拉取SDK。
         ohpm install apm_harmony_sdk
      2. 配置文件中添加依赖并引入SDK。
        在app/oh-package.json5中添加依赖
          dependencies {
            ...
            "apm_harmony_sdk": "2.0.6"
            ...
           }
        
          // 在终端中运行以下命令安装SDK
          ohpm install
    • 方法二:手动引入SDK。
      1. 下载应用性能监控SDK包
      2. 将下载到的har静态库文件添加到您的项目工程中(以下以根目录下的plugin文件夹为例)。
      3. 在app/oh-package.json5文件中添加依赖。
        dependencies {
              ...
              "apm_harmony_sdk": "file:../plugin/apm_harmony_sdk.har" // HAR包存放地址
              ...
            }
      4. 在终端中运行以下命令使能SDK。
        ohpm install

  2. 数据上报与获取网络状态需要在module.json5中打开相关权限,文件路径application > src > main > module.json5。

    "requestPermissions":[
          {
            "name": "ohos.permission.INTERNET"
          },
          {
            "name": "ohos.permission.GET_NETWORK_INFO"
          }
        ],

配置参数

  1. 登录APM控制台,创建Harmony App应用,详细操作参见Harmony接入APM
  2. 下载配置文件apm-sdk-config.json,并将文件拖入项目资源目录中,项目资源目录路径“src > main > resources > rawfile”。

    表2 配置参数说明

    参数名称

    是否必填

    默认值

    描述

    appId

    -

    移动端AppID。

    authorization

    -

    用于App的匹配。

    region

    -

    上报APM所处的region,目前支持cn-north-4。

    uid

    -

    用户自定义ID。

    tag

    -

    用户自定义标签,多个时使用英文逗号隔开。

    url

    -

    要上报APM的公网地址域名。

    networkWhiteList

    -

    网络监控白名单,排除监控。

    cacheThreshold

    200条

    当本地数据库存储条数达到该值会触发上报,取值范围为30-1000条。

    timeInterval

    60秒

    定时器每隔该值会触发上报,取值范围为60-1800秒。

    reportBackground

    true

    是否开启APP切后台上报功能。

    reportLaunch

    false

    是否开启APP启动时上报功能。如需开启,请在UIApplicationDidFinishLaunchingNotification通知发送前启动SDK。

    enableNetwork

    false

    是否开启网络采集。

    enableCrash

    false

    是否开启崩溃采集。

    enableLaunch

    false

    是否开启启动采集。

    enableANR

    false

    是否开启卡顿采集。

    enableError

    false

    是否开启错误采集。

    enableDevice

    false

    是否开启终端设备采集。

    enableEvent

    false

    是否开启用户自定义上报。

    traceType

    apm

    链路追踪类型。

    • 开启:otel。
    • 关闭:apm。

    logLevel

    off

    调试日志等级。

    • debug
    • info
    • warn
    • error
    • off

    samplingRate

    1.0

    采样率,取值范围0~1.0。

SDK使能

  1. 引入依赖模块。

    import { APMSDK } from "apm_harmony_sdk";

  2. 启动及自定义参数设置。

    // 启动SDK,在onCreate函数中添加以下代码:
     APMSDK.start(this.context.getApplicationContext());
    
     // 设置自定义ID
     APMSDK.setUid(自定义ID);
    
     // 设置自定义标签
     APMSDK.addTag(自定义标签);

其他方法

  1. 自定义上报错误数据。

    // 在try...catch...中添加捕获错误并上报到APM平台
     // 1.捕获Error类型
     import { APMSDK } from "apm_harmony_sdk";
     try {
       ...
     } catch(e) {
       APMSDK.reportError(e);
     }
     // 2.捕获BusinessError类型
     const response = await session.fetch(request).then((rep: rcp.Response) => {
        ...
     }).catch((err: BusinessError) => {
        ...
        APMSDK.reportBusinessError(err);
     });

  2. 使用rcp拦截器,上报API数据到APM平台。

    // 代码示例:
     import { APMRcpInterceptor, ResponseCache } from "apm_harmony_sdk";
     async function testInterceptor() {
      const cache: ResponseCache = new ResponseCache();
      const session = rcp.createSession({
        interceptors: [new APMRcpInterceptor(cache)]
      });
      const response = await session.get('上报地址');
    }

  3. 自定义埋点,主动上报数据。

    // APMCallbackHttp:监听带有url,OPTIONS,CALLBACK三个参数的请求
    import { APMCallbackHttp } from "apm_harmony_sdk";
    try {
        APMCallbackHttp(
        // 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定
        "EXAMPLE_URL",
        {
          method: http.RequestMethod.GET, // 可选,默认为http.RequestMethod.GET
          // 开发者根据自身业务需要添加header字段
          header: {
            'Content-Type': 'application/json'
          }}, (err: BusinessError, data: http.HttpResponse) => {
        if (!err) {
          // data.result为HTTP响应内容,可根据业务需要进行解析
          console.info('Result:' + JSON.stringify(data.result));
          console.info('code:' + JSON.stringify(data.responseCode));
          // data.header为HTTP响应头,可根据业务需要进行解析
          console.info('header:' + JSON.stringify(data.header));
          console.info('cookies:' + JSON.stringify(data.cookies)); // 8+
        } else {
          console.error('error:' + JSON.stringify(err));
        }
      });
    } catch (e) {
      console.log(e);
    }
    
    // APMPromiseHttp:监听带有url,OPTIONS两个参数返回PROMISE的请求
    import { APMPromiseHttp } from "apm_harmony_sdk";
    try {
      let httpRequest = http.createHttp();
      const res = await APMPromiseHttp(
        // 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定
        "http://EXAMPLE_URL/apm2/web/cmdb/business/v1/test2",
        {
          method: http.RequestMethod.GET, // 可选,默认为http.RequestMethod.GET
          // 开发者根据自身业务需要添加header字段
          header: {
            'Content-Type': 'application/json'
          }});
      console.log('res:' + JSON.stringify(res));
    } catch (e) {
      console.log(e);
    }

相关文档