接入鸿蒙应用

ARMS用户体验监控提供了鸿蒙(HarmonyOS)SDK用于监控鸿蒙应用。本文介绍如何集成HarmonyOS SDK并将应用接入用户体验监控。

版本要求

  • 手机的@ohos.deviceInfo.sdkApiVersion值需为12-13。

  • Stage应用的compatibleSdkVersion不低于5.0.0(12)。

步骤一:创建应用

  1. 登录ARMS控制台

  2. 在左侧导航栏选择用户体验监控 > 应用列表,并在顶部菜单栏选择目标地域。

  3. 应用列表页面单击添加应用

  4. 创建应用面板单击HarmonyOS

  5. HarmonyOS面板输入应用名称和描述,然后单击创建

    说明

    应用名称唯一,不能与已创建的应用名称重复。

    创建成功后,当前应用将会自动生成对应的ConfigAddress(上报地址)和AppID。

步骤二:集成SDK

  1. 鸿蒙RUM SDK已发布到第三方仓库中,可以通过如下两种方式集成SDK:

    • 方式一:在Terminal窗口,切换到模块级目录,执行如下命令安装第三方包,DevEco Studio会自动在该模块的oh-package.json5中添加第三方包依赖。

      cd path/to/your/project
      ohpm config set registry https://ohpm.openharmony.cn/ohpm/
      ohpm install @alibabacloud_rum/harmony_sdk
    • 方式二:在工程oh-package.json5中的dependencies下增加SDK Har包依赖,配置如下:

      "dependencies": {
        "@alibabacloud_rum/harmony_sdk": "^0.1.0"
      }
  2. 依赖设置完成后,执行ohpm install命令安装依赖包,依赖包会安装到工程的oh_modules目录下。

    ohpm install
  3. 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. 初始化SDK。

    在入口entry moudle自定义AbilityStage中的onCreate函数中,添加如下代码。

    AlibabaCloudRum.withAppID("<your appid>") // AppID 参考步骤一创建RUM应用时获取
          .withConfigAddress("<your config address") // ConfigAddress 参考步骤一创建RUM应用时获取
          .start(this.context.getApplicationContext());

    代码示例:

    onCreate(): void {
      this.initAlibabaCloudRumSdk();
    }
    
    private initAlibabaCloudRumSdk() {
      AlibabaCloudRum.withAppID("<your appid>")
        .withConfigAddress("<your config address")
        .start(this.context.getApplicationContext());
    }
  4. 网络采集。

    目前支持采集的框架包括hms.collaboration.rcpohos.net.httpohos.net.webSocketohos.net.socket.TCPSocketohos.net.socket.UDPSocket。当采集对应网络框架时,需要使用AlibabaCloudRumTrace引用这些框架类,各网络框架API使用同官网文档,如下是每个网络采集示例。

    hms.collaboration.rc

    需要在rcp.createSessionAPI前添加AlibabaCloudRumTrace开头。

    import { rcp } from '@kit.RemoteCommunicationKit';
    import { AlibabaCloudRumTrace } from '@alibabacloud_rum/harmony_sdk';
    
    // 示例1: 无参数传递
    let session1 = AlibabaCloudRumTrace.rcp.createSession(); // 添加 AlibabaCloudRumTrace 开头引用
    
    // 示例2: 有参数传递
    let session2 = AlibabaCloudRumTrace.rcp.createSession({}); // 添加 AlibabaCloudRumTrace 开头引用

    ohos.net.http

    需要在http.createHttpAPI前添加AlibabaCloudRumTrace 开头。

    import { http } from '@kit.NetworkKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    import { AlibabaCloudRumTrace } from '@alibabacloud_rum/harmony_sdk';
    
    let httpRequest = AlibabaCloudRumTrace.http.createHttp(); // 添加 AlibabaCloudRumTrace 开头引用
    let options: http.HttpRequestOptions = {};
    let promise = httpRequest.request(
       'request url', options
    );
    promise.then((responseData: http.HttpResponse) => {
    }).catch((err: BusinessError) => {
    })

    ohos.net.webSocket

    需要在webSocket.createWebSocket API前添加AlibabaCloudRumTrace开头。

    import { webSocket } from '@kit.NetworkKit';
    import { AlibabaCloudRumTrace } from '@alibabacloud_rum/harmony_sdk';
    
    let webSocketInstance: webSocket.WebSocket = AlibabaCloudRumTrace.webSocket.createWebSocket(); // 添加 AlibabaCloudRumTrace 开头引用

    ohos.net.socket.TCPSocket

    需要在调用socket.constructTCPSocketInstance API前添加AlibabaCloudRumTrace开头。

    import { socket } from '@kit.NetworkKit';
    import { AlibabaCloudRumTrace } from '@alibabacloud_rum/harmony_sdk';
    
    let tcpSocketInstance: AlibabaCloudRumTrace.socket.TCPSocket = AlibabaCloudRumTrace.socket.constructTCPSocketInstance(); // 添加 AlibabaCloudRumTrace 开头引用

    ohos.net.socket.UDPSocket

    需要在socket.constructUDPSocketInstance API前添加AlibabaCloudRumTrace开头。

    import { socket } from '@kit.NetworkKit';
    import { AlibabaCloudRumTrace } from '@alibabacloud_rum/harmony_sdk';
    
    let udpSocketInstance: AlibabaCloudRumTrace.socket.UDPSocket = AlibabaCloudRumTrace.socket.constructUDPSocketInstance(); // 添加 AlibabaCloudRumTrace 开头引用
  5. 视图/启动数据采集。

    Ability数据采集

    UIAbility的子类声明上添加@AlibabaCloudRumTrace.InjectAbility装饰器。

    import { AlibabaCloudRumTrace } from '@alibabacloud_rum/harmony_sdk';
    
    @AlibabaCloudRumTrace.InjectAbility
    export default class EntryAbility extends UIAbility {
      onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    
      }
    
      onWindowStageCreate(windowStage: window.WindowStage): void {
    
      }
    
      onForeground(): void {
    
      }
    
      onBackground(): void {
    
      }
    
      onWindowStageDestroy(): void {
    
      }
    
      onDestroy() {
    
      }
    }

    AbilityStage数据采集

    AbilityStage的子类声明上添加@AlibabaCloudRumTrace.InjectStage装饰器。

    import { AlibabaCloudRumTrace } from '@alibabacloud_rum/harmony_sdk';
    
    @AlibabaCloudRumTrace.InjectStage
    export default class EntryAbilityStage extends AbilityStage {
    
      onCreate() {
      }
    
      onMemoryLevel(level: AbilityConstant.MemoryLevel): void {
      }
    }

    Page数据采集

    Page结构下面添加AlibabaCloudRumTrace.InjectPage(Index)接口调用并传入当前结构。

    Page生命周期函数 ( aboutToAppear、onPageShow、onPageHide、aboutToDisappear)尽量复写,否则可能影响快照数据采集和性能准确性。

    import { AlibabaCloudRumTrace } from '@alibabacloud_rum/harmony_sdk';
    
    @Entry
    @Component
    struct Index {
      build() {
      }
    
      aboutToAppear(): void {
      }
    
      onPageShow(): void {
      }
    
      onPageHide(): void {
      }
    
      aboutToDisappear(): void {
      }
    }
    
    AlibabaCloudRumTrace.InjectPage(Index)
  6. Web数据采集。

    Web性能数据采集

    设置采集接口共有两种方案:

    • 第一种(推荐):

      javaScriptOnDocumentStart、onControllerAttached中分別添加 AlibabaCloudRumTrace.Web.getScriptItem()AlibabaCloudRumTrace.Web.onControllerAttachedHilt(this.controller)

      import { AlibabaCloudRumTrace } from '@alibabacloud_rum/harmony_sdk';
      
      Web()
        .javaScriptOnDocumentStart([AlibabaCloudRumTrace.Web.getScriptItem()])
        .onControllerAttached(() => {
          AlibabaCloudRumTrace.Web.onControllerAttachedHilt(this.controller); 
          // this.controller:必须是当前Web绑定的WebviewController
        })
    • 第二种:

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

      import { AlibabaCloudRumTrace } from '@alibabacloud_rum/harmony_sdk';
      
      Web()
        .onPageEnd((event) => {
          AlibabaCloudRumTrace.Web.onPageEndHilt(this.controller); 
          // this.controller:必须是当前Web绑定的WebviewController
        })

    Web异常数据采集

    onErrorReceive、onHttpErrorReceive、onSslErrorEventReceive中添加对应的AlibabaCloudRumTrace.Web方法。

    import { AlibabaCloudRumTrace } from '@alibabacloud_rum/harmony_sdk';
    
    Web()
      .onErrorReceive((event) => {
        if (!event) {
          return;
        }
        AlibabaCloudRumTrace.Web.onErrorReceive(event.request, event.error, this.controller.getWebId()); // this.controller:必须是当前Web绑定的WebviewController
      })
      .onHttpErrorReceive((event) => {
        if (!event) {
          return;
        }
        AlibabaCloudRumTrace.Web.onHttpErrorReceive(event.request, event.response, this.controller.getWebId()); // this.controller:必须是当前Web绑定的WebviewController
      })
      .onSslErrorEventReceive((event) => {
        AlibabaCloudRumTrace.Web.onSslErrorEventReceive(event.error, this.controller.getWebId()); // this.controller:必须是当前Web绑定的WebviewController
      })
    

步骤四:验证SDK是否已经接入成功

  1. 在初始化时,通过链式方式随AlibabaCloudRum.withAppID(<your app_id>).start(this.context.getApplicationContext()一同配置.withOpenHilog(),开启日志打印开关,需要在调用start函数之前,调用withAppID函数之后进行相关配置。

    AlibabaCloudRum.withAppID("<your appid>") // AppID 在创建 RUM 应用时获取
          .withConfigAddress("<your config address") // ConfigAddress 在创建 RUM 应用时获取
          .withOpenHilog()
          .start(this.context.getApplicationContext());
  2. 启动应用后,查看DevEco-studio Hilog日志,并搜索ORSDK

    image

    image

    ORSDK-Agent   I   starting...         (注:Agent 集成成功)
    ORSDK-Agent   I   OpenRum token*****   (注:Agent 启动成功)

相关文档