接入 iOS
移動性能監(jiān)控(APM)依賴移動分析客戶端 SDK 來進行埋點,收集 App 性能相關數(shù)據(jù)生成日志并上報到服務端。根據(jù) mPaaS 客戶端與服務端協(xié)定的埋點數(shù)據(jù)格式,服務端從客戶端上傳的埋點日志中提取有效數(shù)據(jù),從而實現(xiàn)對客戶端各項指標的監(jiān)控分析。
本文介紹如何在客戶端配置性能監(jiān)控埋點,包括網(wǎng)絡監(jiān)控、H5 性能監(jiān)控、頁面加載監(jiān)控、啟動速度監(jiān)控、小程序監(jiān)控。
前提條件
確保 mPaaS 基線版本 ≥ 10.1.68.44。如當前使用的基線版本低于 10.1.68.44,可參考 mPaaS 10.1.68 升級指南進行基線版本升級。
確保已接入移動分析組件。具體操作請參見 接入移動分析服務。
確保已接入移動網(wǎng)關組件。具體操作請參見 移動網(wǎng)關服務。
如需使用 H5 性能監(jiān)控功能,需接入 H5 容器。具體操作參見 接入 H5 容器。
如需使用小程序性能監(jiān)控功能,需接入小程序。具體操作參見 接入小程序。
網(wǎng)絡監(jiān)控
開啟網(wǎng)絡監(jiān)控開關
APM 網(wǎng)絡性能監(jiān)控埋點需要通過項目代碼手動開啟。在 App 啟動過程中,調(diào)用如下代碼以開啟網(wǎng)絡性能監(jiān)控。
#import <MPMasAdapter/MPAnalysisHelper.h>
[MPAnalysisHelper startAPMNetMonitor];
mPaaS RPC 網(wǎng)絡監(jiān)控埋點
開啟 APM 網(wǎng)絡監(jiān)控后,mPaaS RPC 的網(wǎng)絡監(jiān)控由 mPaaS 內(nèi)置的網(wǎng)絡框架自動進行,無需您在代碼中手動進行埋點。
業(yè)務自定義網(wǎng)絡監(jiān)控埋點
如果您使用了非 mPaaS RPC 網(wǎng)絡通訊,并想要對這部分的網(wǎng)絡質(zhì)量進行監(jiān)控,則需要在 App 啟動過程中開啟 APM 網(wǎng)絡監(jiān)控,同時還需要對自己的網(wǎng)絡調(diào)用進行手動埋點。
調(diào)用以下代碼進行埋點:
#import <MPMasAdapter/MPRemoteLoggingInterface.h>
NSDictionary *param = @{
@"totalRequestTimeInterval": @(totalRequestTime),
@"dnsTimeInterval": @(dnsTime),
@"tcpTimeInterval": @(tcpTime),
@"sslTimeInterval": @(sslTime),
@"firstPackageTimeInterval": @(firstPackageTime),
@"transportTimeInterval": @(transportTime),
@"downloadAverageSpeed": @(downloadAverageSpeed),
@"httpStatusCode": @(httpStatusCode),
@"rpcStatusCode": rpcStatusCode,
@"operationType": operationType,
@"clientIP": clientIP,
@"gwIP": gwIP,
@"traceId": traceId
};
[MPRemoteLoggingInterface writeAPMNetLog:param];
傳入的參數(shù)包括:
參數(shù) | 說明 |
totalRequestTimeInterval | 總請求用時,單位為 ms。 |
dnsTimeInterval | DNS 解析耗時,單位為 ms。 |
tcpTimeInterval | TCP 建連耗時,單位為 ms。 |
SSLTimeInterval | SSL 建連耗時,單位為 ms。 |
firstPackageTimeInterval | 首包用時,從發(fā)起請求到收到服務器第一個數(shù)據(jù)包所用的時間,單位為 ms。 |
transportTimeInterval | 傳輸用時,從收到第一個數(shù)據(jù)包到最后一個數(shù)據(jù)包所用的時間,單位為 ms。 |
downloadAverageSpeed | 下載資源文件的平均速度。 |
httpStatusCode | HTTP 調(diào)用狀態(tài)碼,200 表示正常。 |
rpcStatusCode | RPC 調(diào)用狀態(tài)碼,200 表示正常。 |
operationType | 接口標識符,用于標識網(wǎng)關操作。 |
clientIP | 客戶端 IP。 |
gwIP | 網(wǎng)關 IP。 |
traceId | 客戶端請求的鏈路 ID。 |
H5 性能監(jiān)控
H5 性能監(jiān)控的埋點由 mPaaS H5 容器自動完成,您接入 H5 容器即可,無需手動進行埋點。
頁面加載監(jiān)控
原生頁面的加載時長埋點由 mPaaS 原生頁面自動化埋點 SDK 完成,您接入移動分析組件后,無需手動進行埋點。
啟動速度監(jiān)控
基于 mPaaS 框架
如果您的項目接入了 mPaaS 框架,那么啟動速度由 mPaaS 框架進行記錄,您只需在 App 啟動完成(比如在首頁出現(xiàn)時)后記錄啟動時間,并發(fā)出啟動完成的通知即可。
// 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 啟動完成時手動調(diào)用上報啟動埋點。
#import <MPMasAdapter/MPAnalysisHelper.h>
//record the time interval used for the app startup
NSTimeInterval time = CFAbsoluteTimeGetCurrent() - __start_timestamp;
[[MPAnalysisHelper sharedInstance] writeLogForStartupWithTime:time];
閃退監(jiān)控
添加閃退埋點,以統(tǒng)計閃退相關數(shù)據(jù)。
基于 mPaaS 框架
在接入了框架(工程中有 APMobileFramework
庫)的情況下,閃退上報模塊會自動捕獲閃退日志并上傳到服務端,您只需在集成 SDK 后確認閃退監(jiān)控的開關為打開即可。為保證閃退日志能及時上報,推薦您在 main
函數(shù)中調(diào)用此接口。
基于原生框架
在未接入 mPaaS 框架(工程中無 APMobileFramework
庫)的情況下,需要您在啟動時打開閃退監(jiān)控開關,并且在啟動后上報閃退日志。
容災開關
默認情況下,當連續(xù)發(fā)生四次閃退時會觸發(fā)容災處理,將會清理 Documents
目錄下的文件,以避免因臟數(shù)據(jù)導致的閃退問題。在 10.1.60 及以上版本,您可以手動調(diào)用以下接口開啟或關閉容災處理。
#import <MPMasAdapter/MPAnalysisHelper.h>
/**
* 開啟/關閉閃退容災處理,默認開啟
*/
+ (void)enableDisasterRecovery:(BOOL)enable;
只有真機運行程序的閃退日志才會被捕獲并上傳到日志服務器。如您需要調(diào)試閃退監(jiān)控,請斷開 Xcode,且請勿使用模擬器。
為保證閃退日志中的 version 與 product version 一致,務必在項目的
info.plist
中將 bundle version 與 product version 設置為相同的版本號。
卡頓/卡死監(jiān)控
添加性能埋點,以統(tǒng)計卡頓、卡死相關數(shù)據(jù)。
基于 mPaaS 框架
卡頓/卡死監(jiān)控默認對 10% 的設備開啟,可通過下面這個接口設置卡頓開啟率。
[MPAnalysisHelper setLagMonitorPercent: 100]; // 100% 監(jiān)控,需要在 startPerformanceMonitor 調(diào)用之前設置
說明卡頓/卡死監(jiān)控只有在真機上并且非 Xcode 調(diào)試狀態(tài)下是打開的。
在啟動時調(diào)用
[MPAnalysisHelper startPerformanceMonitor]
,推薦在-(void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法中調(diào)用。
基于原生框架
SDK 封裝了性能監(jiān)控接口,推薦您在 AppDelegate 的 - (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions
方法中調(diào)用 [PerformanceHelper performanceMonitor]
。
卡頓/卡死監(jiān)控只有在真機上并且非 Xcode 調(diào)試狀態(tài)下是打開的。
#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% 監(jiān)控,需要在 startPerformanceMonitor 調(diào)用之前設置
[MPAnalysisHelper startPerformanceMonitor];
//record the time interval used for the app startup
NSTimeInterval time = CFAbsoluteTimeGetCurrent() - __start_timestamp;
[[MPAnalysisHelper sharedInstance] writeLogForStartupWithTime:time];
}
@end
開啟小程序監(jiān)控
接入小程序后,小程序會自動上報性能監(jiān)控數(shù)據(jù),無需您手動埋點。