Android & iOS 使用 ARMS 用户体验监控(RUM)的最佳实践

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
云原生网关 MSE Higress,422元/月
性能测试 PTS,5000VUM额度
简介: 本文主要介绍了 ARMS 用户体验监控的基本功能特性,并介绍了在几种常见场景下的最佳实践。

作者:元泊


引言


背景信息

随着移动互联网技术的持续演进与全民互联网时代的深入,用户在 Android、iOS 应用程序、小程序、H5 游戏及网页等多元化平台上的交互时长显著增长。这一趋势加剧了用户体验(UX)场景的复杂性,并对跨设备及多样网络环境下的性能监控提出了更高要求。在此背景下,深度剖析用户来源、浏览轨迹、驻留时长、访问速度性能,以及遭遇的任何体验障碍,不仅是解锁每位用户行为深层次需求的关键,也是驱动产品与服务优化、提升用户满意度的核心策略。


ARMS 用户体验监控介绍

image.png

ARMS RUM 是阿里云应用实时监控服务(ARMS)下的用户体验监控(RUM)产品,覆盖 Web/H5、各类平台小程序、Android、iOS、Flutter、ReactNative、Windows、macOS 等平台框架。接入 SDK 后会主动采集端侧页面性能、资源加载、API 调用、异常崩溃、卡顿、用户操作、系统信息等数据,还支持事件、日志、异常等数据按需自定义上报以满足业务数据分析需求,提供全面的性能分析、异常分析、产品分析、会话分析能力,帮助快速跟踪定位问题原因,提升产品用户使用体验。ARMS RUM 具备以下核心功能。


  • 前后端全链路打通能力,展示每跳详情,便捷剖析错慢调用
  • 记录会话轨迹,回溯用户操作,层层下钻定位根因
  • 全面采集异常信息,堆栈解析定位代码问题,便捷评估异常影响面
  • 多维度多指标页面性能统计,提供单次访问各阶段耗时分布,快速定位错慢资源
  • 资源加载和 API 调用全量采集,便捷筛选错慢、高频资源请求,多维分析资源请求性能
  • 自定义数据上报,满足业务数据采集,增强产品分析能力
  • 站点总览大盘,实时掌握访问趋势、性能指标、异常趋势、地域分布等站点信息
  • 支持各项指标告警配置,提供基于动态阈值异常检测告警
  • 提供数据探索,可进行数据多维统计,实现站点性能、用户行为灵活分析
  • 数据全开放,明细数据存储到 SLS,指标存储到 Prometheus,按需灵活使用


准备工作


在使用 ARMS 用户体验监控之前,您需要做一些准备工作。


  • 已开通应用实时监控服务(ARMS),请参见开通 ARMS[1]
  • 已创建对应平台的应用(支持 Android、iOS、Flutter、RN、Web、小程序、PC 等),请参见快速入门[2]


产品接入


接入 Android 用户体验监控

在 Android 平台上,推荐通过 Maven 方式接入。


首先,需要在工程根目录下的 build.gradle 脚本文件中添加插件依赖,如下:


buildscript {
  repositories {
    mavenLocal()
    google()
    mavenCentral()
    gradlePluginPortal()
  }
  
  dependencies {
    // 导入阿里云 ARMS RUM 插件依赖
    // 建议从官网获取最新版本SDK接入:https://help.aliyun.com/zh/arms/user-experience-monitoring/android-sdk-release-notes
    classpath "com.aliyun.rum:alibabacloud-android-rum-plugin:0.3.3"
  }
}


其次,需要在工程 App 模块对应的 build.gradle 脚本启用插件并添加 SDK 依赖,如下:


// 启用阿里云ARMS RUM插件
apply plugin: "com.aliyun.rum"

dependencies {
  // 导入阿里云ARMS RUM SDK
  // 建议从官网获取最新版本SDK接入:https://help.aliyun.com/zh/arms/user-experience-monitoring/android-sdk-release-notes
  implementation("com.aliyun.rum:alibabacloud-android-rum-sdk:0.3.3")
}


接着,需要在 Application 的 onCreate 方法或用户隐私同意之后完成 SDK 的初始化,如下:


import com.alibabacloud.rum.AlibabaCloudRum;

public class YourApplication extends Application {
  @Override
  public void onCreate() {
    super.onCreate();
    AlibabaCloudRum.withAppID("<your appid>") // AppID,创建RUM应用时获取。
      .withConfigAddress("<your config address>") // ConfigAddress,创建RUM应用时获取。
      .start(getApplicationContext());
  }
}


最后,完成权限和混淆规则配置。


权限配置:


<!--  必须  -->
<uses-permission android:name="android.permission.INTERNET"/>
<!--  必须  -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--  可选  -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--  可选  -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--  可选  -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>


混淆规则配置:


#ProGuard configurations for Aliyun ARMS RUM SDK
-keep public class com.openrum.**{*;}
-keep public class openrum.**{*;}
-keep public class com.alibabacloud.rum.**{*;}
-dontwarn com.openrum.**
-dontwarn openrum.**
#End Aliyun ARMS RUM SDK


接入 iOS 用户体验监控

iOS 平台推荐通过 CocoaPods 方式接入。


首先,在 Xcode 工程的 Podfile 文件中添加最新版本的 iOS SDK,如下:


source 'https://github.com/CocoaPods/Specs.git'

target 'iOSDemo' do
  # 导入阿里云ARMS RUM SDK
  # 建议从官网获取最新版本SDK接入:https://help.aliyun.com/zh/arms/user-experience-monitoring/ios-sdk-version-description
  pod 'AlibabaCloudRUM', '0.3.1'
end


并在项目根目录(或 Podfile 文件所在目录)下执行一下命令更新 Pod 环境:


pod install --repo-update


其次,在 main.m 或 AppDelegate.m 中导入头文件,如下:


// Objective-C
@import AlibabaCloudRUM;

// Swift
import AlibabaCloudRUM


最后,在 main 函数或 - application:didFinishLaunchingWithOptions:方法中完成 SDK 的初始化:


// Objective-C
[AlibabaCloudRUM setConfigAddress:@"<your config address>"];// ConfigAddress,创建RUM应用时获取。
[AlibabaCloudRUM startWithAppID:@"<your appId>"];// AppID,创建RUM应用时获取。

// Swift
AlibabaCloudRUM.setConfigAddress("<your config address>")// ConfigAddress,创建RUM应用时获取。
AlibabaCloudRUM.start("<your appId>")// AppID,创建RUM应用时获取。


通过以上方式,可以便捷的完成 Android、iOS SDK 的快速集成。通过这些 SDK 的集成,我们能够实时收集用户在应用中的行为数据,包括访问频率、操作路径和性能指标等。这样的数据为我们提供了极具价值的参考,使得我们能够识别用户痛点,优化应用性能,从而提升用户满意度。


接下来,我们可以利用收集到的数据进行深入分析,识别用户行为模式,制定针对性的优化策略。通过不断的监控与分析,我们将能够持续改进产品,为用户提供更加流畅的体验,进而增强用户留存率和品牌忠诚度。


常见场景分析


通过会话分析诊断异常

在用户体验监控中,会话被定义为用户与程序或网站交互的一连串活动,按照时间序列展示用户操作和相关的事件、资源请求以及崩溃、卡顿等异常事件。当出现崩溃或其他异常事件时,可以通过用户标识、用户 IP 等查询特定会话,回溯用户行为轨迹,通过上下文和错误诊断排查问题,快速定位问题根因。


如下图,当我们在异常统计中发现某个 OOM 异常次数明显升高时,可以借助会话分析能力快速定位导致 OOM 问题的根因:

image.png

在异常明细中可以找到会话 ID:

image.png

在新打开的页面中点击“会话”,可以获取到当前异常关联到的事件信息:

image.png

异常关联的事件会以时间正序展示,找到对应的异常事件,可以分析异常发生之前的事件。在本次异常事件中,事件类型为“用户行为-click”的 ConstraintLayout 事件很可能是导致本次异常的原因。

image.png

点击“ConstraintLayout”事件,可以看到是用户在 JavaCrashActivity 页面点击了“堆内存 oom”这个按钮导致的。

image.png

至此,通过用户的会话轨迹可以比较容易把异常事件与会话进行关联,从而在分析异常事件时,可以复现出用户的旅程信息,便于疑难问题的定位。


分析资源加载和 API 请求

资源加载和网络请求的性能对用户体验的影响至关重要,它会直接影响用户与应用程序之间的交互。用户体验监控提供资源加载和网络请求的性能监控,功能涵盖:趋势分析、多维度分布分析、缓慢/错误分析、指标统计分析等。


可以通过“资源加载”和“API 请求”分别进入到资源和 API 的分析页面。

image.png

左侧快捷筛选面板提供应用、资源、设备、系统、用户等维度的快捷筛选条件。可以通过资源名称对资源的 path 部分快速检索,如下图:

image.png

在资源名称中选择想要分析的资源,可以对该资源进行趋势和明细分析:

image.png

在趋势分析中,可以通过加载次数、加载缓慢次数、加载失败次数、平均加载耗时等关键指标,评估资源的整体加载状态。除此之外,还可以统计资源加载的地域、App 版本、联网方式、运营商分布等。


在资源加载明细中,可以对单条资源的加载情况进行详细分析。

image.png

在该页面中,会以图形化的方式对资源加载过程中的 DNS 查询、TCP 连接、SSL 建连、请求相应、内容传输等关键指标进行展示。可以比较便捷的看到资源加载过程中各个阶段的耗时,从而进行针对性优化。


除了耗时分布,资源请求发生时,应用版本、调用页面、地域、运营商等信息都会一同采集,便于在问题发生时进行聚类分析。


分析内嵌 H5 页面

用户体验监控支持采集 Android/iOS 内嵌 H5 页面的性能数据。不仅支持采集 JavaScript 类型的错误,还支持采集 H5 页面、H5 资源、H5 API 等相关的数据。H5 页面的性能监控数据会与 Android/iOS 原生性能监控数据通过 SessionId 关联,在同一个 Session 中,您既可以看到 Android/iOS 的性能监控数据,也能看到 H5 页面的监控数据。


分析 JavaScript 异常

异常统计>JS 错误分类,可以看到 JavaScript 相关的异常。

image.png

通过左侧的快捷筛选,可以通过设备、系统、用户等多个维度对 JavaScript 异常信息进行筛选。


在异常明细页面,可以直观的看到异常堆栈。如果明细页面透出的信息无法满足您的问题排查需要,还可以通过会话 ID 对异常进行关联分析。

image.png

点击会话 ID 关联的数值后,可以进入到如下页面:

image.png

通过分析 JavaScript 异常关联的会话以及页面等信息,可以还原在 JavaScript 异常发生时用户的行为轨迹,便于复现异常出现的场景。


分析 H5 页面性能

通过页面访问>WebView 页面,可以进入到 H5 页面性能分析的功能页面。

image.png

通过点击对应的页面名称,可以进入到页面访问明细。在该页面中,除了基础的设备、运营商、地域等信息之外,还透出了当前页面加载的性能数据。用户体验监控对页面加载耗时分布数据进行了可视化展示,通过这种方式可以比较方便的确定页面加载性能的瓶颈。为了更方便的的诊断页面加载性能,当前页面关联的资源加载等事件也会在下发以列表的形式展示,并在资源加载出现异常时标红展示,方便问题定位。

image.png


端到端链路打通

在典型的电子商务交易场景下,从用户界面触发的下单操作启动了一连串复杂的交互流程,这一过程穿越了多层架构并涉及多次向后端系统的深层次调用,共同织就了一条从客户端到服务器的端到端交易链路。在此复合型交互旅程中,任何单一节点的故障或性能瓶颈——包涵但不限于客户端逻辑处理的异常中断、后端服务响应时间的延迟增加,乃至外部不可控因素如移动网络环境的不稳定性——均具备潜在能力去阻滞交易流程的顺畅推进,严重时可导致交易失败。


进一步而言,故障根源分析在此情境下显得尤为棘手,尤其是当需精准定位问题系出自数据包在网络通道中的传输障碍,还是后端服务处理逻辑的效能低下时。通过端到端链路打通能力,可以记录请求在系统中的流转路径与状态,可以真实还原每一次请求的调用轨迹,快速定位错慢根因,并且通过请求粒度的数据关联实现业务影响面分析、业务异常排查等诉求。


通过用户体验监控进行端到端链路打通,需要先在应用设置的请求管理区域配置好需要打通链路的域名信息,如下:

image.png

当前支持 Skywalking v3 和 OpenTelemetry 协议。具体配置可以参考用户体验监控官网配置文档:https://help.aliyun.com/zh/arms/user-experience-monitoring/use-cases/mobile-association-trace


在 API 请求中勾选“包含调用链”选项,可以过滤出支持链路打通的网络 API 请求,如下:

image.png

点击右侧的“查看调用链”,可以看到具体的链路追踪详情:

image.png


进阶参考


设置用户扩展信息

用户体验监控 SDK 允许自定义设置用户相关的扩展信息,从而帮助您完成数据分析与实际用户相关联的需求场景。


1)Android 设置用户扩展信息


AlibabaCloudRum.setUserExtraInfo(new HashMap<String, Object>(){
    {
        put("shop_id", "hz_xh_234123");
        put("shop_name", "阿里云云谷店33333");
    }
});


2)iOS 设置用户扩展信息


[AlibabaCloudRUM setUserExtraInfo: 
    @{
        @"shopId": @12312313,
        @"shopName": @"云谷店"
    }
];


自定义异常

通过支持上报自定义异常,SDK 能够帮助开发者在业务逻辑出现异常时迅速捕获相关信息。这在用户体验受到影响时尤为重要,自定义异常的记录可以为开发团队提供关键信息,便于快速定位和解决问题,从而减少对用户的负面影响。需要通过调用 SDK 相关的 API 完成自定义异常数据的上报,如下:


1)Android 上报自定义异常


AlibabaCloudRum.setCustomException(
  "exceptionName-default", 
  "exceptionCauseBy-default", 
  "exceptionErrorDump-default"
);


2)iOS 上报自定义异常


[AlibabaCloudRUM setCustomException:@"exceptionName-default"
                            causeBy:@"exceptionCauseBy-default"
                          errorDump:@"exceptionErrorDump-default"
];


通过以上方式接入后,在控制台的异常统计 > 自定义页面中可以看到上报的自定义异常数据信息。

image.png

自定义事件

自定义事件允许开发者根据特定需求记录用户行为和应用事件。这种灵活性使得我们能够深入了解用户的交互方式,以及哪些功能受到用户的特别关注。通过分析这些自定义事件的数据,我们可以更好地优化用户旅程和提升产品的整体体验。需要通过调用 SDK 相关的 API 完成自定义事件数据的上报,如下:


1)Android 上报自定义事件


HashMap<String, Object> mapKv = new HashMap<>();
mapKv.put("shop_id", "hz_xh_234123");
mapKv.put("order_id", "12397495850");

double orderPrice = 123.34f;

AlibabaCloudRum.setCustomEvent("order-submit", "order", orderPrice, mapKv);


2)iOS 上报自定义事件


[AlibabaCloudRUM setCustomEvent:@"order-submit" 
                          group:@"order" 
                          value:123.34f 
                           info:@{
                                    @"shop_id": @"hz_xh_234123",
                                    @"order_id": @"12397495850"
                                }
];


关于自定义事件的更多使用方式,建议您参考官网文档 SDK 配置[3]


自定义日志

自定义日志功能提供了更高效的方式来记录特定的业务逻辑和应用状态。开发者可以按照自己的需求添加日志信息,使得在问题排查和性能监测时能够获得更深入的洞察。这些日志不仅有助于调试过程,也为后期的性能优化提供了数据支持。需要通过调用 SDK 相关的 API 完成自定义事件数据的上报,如下:


1)Android 上报自定义日志


HashMap<String, Object> mapKv = new HashMap<>();
mapKv.put("shop_id", "hz_xh_234123");
mapKv.put("order_id", "12397495850");

AlibabaCloudRum.setCustomLog("submit order info: order_id: 1312344933", 
                             "order-submit", 
                             "order snapshots info", 
                             "INFO", 
                             mapKv);


2)iOS 上报自定义日志


[AlibabaCloudRUM setCustomLog:@"submit order info: order_id: 1312344933"
                         name:@"order-submit"
                    snapshots:@"order snapshots info"
                        level:@"INFO"
                         info:@{
                                    @"shop_id": @"hz_xh_234123",
                                    @"order_id": @"12397495850
                              }
];


结语


本文主要介绍了 ARMS 用户体验监控的基本功能特性,并介绍了在几种常见场景下的最佳实践。ARMS 用户体验监控作为一个面向终端的实时监控服务,不仅能够提供专业的、深层次的、精细化的数据采集和洞察能力,还能通过集成 ARMS 应用监控和可观测链路 OpenTelemetry 版本进行端到端链路深度整合和分析。


相关链接:

[1] 开通 ARMS

https://help.aliyun.com/zh/arms/getting-started/activate-arms

[2] 快速入门

https://help.aliyun.com/zh/arms/user-experience-monitoring/quick-start/

[3] SDK 配置

https://help.aliyun.com/zh/arms/user-experience-monitoring/sdk-configuration/

附录:

RUM Web/H5 快速接入:

https://help.aliyun.com/zh/arms/user-experience-monitoring/access-web-h5-applications

RUM 小程序快速接入:

https://help.aliyun.com/zh/arms/user-experience-monitoring/access-applet

RUM 移动端快速接入:

https://help.aliyun.com/zh/arms/user-experience-monitoring/access-mobile-applications

RUM PC 端快速接入:

https://help.aliyun.com/zh/arms/user-experience-monitoring/access-pc-platform-application


点击此处,立即开通 ARMS 用户体验监控服务。

相关实践学习
通过云拨测对指定服务器进行Ping/DNS监测
本实验将通过云拨测对指定服务器进行Ping/DNS监测,评估网站服务质量和用户体验。
相关文章
|
23天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
15天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
19天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2570 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
17天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
1天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
152 2
|
19天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1566 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
2天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
21天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
921 14
|
16天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
685 9
|
15天前
|
存储 监控 调度
云迁移中心CMH:助力企业高效上云实践全解析
随着云计算的发展,企业上云已成为创新发展的关键。然而,企业上云面临诸多挑战,如复杂的应用依赖梳理、成本效益分析等。阿里云推出的云迁移中心(CMH)旨在解决这些问题,提供自动化的系统调研、规划、迁移和割接等功能,简化上云过程。CMH通过评估、准备、迁移和割接四个阶段,帮助企业高效完成数字化转型。未来,CMH将继续提升智能化水平,支持更多行业和复杂环境,助力企业轻松上云。