Skip to main content

Bugly 流量监控使用教程 (iOS)

一、功能背景

流量监控的核心功能在于它能够实时监控应用程序的数据使用情况。通过实时监控,可以随时了解应用的数据消耗情况,及时发现流量使用异常等问题。这有助于用户避免超出数据计划或产生额外费用。此外,流量监控还能帮助用户优化应用程序的功耗,减少不必要的数据请求,提供更高效的用户体验,并延长设备的电池寿命。流量监控还具备下钻到域名级别的能力,用户可以了解哪些域名或服务消耗了大量的流量,从而采取相应的措施来优化数据传输。

二、SDK 接入

流量监控属于 Bugly SDK 的子模块,不需要业务单独接入,只需要升级到支持的 SDK 版本即可包含对应的模块。因此在初始化 SDK 时,确保启用的模块中包含了 BUGLY_MODUEL_NETWORK 或使用 RM_MODULE_ALL 类型,具体可参考 SDK 初始化

支持版本

流量监控需要 2.7.53 及以后的版本支持。

三、SDK 配置及开启

若要启用流量监控,还需要确保 SDK 配置中开启了流量监控模块。关于 Bugly SDK 配置的内容,可以参考 SDK 配置

关于流量监控的配置内容,与 Android 端一致,可以参考 Android 流量监控配置指南进行查看。

流量监控开启验证

成功开始流量监控功能后,出现一下日志则表明成功开启流量监控功能:

[Bugly][Event][BuglyNetworkMonitor.mm:281]BUGLY_MODUEL_NETWORK start network monitor: 1048576, 1048576, 1048576

流量监控会在进程启动时和每 10 min 上报进程流量情况或 10 min 流量情况,当触发上报时,会有如下日志:

[Bugly][Event][RMReportQueue.m:601][Report] [resource.traffic] report id:xxxx error:(null)

// or

[Bugly][Event][RMReportQueue.m:601][Report] [resource.traffic_detail] report id:xxxx error:(null)

四、功能使用

流量监控的指标分析、异常分析及流量归因等交互内容,与 Android 端一致,可以参考 Android 流量监控功能使用进行查看。

五、自定义接口

默认情况下,Bugly SDK 会监控 App 中的所有流量,包括使用 NSURLSession 进行的 HTTP 网络请求,及使用 BSD Socket 进行的 TCP 网络请求。

版本限制

因 iOS 12.0 及以前的系统上发现网络监控存在一定的问题,故在 2.7.55.1 版本后,网络监控不再支持 iOS 12.0 及以前的设备,而是仅支持 iOS 13.0 及以上系统。

但限于 BSD Socket 的限制,监控信息仅能提供 IP 和端口的信息。为了让业务能够更自由的实现网络流量监控,Bugly 提供了自定义网络监控的接口。

BuglyNetworkTracer+Public.hbugly_network_tracer.hpp 中,定义了用户自定义网络流量监控的接口,分别用于在 OC 层或 C++ 层进行调用,实现自定义网络流量监控。

其中调用 tracer 对象的 traceConnectComplete 接口,会自动将此 tracer 记录到的流量监控信息记录到 Bugly 并上报。

举个例子:

NSString *peerName = @"..."; // 连接 URL 等信息
BuglyNetworkTracer *tracer = [BuglyNetworkTracer tracerWithPeerName:peerName
type:BuglyNetworkConnectHTTP|BuglyNetworkConnectCustom];
// 此方法将会将 tracer 对象注入到 _self 对象中,在一些异步处理中,将其注入到上下文对象中,便于后期找回来
[tracer injectToObj:_self];
// 连接开始
[tracer traceConnectStart];
// 记录连接发送数据
[tracer traceConnectSend:request.HTTPBody.length];

// ... 其他逻辑

// 通过上下文对象,从注册的对象中取回 tracer 对象
BuglyNetworkTracer *tracer = [BuglyNetworkTracer tracerFromObj:_self];
// tracer 完成,将其记录到 Bugly 中
[tracer traceConnectComplete];

其他接口的使用类似,具体可以参考文件中的定义信息。