全部產品
Search
文件中心

Cloud Monitor:接入鴻蒙應用

更新時間:Jan 15, 2026

使用者體驗監控提供了非常全面的移動端應用監控能力,支援對應用效能、崩潰、卡頓等關鍵計量的進行即時監控與分析。本文介紹如何整合鴻蒙(HarmonyOS) SDK並將應用接入。

版本要求

  • Stage應用的compatibleSdkVersion不低於5.0.0(12)。

  • SDK的接入參數在2.0.0 版本發生變化,並且與之前的版本不相容。升級到 2.0.0 及以上版本時,為了確保 SDK 能夠被正常初始化,請按照最新接入文檔完成 SDK 接入和升級。

步驟一:整合 SDK

  1. 鴻蒙 RUM SDK 發行到第三方倉庫中,在工程 oh-package.json5 的 dependencies 中添加 sdk har 包依賴,配置如下:

    "dependencies": {
      "@alibabacloud_rum/harmony_sdk": "2.0.2"
    }

    依賴設定完成後,需要執行 ohpm install 命令安裝依賴包,依賴包會安裝到工程的 oh_modules 目錄下。

    ohpm clean
    ohpm install
  2. Rebuild 專案,確保配置生效。

步驟三:配置 SDK

1. 配置授權資訊

檢查應用程式 module.json5 設定檔,確保已引入如下授權:

ohos.permission.INTERNET            發送網路資料 
ohos.permission.GET_NETWORK_INFO    擷取網路狀態資訊

2. 配置 ohmurl 規則

將工程級或模組層級 build-profile.json5 中的 useNormalizedOHMUrl 修改為 true,若沒有該配置項請手動添加。

{
  "app" : {
    "products": [{
      "buildOption": {
          "strictMode": {
            "useNormalizedOHMUrl": true
          }
        }
    }]
  }
}

3. 配置 hvigor 外掛程式

Hvigor 外掛程式與 SDK 搭配使用,用於在編譯時間將探針代碼注入到您的鴻蒙應用中。

重要

該外掛程式作用於網路採集,目前支援採集的網路架構有:

  • hms.collaboration.rcp

  • ohos.net.http

  • ohos.net.webSocket

  • ohos.net.socket.TCPSocket

如果您工程中沒有使用如上網路程式庫,可以不安裝外掛程式。

  1. 添加依賴聲明。

    在工程下的 hvigor/hvigor-config.json5 中添加外掛程式依賴:

    {
      "dependencies": {
        "@arms/rum-harmonyos-plugin": "^1.0.3"
      }
    }
  2. 安裝依賴。

    • 方式1:執行編輯區右上方 Sync Now 或執行菜單File > Sync and Refresh Project進行工程Sync,DevEco Studio將會根據hvigor-config.json5中的依賴配置自動安裝。

    • 方式2:使用 hvigorw 命令列工具執行任一命令,命令列工具會自動執行安裝構建依賴。

      hvigorw --sync
  3. (必要)建立設定檔。

    在您的專案根目錄下建立一個名為 alibabaCloudRumConfig.txt 的設定檔。該檔案用於指定外掛程式需要處理和忽略的源碼範圍。檔案內容需要配置:

    -hook:指定需要處理的目錄或檔案。外掛程式將掃描並處理這些路徑下的源碼檔案。

    -keep:指定需要排除(即不處理)的目錄或檔案。即使 hook 包含了這部分路徑,keep 指定的路徑也會被跳過。

    即網路採集僅在配置的 hook 路徑下生效。

    樣本:

    # 指定需要處理的 ets 源碼根目錄
    -hook ./src/main/ets/
    
    # 指定不處理 hook 目錄下的任何檔案
    -keep ./src/main/ets/hook/
  4. 將外掛程式添加到您的模組構建設定檔 hvigorfile.ts 中。

    import { hapTasks } from '@ohos/hvigor-ohos-plugin';
    // 引入外掛程式
    import { AlibabaCloudRumPlugin } from '@arms/rum-harmonyos-plugin';
    
    // 在你的構建配置中
    export default {
      system: hapTasks,
      plugins: [
        // 添加外掛程式執行個體,注意這裡需要調用函數
        AlibabaCloudRumPlugin() 
      ]
    };

4. 初始化 SDK

  • 方式一推薦

    在入口 entry module 自訂 AbilityStage 中的 onCreate 函數中,添加如下代碼。

    AlibabaCloudRum.withServiceId("${your_serviceId}") // ServiceId 在建立 RUM 應用時擷取
          .withEndpoint("${your_endpoint}") // Endpoint 在建立 RUM 應用時擷取
          .withWorkspace("${your_workspace}")// Workspace 在建立 RUM 應用時擷取
          .start(this.context.getApplicationContext()); //擷取 application 上下文
  • 方式二

    如果由於App自身商務邏輯,不能在自訂 AbilityStage 的 onCreate 生命週期進行 SDK 初始化。可以考慮在第一個頁面載入的生命週期內進行 SDK 的初始化。此時在頁面載入前 App 發生的行為 SDK 採集不到是符合預期的。在第一個頁面載入的生命週期內,添加如下代碼:

    AlibabaCloudRum.withServiceId("${your_serviceId}") // ServiceId 在建立 RUM 應用時擷取
          .withEndpoint("${your_endpoint}") // Endpoint 在建立 RUM 應用時擷取
          .withWorkspace("${your_workspace}")// Workspace 在建立 RUM 應用時擷取
          .withUiContext(this.getUIContext()) //擷取 uiContext 上下文
          .start(getContext(this).getApplicationContext()) //擷取 application 上下文

5. 資料擷取

目前鴻蒙 SDK 支援對部分資料的無感知採集,其中對三方網路程式庫 axios 和 webview 的採集需要手動埋點,具體步驟參考如下。

Axios 網路採集

  1. (可選配置)端對端的全鏈路打通需要在要求標頭中插入Alibaba的自訂業務要求標頭,如不需要全鏈路業務可跳過此步驟。注意,若使用端對端全鏈路打通功能,需要事先在控制台配置 host 白名單,具體操作請參見 App監控關聯前後端Trace

    重要

    每條網路請求自訂頭都需要重新擷取賦值,非同一個requestUrl的API調用結果不要複用!

    function getInsertHeaderMap(requestUrl: string): Map<string, string> | undefined

    參數

    是否必要

    說明

    參數限制

    失敗結果

    requestUrl

    必要

    請求URL

    String類型。有效請求地址

    當次擷取無效

    //樣本通過`AxiosRequestConfig`插入要求標頭,您也可以通過實現請求攔截器處理`InternalAxiosRequestConfig.headers`進行插頭操作
    import axios, {
      AxiosError,
      AxiosHeaders,
      AxiosResponse,
      AxiosRequestConfig,
      InternalAxiosRequestConfig
    } from '@ohos/axios'
    import { AlibabaCloudRumTrace } from '@alibabacloud_rum/harmony_sdk'
    
    let customHeaders: AxiosHeaders = new AxiosHeaders()
    let traceHeader = AlibabaCloudRumTrace.axios.getInsertHeaderMap("https://www.example.com");
    if (traceHeader) {
      traceHeader.forEach((value: string, key: string) => {
        customHeaders.set(key, value);
      })
    }
    // 通過AxiosRequestConfig插入到實際要求標頭中
    let requestConfig: AxiosRequestConfig = {
      method: this.currMethod,
      headers: customHeaders,
      params: this.currRequestParam
    }
    axios.get("https://www.example.com", requestConfig);
  2. (必要配置)採集正常/異常網路資料。

    function handleSuccess(requestUrl: string, method: string, responseCode: number,
        requestDataSizeByte?: number, downloadSizeByte?: number,
        timingParam?: object, remoteAddressIP?: string, requestHeader?: Record<string, Object>,
        responseHeader?: Record<string, Object>, resourceType?: string, requestBody?: string)

    參數說明:

    參數

    是否必要

    說明

    參數限制

    失敗結果

    requestUrl

    必要

    請求URL

    String類型。有效請求地址

    當次網路事件不採集

    method

    必要

    要求方法

    String類型。非HTTP要求方法,傳Null 字元串即可

    當次網路事件不採集

    responseCode

    必要

    響應碼

    Number類型

    當次網路事件不採集

    requestDataSizeByte

    可選

    請求上傳資料大小

    Number類型(單位Byte)

    當次網路事件不採集

    downloadSizeByte

    可選

    下載大小

    Number類型(單位Byte)

    當次網路事件不採集

    timingParam

    可選

    axios 請求各個階段所花費的時間

    http.PerformanceTiming類型

    當次網路事件不採集

    remoteAddressIP

    可選

    目標地址IP

    String類型

    當次網路事件缺失相關欄位

    requestHeader

    可選

    請求Header,當需要使用鏈路打通功能,此參數需要必傳

    Record類型

    當次網路事件缺失相關欄位

    responseHeader

    可選

    響應header

    Record類型

    當次網路事件缺失相關欄位

    resourceType

    可選

    資源類型

    String類型。遵循MIME類型的Content-Type欄位

    當次網路事件缺失相關欄位

    requestBody

    可選

    請求內容

    String類型

    當次網路事件缺失相關欄位

    採集異常網路資料:

    function handleError(requestUrl: string, method: string, requestDataSizeByte: number, errorParam: Error,requestHeader?: Record<string, Object>)

    參數

    是否必要

    說明

    參數限制

    失敗結果

    requestUrl

    必要

    請求URL

    String類型。有效請求地址

    當次網路事件不採集

    method

    必要

    要求方法

    String類型。非HTTP要求方法,傳Null 字元串即可

    當次網路事件不採集

    requestDataSizeByte

    必要

    請求上傳資料大小

    Number類型(單位Byte)

    當次網路事件不採集

    errorParam

    必要

    網路Error錯誤

    BusinessError類型

    當次網路事件不採集

    requestHeader

    可選

    請求header

    Record類型

    當次網路事件缺失相關欄位

    樣本如下:

    axios.get("http://www.example.com",requestConfig).then((responseData: AxiosResponse) => {
      AlibabaCloudRumTrace.axios.handleSuccess("http://www.example.com", "GET", responseData.status, requestDataSize, downloadSize, responseData.performanceTiming);
    }).catch((err: BusinessError) => {
      AlibabaCloudRumTrace.axios.handleError("http://www.example.com", "GET", 0, err);
    });

Webview 資料擷取

在 Web 元件的生命週期回調中添加 SDK 採集邏輯,具體如下:

  1. 插入js指令碼:

    javaScriptOnDocumentStart的參數中,添加 AlibabaCloudRumTrace.Web.getScriptItem()

  2. 在 onPageEnd 生命週期埋點:

    onPageEnd 中添加AlibabaCloudRumTrace.Web.onPageEndHilt(this.controller);

  3. 在卸載組件時銷毀 SDK 相關採集資源:

    onDisAppear中添加AlibabaCloudRumTrace.Web.onDisAppearHilt(this.controller)

程式碼範例:

import { AlibabaCloudRumTrace } from '@alibabacloud_rum/harmony_sdk';

Web()
  .javaScriptOnDocumentStart([AlibabaCloudRumTrace.Web.getScriptItem()])
  .onPageEnd(() => {
    AlibabaCloudRumTrace.Web.onPageEndHilt(this.controller); 
    // this.controller:必須是當前Web綁定的WebviewController
  })
  .onDisAppear(() => {
    AlibabaCloudRumTrace.Web.onDisAppearHilt(this.controller);
    // this.controller:必須是當前Web綁定的WebviewController
  })