// 
 | 
//  TTTracker.h 
 | 
//  TTTracker 
 | 
// 
 | 
//  Created by fengyadong on 2017-3-14. 
 | 
//  Copyright (c) 2017 toutiao. All rights reserved. 
 | 
// 
 | 
  
 | 
#import <Foundation/Foundation.h> 
 | 
#import "TTInstallIDManager.h" 
 | 
#ifndef TOBSDK 
 | 
#import "TTTrackerHeader.h" 
 | 
#import "TTInstallBaseMacro.h" 
 | 
#endif 
 | 
  
 | 
//+----------------+----------+----------+---------+--------------------------+ 
 | 
//| Key            | Type     | Required | Default |  Meaning                 | 
 | 
//+----------------+----------+----------+---------+--------------------------+ 
 | 
//| user_id        | String   | NO       | NULL    | login user_id            | 
 | 
//| need_encrypt   | BOOL     | NO       | YES     | whether encrypt          | 
 | 
//| user_unique_id | String   | NO       | NULL    | unique_id for login user | 
 | 
//+----------------+----------+----------+---------+--------------------------+ 
 | 
typedef NSDictionary *_Nullable(^TTTrackerConfigParamsBlock)(void); 
 | 
/** 捕获一个即将被缓存的log */ 
 | 
typedef void(^TTTrackerLogHookBlock)(NSDictionary * _Nonnull hookedLog); 
 | 
  
 | 
@interface TTTracker : NSObject 
 | 
  
 | 
@property (nonatomic, copy, readonly) NSString * _Nonnull appID;/** 应用唯一标示 */ 
 | 
@property (nonatomic, copy, readonly) NSString * _Nonnull channel;/** 应用发布的渠道名 */ 
 | 
  
 | 
//可选配置 
 | 
@property (nonatomic, copy) TTTrackerConfigParamsBlock _Nullable configParamsBlock;/** 外部使用方配置是否加密等参数 */ 
 | 
@property (nonatomic, copy) TTCustomHeaderBlock _Nullable customHeaderBlock;/** 使用方自定义Header参数 */ 
 | 
@property (nonatomic, copy, readonly) NSDictionary<NSString*, id> *_Nullable configParams;/** 配置信息参数 */ 
 | 
@property (atomic, copy, readonly) NSDictionary<NSString*, TTTrackerLogHookBlock> *_Nullable logHookDict; 
 | 
  
 | 
//是否开启session YES开启NO关闭 default= YES ⚠️必须在+startWithAppID:channel:appName前设置才有效 
 | 
@property (nonatomic, assign) BOOL sessionEnalbe; 
 | 
  
 | 
//==================================单例方法====================================== 
 | 
+ (instancetype _Nonnull)sharedInstance; 
 | 
  
 | 
//==================================初始化方法==================================== 
 | 
/** 
 | 
 启动tracker服务 
 | 
  
 | 
 @param appID 应用标示,由头条数据仓库组统一分配 
 | 
 @param appName 应用名,需向头条申请 
 | 
 @param channel 渠道名称,建议正式版App Store 内测版local_test 灰度版用发布的渠道名,如pp 
 | 
 */ 
 | 
+ (void)startWithAppID:(NSString *_Nonnull)appID channel:(NSString *_Nonnull)channel appName:(NSString *_Nonnull)appName; 
 | 
  
 | 
/** 
 | 
 用户登录状态发生变更的时候需要调用此接口,传入当前的用户的user_unique_id 
 | 
  
 | 
 @param uniqueID 用户当前的user_unique_id 
 | 
 */ 
 | 
- (void)setCurrentUserUniqueID:(NSString *_Nullable)uniqueID; 
 | 
  
 | 
/** 
 | 
 用户登录状态发生变更的时候需要调用此接口,传入当前的用户的user_unique_id,并且关心SSID重新获取的时机 
 | 
  
 | 
 @param uniqueID 用户当前的user_unique_id 
 | 
 @param didRetriveBlock 重新获取SSID的回调 
 | 
 */ 
 | 
- (void)setCurrentUserUniqueID:(NSString *_Nullable)uniqueID 
 | 
           didRetriveSSIDBlock:(TTInstallDidRegisterBlock _Nullable)didRetriveBlock; 
 | 
  
 | 
//=============================== V3 Interface =================================== 
 | 
/** 
 | 
 v3格式日志打点 
 | 
 @param event 事件名称 
 | 
 @param params 额外参数 
 | 
 */ 
 | 
+ (void)eventV3:(NSString *_Nonnull)event params:(NSDictionary *_Nullable)params; 
 | 
  
 | 
  
 | 
//================================== 钩子方法 ====================================== 
 | 
/** 
 | 
 捕获一条即将被缓存的埋点日志,做一些额外的事情,比如监控等 
 | 
  
 | 
 @param serviceID 本业务标示建议公司名.产品线.具体业务 比如bytedance.toutiao.ad 
 | 
 @param logHookBlock 一条即将被缓存的埋点日志 
 | 
 */ 
 | 
- (void)registerWithServiceID:(NSString *_Nonnull)serviceID willCacheOneLogBlock:(TTTrackerLogHookBlock _Nullable)logHookBlock; 
 | 
  
 | 
//=============================== Debug模式配置 ==================================== 
 | 
/** 
 | 
 设置当前环境是否为内测版本 
 | 
  
 | 
 @param isInHouseVersion 是否为内测版本 
 | 
 */ 
 | 
- (void)setIsInHouseVersion:(BOOL)isInHouseVersion; 
 | 
  
 | 
/** 
 | 
 设置debug阶段埋点验证工具的域名和端口号,一般在应用的高级调试中设置 
 | 
  
 | 
 @param hostName 返回当前验证工具所在的pc主机的ip和端口号,形如:10.2.201.7:10304 */ 
 | 
- (void)setDebugLogServerHost:(NSString *_Nonnull)hostName; 
 | 
  
 | 
/** 
 | 
 设置debug阶段埋点验证工具的完整url地址,一般在二维码扫描回调里调用此方法 
 | 
  
 | 
 @param serverAddress 返回能连接到当前验证工具的完整url地址 */ 
 | 
- (void)setDebugLogServerAddress:(NSString *_Nonnull)serverAddress; 
 | 
  
 | 
@end 
 |