使用者體驗監控提供了一系列SDK配置項,讓您能夠通過設定參數來滿足額外需求。本文介紹iOS應用常用的SDK配置。
啟動配置
設定 Endpoint 地址
每個應用都需要關聯對應的Endpoint地址,該介面需要在調用start:前設定。
@objc
public static func setEndpoint(_ endpoint: String)參數 | 說明 | 參數限制 | 失敗結果 |
endpoint | Endpoint 地址 | 字串長度大於0且小於2083 | 介面調用失敗,SDK 初始化失敗 |
設定 Workspace 地址
每個應用都需要關聯對應的Workspace,該介面需要在調用start:前設定。
@objc
public static func setWorkspace(_ workspace: String)參數 | 說明 | 參數限制 | 失敗結果 |
workspace | Workspace 地址 | 字串長度大於0且小於2083 | 介面調用失敗,SDK 初始化失敗 |
啟動介面
您需要調用start: 方法初始化 SDK。
@objc(start:)
public static func start(_ serviceId: String)參數 | 說明 | 參數限制 | 失敗結果 |
serviceId | ServiceId | 由使用者體驗監控平台產生的應用唯一ID | 介面調用失敗,SDK 初始化失敗 |
設定自訂裝置ID
可以通過此方法設定自訂裝置ID,設定成功後,SDK將不再使用預設擷取的裝置ID。
@objc
public static func setDeviceID(_ deviceID: String)參數 | 說明 | 參數限制 | 失敗結果 |
deviceID | 自訂的裝置ID | 字串長度大於0且小於256,且不包含特殊字元(僅支援字母、數字、冒號、空格、底線_、連結符-、英文句號、@) | 介面調用失敗,當次設定無效 |
設定自訂App版本號碼
通過此方法設定了自訂App版本號碼,那麼SDK將會上報此版本號碼,不再使用預設擷取的版本號碼。
@objc
public static func setAppVersion(_ appVersion: String)參數 | 說明 | 參數限制 | 失敗結果 |
appVersion | 自訂的App版本號碼 | 字串長度大於0且小於64。 | 介面調用失敗,當次設定無效。 |
設定使用者渠道ID
區分應用發布的渠道。
@objc
public static func setChannelID(_ channelID: String)參數 | 說明 | 參數限制 | 失敗結果 |
channelID | 自訂的渠道號 | 字串長度大於0且小於256。 | 介面調用失敗,當次設定無效。 |
設定應用環境
區分應用的環境。通過此方法可以指定應用的環境,如LOCAL、DAILY、PROD等。
@objc
public static func setEnvironment(_ env: Env)參數 | 說明 | 參數限制 | 失敗結果 |
env | 應用環境的枚舉值。需要在 | Env枚舉值:
| 介面調用失敗,當次設定無效。 |
自訂資訊
自訂使用者名稱稱
SDK支援設定與使用者相關的資訊,從而完成與實際使用者相關聯的資料分析需求情境。
@objc
public static func setUserName(_ userID: String)參數 | 說明 | 參數限制 | 失敗結果 |
userID | 使用者名稱稱標識 | 字串可為null或空串。 字串小於等於256,且不包含特殊字元,只允許數字、字母、英文半形冒號(:)、空格、正斜線(/)、底線(_)、英文半形串連號(-)、英文半形句號(.)和@。 | 介面調用失敗,當次設定無效。 |
自訂使用者擴充資訊
SDK支援設定與使用者相關的資訊,從而完成資料分析與實際使用者相關聯的需求情境。
@objc(setUserExtraInfo:)
public static func setUserExtraInfo(_ extraInfo: [String: AnyObject])參數 | 說明 | 參數限制 | 失敗結果 |
extraInfo | 使用者擴充資訊 | Map可為空白或空集。 轉JSON後長度在7000字元以內,否則介面調用失敗。 | 介面調用失敗,當次設定無效。 |
自訂全域屬性
自訂全域屬性設定後,新產生的資料會自動攜帶該業務屬性資訊,用於分析與業務屬性相關聯的需求。
@objc(setExtraInfo:)
public static func setExtraInfo(_ extraInfo: [String: AnyObject])
@objc(addExtraInfo:)
public static func addExtraInfo(_ extraInfo: [String: AnyObject])參數 | 說明 | 參數限制 | 失敗結果 |
extraInfo | 屬性資訊 | Map可為空白或空集。轉JSON後長度在7000字元以內,否則介面調用失敗。 | 介面調用失敗,當次設定無效。 |
調用 setExtraInfo 方法時會清空歷史設定的屬性資訊。如您需要追加新的屬性資訊,建議您通過 addExtraInfo 方法。
自訂異常
調用自訂異常介面,並傳入相應的參數,可完成自訂異常資料的統計功能。
@objc(setCustomException:causeBy:errorDump:)
public static func setCustomException(_ exceptionType: String, _ causeBy: String, _ errorDump: String)參數 | 說明 | 參數限制 | 失敗結果 |
exceptionType | 異常類型(必要) | 字串長度大於0且小於等於256。 | 介面調用失敗,當次設定無效。 |
causeBy | 異常原因 | 字串可為null或空串。 字串小於等於512,超長會截取。 | 不涉及 |
errorDump | 異常資訊 | 字串可為null或空串。 字串小於等於10000,超長會截取。 | 不涉及 |
自訂事件
SDK支援上報自訂事件。調用相應的介面,並傳入相應的參數,可完成自訂事件數目據的統計功能。
@objc(setCustomEvent:)
public static func setCustomEvent(_ name: String)參數 | 說明 | 參數限制 | 失敗結果 |
name | 事件名稱(必要) | 字串長度大於0且小於等於256 | 介面調用失敗,當次設定無效 |
@objc(setCustomEvent:group:)
public static func setCustomEvent(_ name: String, group: String? = nil)參數 | 說明 | 參數限制 | 失敗結果 |
name | 事件名稱(必要) | 字串長度大於0且小於等於256 | 介面調用失敗,當次設定無效 |
group | 事件分組 | 字串可為 字串小於等於256,超長會截取。 | 不涉及 |
@objc(setCustomEvent:group:snapshots:)
public static func setCustomEvent(_ name: String, group: String? = nil, snapshots: String? = nil)參數 | 說明 | 參數限制 | 失敗結果 |
name | 事件名稱(必要) | 字串長度大於0且小於等於256 | 介面調用失敗,當次設定無效 |
group | 事件分組 | 字串可為 字串小於等於256,超長會截取。 | 不涉及 |
snapshots | 事件快照 | 字串可為 字串小於等於7000,超長會截取。 | 不涉及 |
@objc(setCustomEvent:group:value:)
public static func setCustomEvent(_ name: String, group: String? = nil, value: Double = 0)參數 | 說明 | 參數限制 | 失敗結果 |
name | 事件名稱(必要) | 字串長度大於0且小於等於256 | 介面調用失敗,當次設定無效 |
group | 事件分組 | 字串可為 字串小於等於256,超長會截取。 | 不涉及 |
value | 事件值 | double類型 | 不涉及 |
@objc(setCustomEvent:group:info:)
public static func setCustomEvent(_ name: String, group: String? = nil, info: [String: String]? = nil)參數 | 說明 | 參數限制 | 失敗結果 |
name | 事件名稱(必要) | 字串長度大於0且小於等於256 | 介面調用失敗,當次設定無效 |
group | 事件分組 | 字串可為 字串小於等於256,超長會截取。 | 不涉及 |
info | 事件附加資訊 | Map可為空白或空集。轉JSON後長度在7000字元以內,否則介面調用失敗。 | 不涉及 |
@objc(setCustomEvent:group:snapshots:value:)
public static func setCustomEvent(_ name: String, group: String? = nil, snapshots: String? = nil, value: Double = 0) 參數 | 說明 | 參數限制 | 失敗結果 |
name | 事件名稱(必要) | 字串長度大於0且小於等於256。 | 介面調用失敗,當次設定無效 |
group | 事件分組 | 字串可為 字串小於等於256,超長會截取。 | 不涉及 |
snapshots | 事件快照 | 字串可為 字串小於等於7000,超長會截取。 | 不涉及 |
value | 事件值 | double類型。 | 不涉及 |
@objc(setCustomEvent:group:snapshots:info:)
public static func setCustomEvent(_ name: String, group: String? = nil, snapshots: String? = nil, info: [String: String]? = nil)參數 | 說明 | 參數限制 | 失敗結果 |
name | 事件名稱(必要) | 字串長度大於0且小於等於256 | 介面調用失敗,當次設定無效 |
group | 事件分組 | 字串可為 字串小於等於256,超長會截取。 | 不涉及 |
snapshots | 事件快照 | 字串可為 字串小於等於7000,超長會截取。 | 不涉及 |
info | 事件附加資訊 | Map可為空白或空集。轉JSON後長度在7000字元以內,否則介面調用失敗。 | 不涉及 |
@objc(setCustomEvent:group:value:info:)
public static func setCustomEvent(_ name: String, group: String? = nil, value: Double = 0, info: [String: String]? = nil) 參數 | 說明 | 參數限制 | 失敗結果 |
name | 事件名稱(必要) | 字串長度大於0且小於等於256 | 介面調用失敗,當次設定無效 |
group | 事件分組 | 字串可為 字串小於等於256,超長會截取。 | 不涉及 |
value | 事件值 | double類型 | 不涉及 |
info | 事件附加資訊 | Map可為空白或空集。轉JSON後長度在7000字元以內,否則介面調用失敗。 | 不涉及 |
@objc(setCustomEvent:group:snapshots:value:info:)
public static func setCustomEvent(_ name: String, group: String? = nil, snapshots: String? = nil, value: Double = 0, info: [String: String]? = nil)參數 | 說明 | 參數限制 | 失敗結果 |
name | 事件名稱(必要) | 字串長度大於0且小於等於256 | 介面調用失敗,當次設定無效 |
group | 事件分組 | 字串可為 字串小於等於256,超長會截取。 | 不涉及 |
snapshots | 事件快照 | 字串可為 字串小於等於7000,超長會截取。 | 不涉及 |
value | 事件值 | double類型 | 不涉及 |
info | 事件附加資訊 | Map可為空白或空集。轉JSON後長度在7000字元以內,否則介面調用失敗。 | 不涉及 |
自訂日誌
SDK支援上報自訂日誌資訊。調用相應的介面,並傳入相應的參數,可完成自訂日誌資料的統計功能。
@objc(setCustomLog:)
public static func setCustomLog(_ logInfo: String)參數 | 說明 | 參數限制 | 失敗結果 |
logInfo | 日誌資訊(必要) | 字串長度大於0且小於等於10000,超長會被截取。 | 介面調用失敗,當次設定無效。 |
@objc(setCustomLog:name:)
public static func setCustomLog(_ logInfo: String, name: String? = nil) 參數 | 說明 | 參數限制 | 失敗結果 |
logInfo | 日誌資訊(必要) | 字串長度大於0且小於等於10000,超長會被截取。 | 介面調用失敗,當次設定無效。 |
name | 日誌名稱 | 字串長度大於0且小於等於256。 | 不涉及 |
@objc(setCustomLog:name:snapshots:)
public static func setCustomLog(_ logInfo: String, name: String? = nil, snapshots: String? = "") 參數 | 說明 | 參數限制 | 失敗結果 |
logInfo | 日誌資訊(必要) | 字串長度大於0且小於等於10000,超長會被截取。 | 介面調用失敗,當次設定無效。 |
name | 日誌名稱 | 字串長度大於0且小於等於256。 | 不涉及 |
snapshots | 日誌快照 | 字串可為null或空串。 字串小於等於7000,超長會截取。 | 不涉及 |
@objc(setCustomLog:name:snapshots:level:info:)
public static func setCustomLog(_ logInfo: String, name: String? = nil, snapshots: String? = "", level: String? = "INFO", info: [String: String]? = nil)參數 | 說明 | 參數限制 | 失敗結果 |
logInfo | 日誌資訊(必要) | 字串長度大於0且小於等於10000,超長會被截取。 | 介面調用失敗,當次設定無效。 |
name | 日誌名稱 | 字串長度大於0且小於等於256。 | 不涉及 |
snapshots | 日誌快照 | 字串可為null或空串。 字串小於等於7000,超長會截取。 | 不涉及 |
level | 日誌等級 | 字串長度大於0且小於等於256,預設為INFO。 | 不涉及 |
info | 日誌附加資訊 | Map可為空白或空集。 轉JSON後,字串長度與logInfo共用,否則介面調用失敗。 | 不涉及 |
自訂資源
SDK支援上報自訂網路資源請求資料,可以記錄 HTTP/HTTPS 等類型請求的詳細資料,包括請求狀態、效能指標和鏈路追蹤資訊。SDK 提供了兩個重載版本,分別適用於基礎情境和進階情境。
基礎情境
@objc(setCustomResource:success:url:method:statusCode:errorMessage:)
public static func setCustomResource(_ type: String, success: Bool, url: String, method: String, statusCode: Int, errorMessage: String?) -> Bool參數 | 類型 | 說明 | 參數限制 |
type | String | 資源類型,例如: | 字串長度大於0且小於等於64,超長截取。 |
success | Bool | 請求是否成功 | true,成功;false,失敗。 |
url | String | 請求的完整 URL 地址 | 字串長度大於0且小於等於1024,超長截取。 |
method | String | HTTP 要求方法,如: | 字串長度大於0且小於等於24,超長截取。 |
statusCode | Int | HTTP 響應狀態代碼 | HTTP 狀態代碼,如:200、404、500等。 |
errorMessage | String? | 錯誤資訊描述,僅在請求失敗時填寫 | 字串長度大於0且小於等於256,超長截取。可為 |
傳回值:Bool - 介面調用是否成功,true 表示調用成功,false 表示調用失敗(如 SDK 未初始化或參數錯誤)。
使用樣本:
// Swift - 成功的 GET 請求
let result = AlibabaCloudRUM.setCustomResource(
"AP",
success: true,
url: "https://api.example.com/users",
method: "GET",
statusCode: 200,
errorMessage: nil
)
// Swift - 失敗的 POST 請求
let result2 = AlibabaCloudRUM.setCustomResource(
"API",
success: false,
url: "https://api.example.com/login",
method: "POST",
statusCode: 401,
errorMessage: "Unauthorized access"
)// Objective-C - 成功的 GET 請求
BOOL result = [AlibabaCloudRUM setCustomResource:@"API"
success:YES
url:@"https://api.example.com/users"
method:@"GET"
statusCode:200
errorMessage:nil];
// Objective-C - 失敗的 POST 請求
BOOL result2 = [AlibabaCloudRUM setCustomResource:@"API"
success:NO
url:@"https://api.example.com/login"
method:@"POST"
statusCode:401
errorMessage:@"Unauthorized access"];
進階情境
進階情境支援效能和鏈路追蹤的配置。
@objc(setCustomResource:success:url:method:statusCode:errorMessage:provider:tracing:measure:)
public static func setCustomResource(_ type: String, success: Bool, url: String, method: String, statusCode: Int, errorMessage: String?, provider: String?, tracing: AlibabaCloudTracingContext?, measure: AlibabaCloudResourceMeasure?) -> Bool參數 | 類型 | 參數說明 | 參數限制 |
type | String | 資源類型 | 字串長度大於0且小於等於64,超長截取。 |
success | Bool | 請求是否成功 | true,成功;false,失敗。 |
url | String | 請求的完整 URL 地址 | 字串長度大於0且小於等於1024,超長截取。 |
method | String | HTTP 要求方法 | 字串長度大於0且小於等於24,超長截取。 |
statusCode | Int | HTTP 響應狀態代碼 | HTTP 狀態代碼,如:200、404、500等。 |
errorMessage | String? | 錯誤資訊描述 | 字串長度大於0且小於等於256,超長截取。可為 |
provider | String? | 服務提供者標識,如: | 字串長度大於0且小於等於256,超長截取。可為 |
tracing | AlibabaCloudTracingContext? | 鏈路追蹤上下文資訊 | AlibabaCloudTracingContext 類型,可為 |
measure | AlibabaCloudResourceMeasure? | 資源效能指標 | AlibabaCloudResourceMeasure 類型,可為 |
傳回值:Bool - 介面調用是否成功,true 表示調用成功,false 表示調用失敗。
使用樣本:
// Swift - 建立效能指標對象
let measure = AlibabaCloudResourceMeasure.measure()
measure.duration = 850
measure.size = 10240
measure.dnsDuration = 30
measure.connectDuration = 80
measure.sslDuration = 120
measure.firstByteDuration = 250
measure.downloadDuration = 370
// 建立鏈路追蹤上下文
let traceId = AlibabaCloudTraceGenerator.generateTraceId(.SkywalkingV3)
let spanId = AlibabaCloudTraceGenerator.generateTraceId(.SkywalkingV3)
let tracing = AlibabaCloudTracingContext(traceId: traceId, spanId: spanId, tracingProtocol: .SkywalkingV3)
// 上報完整的資源資訊
let result = AlibabaCloudRUM.setCustomResource(
"HTTPS",
success: true,
url: "https://api.example.com/v2/data",
method: "POST",
statusCode: 200,
errorMessage: nil,
provider: "Aliyun",
tracing: tracing,
measure: measure
)// Objective-C - 建立效能指標對象
AlibabaCloudResourceMeasure *measure = [AlibabaCloudResourceMeasure measure];
measure.duration = 850;
measure.size = 10240;
measure.dnsDuration = 30;
measure.connectDuration = 80;
measure.sslDuration = 120;
measure.firstByteDuration = 250;
measure.downloadDuration = 370;
// 建立鏈路追蹤上下文
NSString *traceId = [AlibabaCloudTracingGenerator generateTraceId:AlibabaCloudTracingProtocolW3C];
NSString *spanId = [AlibabaCloudTracingGenerator generateSpanId:AlibabaCloudTracingProtocolW3C];
AlibabaCloudTracingContext *tracing = [AlibabaCloudTracingContext contextWithTraceId:traceId
spanId:spanId
protocol:AlibabaCloudTracingProtocolW3C
];
// 上報完整的資源資訊
BOOL result = [AlibabaCloudRUM setCustomResource:@"HTTPS"
success:YES
url:@"https://api.example.com/v2/data"
method:@"POST"
statusCode:200
errorMessage:nil
provider:@"Aliyun"
tracing:tracing
measure:measure];輔助類型說明
AlibabaCloudTracingContext
用於分布式鏈路追蹤的上下文資訊,支援 W3C Trace Context 和 SkyWalking V3 協議。
建立方法:
// Swift - 產生 TraceId 和 SpanId
let traceId = AlibabaCloudTracingGenerator.generateTraceId(.SkywalkingV3)
let spanId = AlibabaCloudTracingGenerator.generateSpanId(.SkywalkingV3)
// Swift - 產生 Trace 上下文
let tracingContext = AlibabaCloudTracingContext(traceId: traceId, spanId: spanId, protocol: .SkywalkingV3)// Objective-C - 產生 TraceId 和 SpanId
NSString *traceId = [AlibabaCloudTracingGenerator generateTraceId:AlibabaCloudTracingProtocolW3C];
NSString *spanId = [AlibabaCloudTracingGenerator generateSpanId:AlibabaCloudTracingProtocolW3C];
// Objective-C - 產生上下文
AlibabaCloudTracingContext *context = [AlibabaCloudTracingContext contextWithTraceId:traceId
spanId:spanId
tracingProtocol:AlibabaCloudTracingProtocolW3C
];支援的協議:
W3C:W3C Trace Context 標準協議。SkywalkingV3:Apache SkyWalking V3 協議。
AlibabaCloudResourceMeasure
用於記錄網路請求效能指標。
屬性名稱 | 類型 | 說明 |
duration | NSUInteger | 總耗時(毫秒) |
size | NSUInteger | 響應資料大小(位元組) |
connectDuration | NSUInteger | TCP 串連耗時(毫秒) |
sslDuration | NSUInteger | SSL/TLS 握手耗時(毫秒) |
dnsDuration | NSUInteger | DNS 解析耗時(毫秒) |
redirectDuration | NSUInteger | 重新導向耗時(毫秒) |
firstByteDuration | NSUInteger | 首位元組耗時(毫秒) |
downloadDuration | NSUInteger | 下載耗時(毫秒) |
建立方法:
// Swift
let measure = AlibabaCloudResourceMeasure.measure()
measure.duration = 1200
measure.size = 5120
measure.dnsDuration = 50
measure.connectDuration = 100
measure.sslDuration = 150
measure.firstByteDuration = 300
measure.downloadDuration = 600// Objective-C
AlibabaCloudResourceMeasure *measure = [AlibabaCloudResourceMeasure measure];
measure.duration = 1200;
measure.size = 5120;
measure.dnsDuration = 50;
measure.connectDuration = 100;
measure.sslDuration = 150;
measure.firstByteDuration = 300;
measure.downloadDuration = 600;注意事項
傳回值檢查:建議檢查方法傳回值,如果返回
false,說明介面調用失敗。非同步上報:介面調用成功(返回
true)僅表示 SDK 已接受該資料,實際資料上報為非同步作業。