Segment Analytics-iOS SDK - 专业用户行为追踪解决方案
Segment Analytics-iOS SDK
Analytics-iOS 是 Segment 官方推出的 iOS 客户端库,帮助开发者轻松收集用户行为数据并集成到各种分析平台。
功能特性
- 多平台集成: 支持一键集成到 200+ 个分析平台和工具
- 完整事件追踪: 支持 track、identify、screen、group、alias 等核心事件类型
- 自动屏幕统计: 自动追踪视图控制器的展示和切换
- 用户身份管理: 完善的用户识别和匿名ID管理机制
- 数据队列管理: 智能的数据批量上传和本地存储机制
- 高性能架构: 基于中间件的灵活架构设计,支持自定义扩展
- 安全可靠: 支持数据加密存储和传输安全保障
安装指南
CocoaPods 安装
在 Podfile 中添加:
pod 'Analytics', '~> 4.1.8'
Carthage 安装
在 Cartfile 中添加:
github "segmentio/analytics-ios" ~> 4.1.8
Swift Package Manager
在 Xcode 中添加包依赖:
dependencies: [
.package(url: "https://github.com/segmentio/analytics-ios.git", from: "4.1.8")
]
手动安装
- 下载最新的 Release 版本
- 将 Analytics.framework 添加到项目中
- 链接必要的系统框架:Foundation、SystemConfiguration
使用说明
基础配置
#import <Segment/SEGAnalytics.h>
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 启用调试日志
[SEGAnalytics debug:YES];
// 配置 Analytics
SEGAnalyticsConfiguration *configuration =
[SEGAnalyticsConfiguration configurationWithWriteKey:@"YOUR_WRITE_KEY"];
// 开启应用生命周期事件自动追踪
configuration.trackApplicationLifecycleEvents = YES;
// 设置批量上传阈值
configuration.flushAt = 20;
// 初始化 SDK
[SEGAnalytics setupWithConfiguration:configuration];
return YES;
}
用户识别
// 识别用户
[[SEGAnalytics sharedAnalytics] identify:@"user123"
traits:@{
@"name": @"John Doe",
@"email": @"john@example.com",
@"plan": @"premium"
}];
// 匿名用户识别
[[SEGAnalytics sharedAnalytics] identify:nil
traits:@{
@"device": @"iPhone"
}];
事件追踪
// 追踪自定义事件
[[SEGAnalytics sharedAnalytics] track:@"Product Viewed"
properties:@{
@"product_id": @"12345",
@"category": @"Books",
@"price": 29.99
}];
// 追踪屏幕浏览
[[SEGAnalytics sharedAnalytics] screen:@"HomeScreen"
properties:@{
@"referrer": @"Notification"
}];
高级功能
// 用户分组
[[SEGAnalytics sharedAnalytics] group:@"company123"
traits:@{
@"name": @"Segment",
@"industry": @"Technology"
}];
// 用户别名
[[SEGAnalytics sharedAnalytics] alias:@"new_user_id"];
// 立即上传数据
[[SEGAnalytics sharedAnalytics] flush];
// 重置用户数据
[[SEGAnalytics sharedAnalytics] reset];
核心代码
事件负载基类
// SEGPayload.h - 事件数据基类
@interface SEGPayload : NSObject
@property (nonatomic, readonly) JSON_DICT context;
@property (nonatomic, readonly) JSON_DICT integrations;
@property (nonatomic, strong) NSString *timestamp;
@property (nonatomic, strong) NSString *messageId;
@property (nonatomic, strong) NSString *anonymousId;
@property (nonatomic, strong) NSString *userId;
- (instancetype)initWithContext:(JSON_DICT)context
integrations:(JSON_DICT)integrations;
@end
事件追踪实现
// SEGTrackPayload.m - 事件追踪数据模型
@implementation SEGTrackPayload
- (instancetype)initWithEvent:(NSString *)event
properties:(NSDictionary *)properties
context:(NSDictionary *)context
integrations:(NSDictionary *)integrations
{
if (self = [super initWithContext:context integrations:integrations]) {
_event = [event copy];
_properties = [properties copy];
}
return self;
}
@end
中间件架构
// SEGMiddleware.h - 中间件协议
@protocol SEGMiddleware
@required
- (void)context:(SEGContext *_Nonnull)context
next:(SEGMiddlewareNext _Nonnull)next;
@end
// 中间件运行器
@interface SEGMiddlewareRunner : NSObject
@property (nonnull, nonatomic, readonly) NSArray<id<SEGMiddleware>> *middlewares;
- (instancetype)initWithMiddleware:(NSArray<id<SEGMiddleware>> *)middlewares;
- (SEGContext *)run:(SEGContext *)context
callback:(RunMiddlewaresCallback)callback;
@end
HTTP 客户端
// SEGHTTPClient.m - 数据上传实现
- (NSURLSessionUploadTask *)upload:(JSON_DICT)batch
forWriteKey:(NSString *)writeKey
completionHandler:(void (^)(BOOL retry))completionHandler
{
// 数据序列化
NSError *error = nil;
NSData *data = [NSJSONSerialization dataWithJSONObject:batch
options:0
error:&error];
// GZIP 压缩
data = [data seg_gzippedData];
// 创建上传任务
NSURL *url = [NSURL URLWithString:@"https://api.segment.io/v1/batch"];
NSMutableURLRequest *request = self.requestFactory(url);
// 设置请求头
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"gzip" forHTTPHeaderField:@"Content-Encoding"];
[request setValue:[SEGHTTPClient authorizationHeader:writeKey]
forHTTPHeaderField:@"Authorization"];
// 上传数据
NSURLSessionUploadTask *task = [self.genericSession
uploadTaskWithRequest:request
fromData:data
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// 处理响应
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
BOOL shouldRetry = (error != nil ||
httpResponse.statusCode >= 300 ||
httpResponse.statusCode < 200);
completionHandler(shouldRetry);
}];
[task resume];
return task;
}
数据存储管理
// SEGFileStorage.m - 文件存储实现
- (void)setData:(NSData *)data forKey:(NSString *)key
{
NSURL *url = [self urlForKey:key];
if (data == nil) {
[[NSFileManager defaultManager] removeItemAtURL:url error:nil];
return;
}
// 数据加密
if (self.crypto) {
NSData *encryptedData = [self.crypto encrypt:data];
[encryptedData writeToURL:url atomically:YES];
} else {
[data writeToURL:url atomically:YES];
}
// 排除备份
[url setResourceValue:@YES
forKey:NSURLIsExcludedFromBackupKey
error:nil];
}
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码