阿里云首页 移动开发平台 mPaaS

接入 iOS

移动性能监控(APM)依赖移动分析客户端 SDK 来进行埋点,收集 App 性能相关数据生成日志并上报到服务端。根据 mPaaS 客户端与服务端协定的埋点数据格式,服务端从客户端上传的埋点日志中提取有效数据,从而实现对客户端各项指标的监控分析。

本文介绍如何在客户端配置性能监控埋点,包括网络监控、H5 性能监控、页面加载监控、启动速度监控、小程序监控。

说明

当前公有云仅支持在 阿里云非金区环境 中使用 APM,专有云支持依赖部署的软件版本。

前提条件

  • 确保 mPaaS 基线版本 ≥ 10.1.68.44。如当前使用的基线版本低于 10.1.68.44,可参考 mPaaS 10.1.68 升级指南 进行基线版本升级。

  • 确保已接入移动分析组件。具体操作,参见 接入移动分析服务

  • 确保已接入移动网关组件。具体操作,参见 移动网关服务

  • 如需使用 H5 性能监控功能,需接入 H5 容器。具体操作参见 接入 H5 容器

  • 如需使用小程序性能监控功能,需接入小程序。具体操作参见 接入小程序

网络监控

开启网络监控开关

APM 网络性能监控埋点需要通过项目代码手动开启。在 App 启动过程中,调用如下代码以开启网络性能监控。

#import <MPMasAdapter/MPAnalysisHelper.h>

[MPAnalysisHelper startAPMNetMonitor];

mPaaS RPC 网络监控埋点

开启 APM 网络监控后,mPaaS RPC 的网络监控由 mPaaS 内置的网络框架自动进行,无需您在代码中手动进行埋点。

业务自定义网络监控埋点

如果您使用了非 mPaaS RPC 网络通讯,并想要对这部分的网络质量进行监控,则需要在 App 启动过程中开启 APM 网络监控,同时还需要对自己的网络调用进行手动埋点。

调用以下代码进行埋点:

#import <MPMasAdapter/MPRemoteLoggingInterface.h>

 NSDictionary *param =  @{@"op":@"http://custom.apm.com/a?c=d", @"rt":@"322", @"code":@"200"};
[MPRemoteLoggingInterface writeAPMNetLog:param];

传入的参数包括:

参数

说明

op

接口标识符。

rt

响应时长,单位 ms。

code

错误码。200 表示正常;999 表示无网络;其他错误可自定义。

H5 性能监控

H5 性能监控的埋点由 mPaaS H5 容器自动完成,您接入 H5 容器即可,无需手动进行埋点。

页面加载监控

原生页面的加载时长埋点由 mPaaS 原生页面自动化埋点 SDK 完成,您接入移动分析组件后,无需手动进行埋点。

启动速度监控

基于 mPaaS 框架

如果您的项目接入了 mPaaS 框架,那么启动速度由 mPaaS 框架进行记录,您只需在 App 启动完成(比如在首页出现时)后记录启动时间,并发出启动完成的通知即可。

// globalMonitorStartUpTime 是已定义的变量,导入 <mPaas/MPaaS+MonitorStartUpTime.h> 头文件后即可使用
double time = CFAbsoluteTimeGetCurrent() - globalMonitorStartUpTime;
[ [NSNotificationCenter defaultCenter] postNotificationName:@"APMonitor_Startup_Cost_Time" object:nil userInfo:@{@"CostTimeOnUserFeel": [NSString stringWithFormat:@"%f", time]}];

基于原生框架

如果您的项目未接入 mPaaS 框架,那么您需要在 App 启动完成时手动调用上报启动埋点。

#import <MPMasAdapter/MPAnalysisHelper.h>

//record the time interval used for the app startup
NSTimeInterval time = CFAbsoluteTimeGetCurrent() - __start_timestamp;
[[MPAnalysisHelper sharedInstance] writeLogForStartupWithTime:time];

闪退监控

添加闪退埋点,以统计闪退相关数据。

基于 mPaaS 框架

在接入了框架(工程中有 APMobileFramework 库)的情况下,闪退上报模块会自动捕获闪退日志并上传到服务端,您只需在集成 SDK 后确认闪退监控的开关为打开即可。为保证闪退日志能及时上报,推荐您在 main 函数中调用此接口。crash监控打开

基于原生框架

在未接入 mPaaS 框架(工程中无 APMobileFramework 库)的情况下,需要您在启动时打开闪退监控开关,并且在启动后上报闪退日志。crash监控打开crashreport

容灾开关

默认情况下,当连续发生四次闪退时会触发容灾处理,将会清理 Documents 目录下的文件,以避免因脏数据导致的闪退问题。在 10.1.60 及以上版本,您可以手动调用以下接口开启或关闭容灾处理。

#import <MPMasAdapter/MPAnalysisHelper.h>
/**
 * 开启/关闭闪退容灾处理,默认开启
 */
+ (void)enableDisasterRecovery:(BOOL)enable;
注意
  • 只有真机运行程序的闪退日志才会被捕获并上传到日志服务器。如您需要调试闪退监控,请断开 Xcode,且请勿使用模拟器。

  • 为保证闪退日志中的 version 与 product version 一致,务必在项目的 info.plist 中将 bundle version 与 product version 设置为相同的版本号。

卡顿/卡死监控

添加性能埋点,以统计卡顿、卡死相关数据。

基于 mPaaS 框架

  1. 卡顿/卡死监控默认对 10% 的设备开启,可通过下面这个接口设置卡顿开启率。

     [MPAnalysisHelper setLagMonitorPercent: 100]; // 100% 监控,需要在 startPerformanceMonitor 调用之前设置
    说明

    卡顿/卡死监控只有在真机上并且非 Xcode 调试状态下是打开的。

  2. 在启动时调用 [MPAnalysisHelper startPerformanceMonitor],推荐在 -(void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中调用。 启动性能监控

基于原生框架

SDK 封装了性能监控接口,推荐您在 AppDelegate 的 - (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions 方法中调用 [PerformanceHelper performanceMonitor]

说明

卡顿/卡死监控只有在真机上并且非 Xcode 调试状态下是打开的。

    #import "PerformanceHelper.h"
    #import <MPAnalysis/MPAnalysisHelper.h>

    static NSTimeInterval __start_timestamp = 0;

    @implementation PerformanceHelper

    + (void)load
    {
        __start_timestamp = CFAbsoluteTimeGetCurrent();
    }

    + (void)performanceMonitor
    {
        //start performance monitor

       [MPAnalysisHelper setLagMonitorPercent: 100]; // 100% 监控,需要在 startPerformanceMonitor 调用之前设置
        [MPAnalysisHelper startPerformanceMonitor];

        //record the time interval used for the app startup
        NSTimeInterval time = CFAbsoluteTimeGetCurrent() - __start_timestamp;
        [[MPAnalysisHelper sharedInstance] writeLogForStartupWithTime:time];
    }

    @end

开启小程序监控

接入小程序后,小程序会自动上报性能监控数据,无需您手动埋点。