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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
性能测试 PTS,5000VUM额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本文主要介绍了 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 用户体验监控服务。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
测试技术 Android开发 iOS开发
一分钟教你Android、iOS如何实现自动化录屏,超实用!
在做移动端自动化测试的过程中,有很多场景需要录制设备的屏幕视频,比如Crash现场记录,启动/页面加载耗时类的评测等,那么如何实现Android和iOS设备的屏幕录制呢?
971 0
|
5月前
|
缓存 Android开发 iOS开发
打造高效移动应用:Android与iOS性能优化策略
【4月更文挑战第29天】 在移动设备日益成为用户日常互动的主要平台的今天,应用程序的性能已成为决定其成功的关键因素之一。本文将探讨针对Android和iOS平台的性能优化技巧,涵盖内存管理、多线程处理、网络请求优化以及用户界面的流畅性提升等方面。通过分析不同操作系统的架构特点,我们旨在提供一套综合性的策略,帮助开发者构建快速、响应迅捷且用户体验良好的应用。
|
5月前
|
缓存 监控 数据库连接
提升移动应用性能的关键策略:以Android为例
【5月更文挑战第14天】 在竞争激烈的移动应用市场中,卓越的性能是吸引和保留用户的重要因素。本文聚焦于Android平台,探讨了一系列提高移动应用响应速度、流畅度以及稳定性的策略。从内存优化到多线程处理,再到高效的网络通信,文中详细分析了各种性能瓶颈,并提出了相应的解决方案。通过实际案例和代码示例,我们展示了如何在实践中应用这些策略以实现性能的显著提升。
|
5月前
|
Java 开发工具 Android开发
SLS:使用 OTel 官方 SDK 采集 Android、iOS Trace 数据实践
本文介绍了使用 OTel 官方 SDK 采集 Android、iOS Trace 数据实践。
324 0
SLS:使用 OTel 官方 SDK 采集 Android、iOS Trace 数据实践
|
机器学习/深度学习 安全 测试技术
阿里云EMAS-专家测试服务iOS和Android上百种机型性能、兼容及UI等测试
阿里云EMAS测试专家有着集团内部多个日活过亿规模APP经验,提供EMAS专家测试,客户只需提交测试需求,从用例设计、脚本录制、海量机型测试、整理测试结果、48小时输出专家测试报告均由阿里云EMAS测试专家一站式服务完成。覆盖功能测试、深度兼容测试、性能测试、UI适配测试以及隐私合规检测等,帮助用户以更低成本获得高质量的全面测试能力,可用于APP正式发版前验收,规避手机APP上线前或发版过程中各类隐患。
503 0
阿里云EMAS-专家测试服务iOS和Android上百种机型性能、兼容及UI等测试
|
缓存 编解码 监控
Android 移动应用性能优化 之 友盟
Android 移动应用性能优化 之 友盟
157 0
Android 移动应用性能优化 之 友盟
|
开发工具 Android开发
XMark 一个简易的Android埋点解决方案
XMark 一个简易的Android埋点解决方案
169 0
XMark 一个简易的Android埋点解决方案
|
Android开发
Android 全埋点解决方案(1)
Android 全埋点解决方案
424 0
|
Android开发
Android 全埋点解决方案(2)
Android 全埋点解决方案
307 0
|
Android开发
Android 全埋点解决方案(3)
Android 全埋点解决方案
351 0