菜单

iOS

ⓘ 提示
iOS SDK 要求最低系统版本为 iOS 11.0

最新版本:
Cocoapods Version

一、自动集成

  • Swift Package Manager
swift 复制代码
Add the following to your Package.swift file:
dependencies:
.package(url: "https://github.com/lovinjoy/datatower.ai-core-ios",from:"{上面的最新版本}")
Build your project:
$ swift build
  • Cocoapods
ruby 复制代码
CocoaPods is a dependency manager for Cocoa projects. To install ROIQueryCoreFrame with CocoaPods:

Make sure CocoaPods is installed.

# Using the default Ruby install will require you to use sudo when
# installing and updating gems.
[sudo] gem install cocoapods
Update your Podfile to include the following:

use_frameworks!

target 'YourAppTargetName' do
pod 'DataTowerAICore', '~> {上面的最新版本}'
end
Run pod install --repo-update.

二、初始化

  • 说明

DataTower.ai Core SDK 唯一初始化入口

  • 方法
objc 复制代码
+ (void)initSDK:(NSString *)appid
      serverUrl:(NSString *)url
        channel:(DTChannel)channel
        isDebug:(BOOL)debug
       logLevel:(DTLoggingLevel)logLevel
      enableTrack:(BOOL)enableTrack
  • 参数
参数名 类型 是否必传 说明 示例
appId NSString 创建项目后 DT 后台分配的 app_id,如没有创建项目权限需联系公司超级管理员角色或 DT 工作人员 dt_test
serverUrl NSString 数据上报地址,创建项目后 DT 后台自动分配,请在【项目设置-项目详情】中获取 https://xxx.roiquery.com
channel DTChannel 渠道,打多渠道包时需要用到,可使用 SDK 内部提供的实现 DTChannelAppStore
isDebug BOOL 是否打开调试,调试模式下将打印 log, 默认为 false;log 标签为 DataTower true/false
logLevel DTLoggingLevel log 的级别,仅在 isDebug = true 有效 DTLoggingLevelDebug、DTLoggingLevelInfo、DTLoggingLevelError
enableTrack BOOL 是否上报到服务器,一般填Yes,如果需要先传入公共属性,填No,待设置完相应属性后,需调用setEnableTracking开启上传,标志未开启前,数据不会上报到后台 Yes/No
  • 使用
objc 复制代码
@import DataTowerAICore;

// 在程序入口调用
[DT initSDK:@"appid" serverUrl:@"serverUrl" channel:DTChannelAppStore isDebug:YES logLevel:DTLoggingLevelDebug enableTrack:YES];

三、基础功能

3.1 ID 体系

3.1.1 设置账号 ID

  • 说明

可以在用户每一次登录时,调用 setAccountId 设置用户的账号 ID, DT 系统将会以账号 ID 作为身份识别 ID,多次调用 setAccountId 将覆盖先前的账号 ID

若您的应用没有账号体系可以不设置

  • 方法
objc 复制代码
+ (void)setAccountId:(NSString *)accountId
  • 参数
参数名 类型 是否必传 说明
id NSString 自有用户系统的 id
  • 使用
objc 复制代码
[DTAnalytics setAccountId:@"123456"];

3.1.2 获取 DT ID

  • 说明

获取由 SDK 生成的设备标识 DT ID。

  • 方法
objc 复制代码
+ (NSString *)getDataTowerId
  • 使用
objc 复制代码
NSString *dtId = [DTAnalytics getDataTowerId]

3.2 设置事件上报

  • 说明

调用 trackEventName 设置自动上报的埋点事件和事件属性

  • 方法
objc 复制代码
+ (void)trackEventName:(NSString *)eventName properties:(NSDictionary *)properties
  • 参数
参数名 类型 是否必传 说明
eventName NSString 事件名称
properties NSDictionary 自定义事件属性
  • 使用
objc 复制代码
NSDictionary *eventProperties = @{ @"product_name": @"商品名"};
[DTAnalytics trackEventName:@"product_buy" properties:eventProperties];
// or 不传属性
[DTAnalytics trackEventName:@"dt_track_simple"]

3.3 设置用户属性

DT 系统支持的用户属性设置类型总览说明如下

操作 对应事件名 处理规则
覆盖用户属性 #user_set 对用户表进行操作,覆盖用户的原有属性值,如果之前不存在该用户属性,则会新建该用户属性,类型与覆盖操作传入属性的类型一致
初始化用户属性 #user_set_once 对用户表进行操作,初始化用户属性,如果该属性已有值存在,系统忽略本次操作
累加用户属性 #user_add 对用户表进行操作,对数值型的用户属性做累加计算,如果该属性还未被设置,则会赋值 0 后再进行计算,可传入负值等同于相减操作
清空用户属性值 #user_unset 对用户表进行操作,清空用户属性的属性值,即设置成 NULL,如果被清空的属性不存在也不会新建该属性
追加列表型用户属性的元素 #user_append 对用户表进行操作,对列表类型的用户属性追加元素,如果被追加的列表属性不存在,系统将自动生成并进行追加
追加并去重列表类型用户属性的元素 #user_uniq_append 对用户表进行操作,对列表类型的用户属性值追加元素,并会进行一次全列表去重(去重保证前后原有的元素顺序不变),如果被追加的列表属性不存在,系统将自动生成并进行追加再去重

3.3.1 user_set

  • 说明

对于一般的用户属性,您可以调用 userSet 来进行设置,使用该接口上传的属性将会覆盖原有的属性值,如果之前不存在该用户属性,则会新建该用户属性,类型与覆盖操作传入属性的类型一致

  • 方法
objc 复制代码
+ (void)userSet:(NSDictionary *)properties
  • 参数
参数名 类型 是否必传 说明
properties NSDictionary 事件属性
  • 使用
objc 复制代码
// 设置用户属性
[DTAnalytics userSet:@{@"username": @"dt_name"}];
// 此时"username"为"dt_name"
[DTAnalytics userSet:@{@"username": @"dt_name2"}];
// 此时"username"为"dt_name2"

3.3.2 user_set_once

  • 说明

如果您要上传的用户属性只要设置一次,则可以调用 userSetOnce 来进行设置,当该属性之前已经有值的时候,将会忽略这条信息

  • 方法
objectivec 复制代码
+ (void)userSetOnce:(NSDictionary *)properties
  • 参数
参数名 类型 是否必传 说明
properties NSDictionary 事件属性
  • 使用
objc 复制代码
// 设置用户属性
[DTAnalytics userSetOnce:@{@"username": @"dt_name"}];
// 假设"username"从来没被设置过,此时"username"为"dt_name"
[DTAnalytics userSet:@{@"username": @"dt_name2"}];
// 此时"username"仍为"dt_name"
[DTAnalytics userSetOnce:@{@"username": @"dt_name3"}];
// 此时"username"为"dt_name"

3.3.3 user_add

  • 说明

当您要上传数值型的属性时,您可以调用 userAdd 来对该属性进行累加操作,如果该属性还未被设置,则会赋值 0 后再进行计算,可传入负值,等同于相减操作

  • 方法
objc 复制代码
+ (void)userAdd:(NSDictionary *)properties
  • 参数
参数名 类型 是否必传 说明
properties NSDictionary 事件属性 设置的属性 key 为字符串,Value 只允许为数值,否则操作不生效
  • 使用
objc 复制代码
// 设置用户属性
[DTAnalytics userAdd:@{@"usermoney": [NSNumber numberWithInt:6]}];
// 此时"usermoney"为 6
[DTAnalytics userAdd:@{@"usermoney": [NSNumber numberWithInt:6]}];
// 此时"usermoney"为 12

3.3.4 user_unset

  • 说明

当您要清空用户的用户属性值时,您可以调用 userUnset 来对指定属性进行清空操作,如果该属性还未创建,则 userUnset 不会创建该属性

  • 方法
objc 复制代码
+ (void)userUnset:(NSString *)propertyName
  • 参数
参数名 类型 是否必传 说明
propertyName NSString 用户属性名称
  • 使用
objc 复制代码
// 清空用户属性
[DTAnalytics userUnset:@"key1"];

3.3.5 user_delete

  • 说明 如果您要删除某个用户,可以调用 user_delete 将这名用户删除,您将无法再查询该名用户的用户属性,但该用户产生的事件仍然可以被查询到。
  • 方法
objc 复制代码
+ (void)userDelete

3.3.6 user_append

  • 说明 您可以调用 userAppend 对列表类型的用户数据追加元素。
  • 方法
objc 复制代码
+ (void)userAppend:(NSDictionary<NSString *, NSArray *> *)properties
  • 参数
参数名 类型 是否必传 说明
properties NSDictionary 用户属性名称集
  • 使用
objc 复制代码
NSArray *course = @[@"History",@"Now"];
NSDictionary *userAppendProperties = @{
    @"course":course,
};
    
[DTAnalytics userAppend:userAppendProperties];

3.3.7 user_uniq_append

  • 说明 您可以调用 userUniqAppend 对列表类型的用户数据追加唯一元素。调用 userUniqAppend 接口会对追加的用户属性进行去重, userAppend 接口不做去重,用户属性可存在重复。
  • 方法
objc 复制代码
+ (void)userUniqAppend:(NSDictionary<NSString *, NSArray *> *)properties
  • 参数
参数名 类型 是否必传 说明
properties NSDictionary 用户属性名称集
  • 使用
objc 复制代码
// 此时user_list的属性值为["apple","ball"]
[DTAnalytics userAppend:@{@"user_list":@[@"apple", @"ball"]}];
// 此时user_list的属性值为["apple","apple","ball","cube"]
[DTAnalytics userAppend:@{@"user_list":@[@"apple", @"cube"]}];
// 此时user_list的属性值为["apple","ball","cube"]
  [DTAnalytics userUniqAppend:@{@"user_list":@[@"apple", @"cube"]}];

3.4 设置支付原始订单 ID

  • 说明

DT 平台处理数据时,需要获取 IOS 支付平台原始订单 ID,以此作为关联 Apple 支付用户的标识。请在使用支付相关的事件上报时,务必调用此方法。

  • 方法
objc 复制代码
+ (void)setIasOriginalOrderId:(NSString *)oorderId;
  • 参数
参数名 类型 是否必传 说明
orderId NSString Apple 支付原始订单 ID
  • 使用
objectivec 复制代码
[DTAnalytics setIasOriginalOrderId:@"123434"]

四、进阶功能

4.1 收入数据上报

4.1.1 广告变现

  • 说明
  1. 如果你的产品具备广告变现(IAA)功能,DT SDK 已经预置了一些常用的广告事件接口。在产品的广告变现相关场景中,你可以调用相应的接口。一旦调用了这些接口成功,您可以在我们的后台实时查看广告变现全链路的表现数据。
  2. 并不是所有事件都要求上报,但是上报的越详细,越有助于分析整个广告变现链路。如果预置事件中没有满足你的需求,你仍可以自定义事件。DT 中针对一个广告变现流程(加载、展示、行为、转化、关闭等),使用了唯一的 seq 用来关联和区分。如果你想关联同一个广告变现流程中预置事件和自定义事件,请使用 seq 进行关联。seq 的生成,可以使用系统的 NSUUID 来实现。
  3. 如果需要查看设备层级广告收入预估,请务必调用以下接口上报相关事件:
事件名称 显示名 事件描述
#ad_load_begin 广告加载开始 广告加载开始
#ad_load_end 广告加载结束 广告加载结束
#ad_to_show 广告预展示 将要展示广告
#ad_show 广告展示 参与广告收益计算的重要事件;在广告展示时上报
#ad_show_failed 广告展示失败 广告展示失败
#ad_close 广告关闭 广告已经关闭
#ad_click 广告点击 参与广告收益计算的重要事件;在广告点击时上报
#ad_rewarded 广告获得奖励 只针对激励广告获得奖励
#ad_conversion 广告收益 参与广告收益计算的重要事件;在用户获得广告奖励后上报
#ad_paid 广告展示价值 广告平台给每个广告的预估价值
  • 接口列表
objc 复制代码
// 上报广告开始加载事件
+ (void) reportLoadBegin:(NSString *)adid
                    type:(DTAdType)type
                platform:(DTAdPlatform)platform
                     seq:(NSString *)seq
              properties:(NSDictionary *)properties;

// 上报广告结束加载事件
+ (void) reportLoadEnd:(NSString *)adid
                  type:(DTAdType)type
              platform:(DTAdPlatform)platform
              duration:(NSNumber *)duration
                result:(BOOL)result
                   seq:(NSString *)seq
             errorCode:(NSInteger)errorCode
          errorMessage:(NSString *)errorMessage
            properties:(NSDictionary *)properties;

// 上报广告预展示事件,在想展示广告之前调用
+ (void) reportToShow:(NSString *)adid
                    type:(DTAdType)type
                platform:(DTAdPlatform)platform
                location:(NSString *)location
                     seq:(NSString *)seq
              properties:(NSDictionary *)properties
             entrance:(NSString *)entrance;

// 上报广告展示事件,在展示广告时调用
+ (void) reportShow:(NSString *)adid
                    type:(DTAdType)type
                platform:(DTAdPlatform)platform
                location:(NSString *)location
                     seq:(NSString *)seq
              properties:(NSDictionary *)properties
             entrance:(NSString *)entrance;
             
// 上报广告展示失败事件,在展示广告失败时调用
+ (void) reportAdShowFail:(NSString *)adid
                    type:(DTAdType)type
                platform:(DTAdPlatform)platform
                location:(NSString *)location
                     seq:(NSString *)seq
                errorCode:(NSInteger)errorCode
             errorMessage:(NSString *)errorMessage
              properties:(NSDictionary *)properties
             entrance:(NSString *)entrance;

// 上报广告关闭事件,在广告被关闭时调用
+ (void) reportClose:(NSString *)adid
                    type:(DTAdType)type
                platform:(DTAdPlatform)platform
                location:(NSString *)location
                     seq:(NSString *)seq
              properties:(NSDictionary *)properties
                entrance:(NSString *)entrance;
                
// 上报广告点击事件,在广告被点击时调用
+ (void) reportClick:(NSString *)adid
                type:(DTAdType)type
            platform:(DTAdPlatform)platform
            location:(NSString *)location
                 seq:(NSString *)seq
           mediation:(DTAdMediation)mediation
         mediationId:(NSString *)mediationId
          properties:(NSDictionary *)properties
            entrance:(NSString *)entrance)

// 上报广告获得奖励事件,在激励广告获取奖励后调用
+ (void) reportClick:(NSString *)adid
                    type:(DTAdType)type
                platform:(DTAdPlatform)platform
                location:(NSString *)location
                     seq:(NSString *)seq
              properties:(NSDictionary *)properties
                entrance:(NSString *)entrance;

// 上报广告收益转化事件,在点击广告时调用(#ad_conversion_source = by_click)
+ (void) reportConversionByClick:(NSString *)adid
                    type:(DTAdType)type
                platform:(DTAdPlatform)platform
                location:(NSString *)location
                     seq:(NSString *)seq
              properties:(NSDictionary *)properties
                entrance:(NSString *)entrance;

// 上报广告收益转化事件,在获得广告激励时调用(#ad_conversion_source = by_rewarded)
+ (void) reportConversionByRewarded:(NSString *)adid
                    type:(DTAdType)type
                platform:(DTAdPlatform)platform
                location:(NSString *)location
                     seq:(NSString *)seq
              properties:(NSDictionary *)properties
                entrance:(NSString *)entrance;

// 上报广告收益转化事件,在点击广告后跳出App时调用(#ad_conversion_source = by_left_app)
+ (void) reportConversionByLeftApp:(NSString *)adid
                    type:(DTAdType)type
                platform:(DTAdPlatform)platform
                location:(NSString *)location
                     seq:(NSString *)seq
              properties:(NSDictionary *)properties
                entrance:(NSString *)entrance;

// 上报广告展示价值事件,在广告SDK回调时调用
+ (void) reportPaid:(NSString *)adid
                    type:(DTAdType)type
                platform:(DTAdPlatform)platform
                location:(NSString *)location
                     seq:(NSString *)seq
                    value:(NSString *)value
                currency:(NSString *)currency
                precision:(NSString *)precision
              properties:(NSDictionary *)properties
                entrance:(NSString *)entrance;
             
+ (void) reportPaid:(NSString *)adid
               type:(DTAdType)type
           platform:(DTAdPlatform)platform
           location:(NSString *)location
                seq:(NSString *)seq
          mediation:(DTAdMediation)mediation
        mediationId:(NSString *)mediationId
              value:(NSString *)value
          precision:(NSString *)precision
            country:(NSString *)country
         properties:(NSDictionary *)properties
           entrance:(NSString *)entrance;

// 上报离开app事件,在点击广告链接,离开当前app(页面)时调用
+ (void) reportLeftApp:(NSString *)adid
                    type:(DTAdType)type
                platform:(DTAdPlatform)platform
                location:(NSString *)location
                     seq:(NSString *)seq
              properties:(NSDictionary *)properties
                entrance:(NSString *)entrance;

// 上报返回app事件,在访问广告链接,回到当前app(页面)时调用
+ (void) reportReturnApp:(NSString *)adid
                    type:(DTAdType)type
                platform:(DTAdPlatform)platform
                location:(NSString *)location
                clickGap:(NSNumber *)clickGap
                returnGap:(NSNumber *)returnGap
                     seq:(NSString *)seq
              properties:(NSDictionary *)properties
                entrance:(NSString *)entrance;
  • 参数
参数名 类型 是否必传 说明
seq String 广告系列事件的标识
id String Network 广告单元 ID
type DTAdType 详见 类型 Type
platform DTAdPlatform 详见 广告平台 Platform
entrance String 广告展示入口
result Boolean 广告加载结果,true 为广告加载成功
duration Long 广告加载时长
location String 广告位置,通常为在广告平台配置的位置值
errorCode Int 失败码,值为应用接入的对应的广告平台给出的错误码
errorMessage String 失败信息,应用接入的对应的广告平台给出的错误信息
value String 广告价值,应用接入的对应的广告平台给出的广告价值信息
currency String 广告价值对应的货币单位,请传入 USD
precision String 精确度,广告价值所对应的精确度
country String 广告展示所在的国家/地区信息
mediation DTAdMediation 详见 聚合广告平台 Mediation
mediationId String 聚合平台广告单元 ID
properties NSDictionary<String, Any> 应用自定义的额外属性
  • 使用事例

场景一:独立广告平台

objc 复制代码
@import DataTowerAICore;
@import GoogleMobileAds;
@import UIKit;

@interface ViewController () <GADFullScreenContentDelegate>

@property(nonatomic, strong) GADInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

 // 广告位,比如这页面是主页
 NSString *location = @"main";

 // Admob 广告单元
 NSString *adUnit = @"ca-app-pub-3940256099942544/1033173712";

 // 整个过程的行为系列标识
  NSString *seq = [NSUUID UUID].UUIDString;


  GADRequest *request = [GADRequest request];
  [GADInterstitialAd loadWithAdUnitID:adUnit
                              request:request
                    completionHandler:^(GADInterstitialAd *ad, NSError *error) {

  }];

  - (IBAction)showad:(id)sender {
   if (self.interstitial) {
     [self.interstitial presentFromRootViewController:self];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

// 展示失败的回调
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {

}

// 关闭的回调
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
   NSLog(@"Ad did dismiss full screen content.");
}

 // 点击的回调(如果有的话)
  - (void)adClicked{
    // 上报广告转化
    [DTAdReport reportConversionByClick:adUnit type:DTAdTypeInterstitial
     platform:DTAdPlatformAdmob location:location seq:seq properties:@{} entrance:@""];
  }
}

对于激励广告,会有获得激励回调

objc 复制代码
// 获得激励的回调(对于激励广告)
   - (void)adRewarded{
    // 上报广告转化
    [DTAdReport reportConversionByRewarded:adUnit type:DTAdTypeInterstitial
     platform:DTAdPlatformAdmob location:location seq:seq properties:@{} entrance:@""];
  }

场景二:聚合广告平台(Mediation)

由于聚合广告平台展示广告的时候,通常没有返回具体是哪个广告平台(Network)的广告和对应信息,所以需要在回调中判断,如 onAdShowed 回调

objectivec 复制代码
_/// 展示的回调
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad will present full screen content.");
    // 上报展示
    [DTAdReport reportShow:adUnit type:DTAdTypeInterstitial platform:DTAdPlatformAdmob location:location seq:seq properties:@{} entrance:@""];

__}_

其他回调类似

4.1.2 内购变现(beta)

  • 说明

如果你的产品具备内购变现(IAP)功能,DT SDK 已经预置了一些常用的事件接口。在产品的内购变现相关场景中,你可以调用相应的接口。一旦调用了这些接口成功,您可以在我们的后台实时查看内购变现全链路的表现数据。

  • 方法
objc 复制代码
// 上报购买成功事件,购买成功的时候上报
+ (void)reportPurchased:(NSString *)order
                    sku:(NSString *)sku
                  price:(NSNumber *)price
               currency:(NSString *)currency
                    seq:(NSString *)seq
              placement:(NSString *)placement;
  • 参数
参数名 类型 是否必传 说明
seq NSString 购买行为系列事件的标识
placement NSString 购买行为发生所在的位置,可为空
currency NSString 购买所用的货币单位,与 price 共同决定购买所需的价格
price NSNumber 购买所需的价格
sku NSString 购买商品 id
order NSString 购买订单

4.1.3 订阅变现(beta)

  • 说明

如果你的产品具备内购变现(IAS)功能,DT SDK 已经预置了一些常用的事件接口。在产品的订阅变现相关场景中,你可以调用相应的接口。一旦调用了这些接口成功,您可以在我们的后台实时查看订阅变现全链路的表现数据。

  • 方法
objc 复制代码
// 订阅成功事件上报,订阅成功时上报
+ (void)reportSubscribeSuccess:(NSString *)seq
                      entrance:(NSString *)entrance
                     placement:(NSString *)placement
                           sku:(NSString *)sku
                       orderId:(NSString *)orderId
               originalOrderId:(NSString *)originalOrderId
                         price:(NSString *)price
                      currency:(NSString *)currency
                    properties:(NSDictionary *)properties;
  • 参数
参数名 类型 是否必传 说明
seq NSString 订阅行为系列事件的标识
entrance NSString 订阅行为入口
placement NSString 订阅行为发生所在的位置
currency NSString 订阅所用的货币单位,与 price 共同决定订阅所需的价格
price NSString 订阅所需的价格
sku NSString 订阅商品 id
orderId NSString 订阅订单
originalOrderId NSString 订阅原始订单 id
properties NSDictionary 自定义属性

4.2 集成三方数据

4.2.1 透传 dt_id

如果您需将三方数据同步至 DT 平台,请在三方 SDK 初始化之前调用获取 dt_id 的方法,然后按照 DT 集成各平台的操作文档传入三方平台的对应参数

objc 复制代码
NSString *dtId = [DTAnalytics getDataTowerId];

4.2.2 关联三方 ID

  • 说明

如果您需将 DT 数据从服务端发送至三方平台,请初始化三方 SDK 之后获取三方设备 ID,然后使用 DT SDK 进行数据上报

  • 方法
objc 复制代码
// 需先获取对应 id
// Firebase
[DTAnalytics setFirebaseAppInstanceId:""];
// AppsFlyer
[DTAnalytics setAppsFlyerId:@""];
// Adjust
[DTAnalytics setAdjustId:@""];
// Kochava
[DTAnalytics setKochavaId:@""];
// Tenjin
[DTAnalytics setTenjinId:@""];
  • 调用接口会上报的属性
调用接口 对应三方平台 公共事件属性 用户属性
setFirebaseAppInstanceId() Firebase #firebase_iid #latest_firebase_iid
setAppsFlyerId() AppsFlyer #appsflyer_id #latest_appsflyer_id
setAdjustId() Adjust #adjust_id #latest_adjust_id
setKochavaId() Kochava #kochava_id #latest_kochava_id
setTenjinId() Tenjin #tenjin_id #latest_tenjin_id

4.3 事件时长计时

  • 说明

如果您需要记录某个事件的持续时长,可以调用 DTAnalyticsUtils 来开始计时。

在事件开始时,调用 trackTimerStart 并不会真正发送事件;在事件结束时调用 trackTimerEnd,SDK 会上报 "event" 事件,并自动在"event" 事件属性中加入 #duration 这一属性来表示记录的事件持续时长。多次调用 trackTimerStart\ trackTimerPause 时,事件 "event" 的开始时间\暂停时间以最后一次调用时为准。多次调用 trackTimerEnd\ trackTimerResume 时,事件 "event" 的结束时间\恢复时间以最先一次调用时为准。

  • 方法
swift 复制代码
// 开始事件计时
[DTAnalyticsUtils trackTimerStart@"event"]

// 如果需要暂停事件计时
[DTAnalyticsUtils trackTimerPause@"event"]

// 如果需要恢事件计时
[DTAnalyticsUtils trackTimerResume@"event"]

// 结束事件计时
[DTAnalyticsUtils trackTimerEnd@"event"]
上一个
Android
下一个
Unity
最近修改: 2024-09-03