ARMS用户体验监控提供了鸿蒙(HarmonyOS)SDK用于监控鸿蒙应用。本文介绍如何集成HarmonyOS SDK并将应用接入用户体验监控。
版本要求
手机的@ohos.deviceInfo.sdkApiVersion值需为12-13。
Stage应用的compatibleSdkVersion不低于5.0.0(12)。
步骤一:创建应用
登录ARMS控制台。
在左侧导航栏选择
,并在顶部菜单栏选择目标地域。在应用列表页面单击添加应用。
在创建应用面板单击HarmonyOS。
在HarmonyOS面板输入应用名称和描述,然后单击创建。
说明应用名称唯一,不能与已创建的应用名称重复。
创建成功后,当前应用将会自动生成对应的ConfigAddress(上报地址)和AppID。
步骤二:集成SDK
鸿蒙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" }
依赖设置完成后,执行ohpm install命令安装依赖包,依赖包会安装到工程的oh_modules目录下。
ohpm install
Rebuild项目,确保配置生效。
步骤三:配置SDK
配置授权信息。
检查应用程序的module.json5配置文件,确保已引入如下授权:
ohos.permission.INTERNET 发送网络数据 ohos.permission.GET_NETWORK_INFO 获取网络状态信息
配置ohmurl规则。
将工程级或模块级build-profile.json5中的useNormalizedOHMUrl修改为true,若没有该配置项请手动添加。
{ "app" : { "products": [{ "buildOption": { "strictMode": { "useNormalizedOHMUrl": true } } }] } }
初始化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()); }
网络采集。
目前支持采集的框架包括
hms.collaboration.rcp
、ohos.net.http
、ohos.net.webSocket
、ohos.net.socket.TCPSocket
和ohos.net.socket.UDPSocket
。当采集对应网络框架时,需要使用AlibabaCloudRumTrace引用这些框架类,各网络框架API使用同官网文档,如下是每个网络采集示例。视图/启动数据采集。
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)
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是否已经接入成功
在初始化时,通过链式方式随
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());
启动应用后,查看DevEco-studio Hilog日志,并搜索
ORSDK
。ORSDK-Agent I starting... (注:Agent 集成成功) ORSDK-Agent I OpenRum token***** (注:Agent 启动成功)