AdformTracking 1.9.0

AdformTracking 1.9.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2022年9月

Vladas Drejeris 维护。



  • Adform

入门

当您运行移动广告活动时,新增应用安装量通常是一个主要目标。我们的易于安装的跟踪 SDK 将在 Adform 平台上提供无第三方 SDK 处理和无需投入大量时间即可实现的跟踪和报告功能。

如果您有任何问题或建议,请联系 [email protected]

重要 iOS 14 支持

Apple 在 iOS 14 中引入了一个新的 AppTrackingTransparency 框架和跟踪权限。为了支持这些更改,您需要对 Adform 跟踪 SDK 集成进行一些小的修改。有关更多信息,请查看下面的迁移指南

1. 一般信息

使用 Adform 跟踪 SDK 需要以下要求

  • Xcode 13.0 或更高版本。
  • 需要支持的目标 iOS 版本 9.0 或更高。
  • 需要启用 ARC。

如果您要将 SDK 更新到 1.0 版本,请参考下面的迁移指南。

1.1. 插件

跟踪SDK也可在这些平台上使用

2. 集成

2.1. 使用Swift包管理器

Swift包管理器是管理Swift代码分发的一个工具。它与Swift构建系统集成,以自动化下载、编译和链接依赖项的过程。

您可以通过Xcode UI将Adform跟踪SDK作为依赖项添加到项目中,或者按照以下方式将其添加到项目的Package.swift文件中

dependencies: [
    .package(url: "https://github.com/adform/adform-tracking-ios-sdk", .upToNextMajor(from: "1.7.4"))
]

注意! Xcode 12存在一个错误,其中通过SPM分发的静态框架有时会错误地嵌入到应用程序中。该问题在Xcode 12.4版本说明中提到。如果您的存档应用程序验证失败,您可能需要使用在构建后删除嵌入框架的工作区来解决此问题。您可以使用以下构建阶段脚本来从应用程序中删除嵌入的框架

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

rm -rf "${APP_PATH}/Frameworks/AdformTracking.framework"
rm -rf "${APP_PATH}/Frameworks/ProtocolBuffers.framework"
rm -rf "${APP_PATH}/Plugins/AdformTracking.framework"
rm -rf "${APP_PATH}/Plugins/ProtocolBuffers.framework"

2.2. 使用CocoaPods

Adform跟踪SDK可通过CocoaPods获取。要使用CocoaPods集成SDK,您需要编辑Podfile文件,并指定AdformTracking组件。

pod 'AdformTracking', '~> 1.7.4'

有关CocoaPods的更多信息,请访问CocoaPods网站.

2.3. 使用Carthage

Adform 跟踪 SDK 可通过 Carthage 获取。

  • 要使用 Carthage 集成 SDK,您需要在 Cartfile 中指定。
binary "https://raw.githubusercontent.com/adform/adform-tracking-ios-sdk/master/AdformTracking.json"
  • Adform 跟踪 SDK 使用 Protocol Buffers - Google 的数据交换格式。因此,您还需要将 Protobuf 库导入到您的项目中。
binary "https://raw.githubusercontent.com/adform/protobuf-ios/master/ProtocolBuffers.json"
  • 我们的 SDK 和 Protocol Buffers 库作为静态框架分发。因此,您不应将它们添加到 Carthage 中的 copy-frameworks 构建阶段的输入/输出文件中。

有关 Carthage 的更多信息,请访问 Carthage 网站

2.4. 手动

  • 下载 Adform 跟踪 SDK 最新构建版本。
  • AdformTracking.framework 拖拽到您的项目中。

alt tag

  • 当询问时,选择 将项目添加到目标文件夹

alt tag

  • 然后在项目导航器中选中 AdformTracking.xcframework,转到文件检查器并将它添加到您的应用程序目标(目标成员资格)。

  • Adform 跟踪 SDK 使用 Protocol Buffers - Google 的数据交换格式。因此,您需要将 Protobuf 库导入到您的项目中。您可以从 Google 源代码 中直接使用它,或集成我们的 框架构建

2.4. 故障排除

  • 如果您收到了 缺少符号错误,这可能意味着自动框架链接失败了,在这种情况下,您可以在项目中显式地添加 AdSupprt.framework 依赖项。

  • 当您在集成 SDK 时获得 bundle 格式未识别、无效或不适配 错误,可能意味着以下两个问题之一

    • 您正在使用 Carthage 集成 SDK 并且已将 AdformTracking.framework 和 ProtocolBuffers.framework 添加到 Carthage 的 copy-frameworks 构建阶段的输入/输出文件中。您不应将这些框架添加到 copy-frameworks 构建阶段。
    • 您在框架和库项目的配置中选择的是 嵌入。此配置应选择为 不嵌入

3. Adform 跟踪 SDK 基本实现

  • AppDelegate.h 中导入 AdformTracking

  • application:didFinishLaunchingWithOptions: 方法中调用 startTracking:waitForPermissions: 方法,方法使用您的客户端跟踪 ID 和 waitForPermissions true。 此方法应仅调用一次,当应用程序启动时。

Swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
    AdformTrackingSDK.sharedInstance().startTracking(yourTrackingId, waitForPermissions: true)
        
    return true
}
Objective-C
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   
    [[AdformTrackingSDK sharedInstance] startTracking:yourTrackingId waitForPermissions:true];
	
    return YES;
}
  • 调用 requestTrackingPermissions 以获取用户对于使用广告标识符进行跟踪的权限。调用此方法将呈现系统权限提示。因此,何时显示此提示由您决定。

重要的iOS 15支持

在iOS 15上,您必须确保在应用程序处于活动状态时请求跟踪权限。否则,权限请求将不会被显示。

Swift

if #available(iOS 14.0, *) {
     AdformTrackingSDK.sharedInstance().requestTrackingPermissions()
}
Objective-C
if (@available(iOS 14.0, *)) {
     [[AdformTrackingSDK sharedInstance] requestTrackingPermissions];
}
  • NSUserTrackingUsageDescription 条目添加到您应用的 Info.plist 文件中。

这就完成了!您已准备就绪。现在在 Adform 系統中,当触发时将看到默认的跟踪点(下载、开始、更新)。

  • 如果您不想使用广告标识符进行跟踪,您可能不需要请求用户权限。在这种情况下,在调用 startTracking:waitForPermissions: 时,必须将 false 传递给 waitForPermissions

Swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
    AdformTrackingSDK.sharedInstance().startTracking(yourTrackingId, waitForPermissions: false)
        
    return true
}
Objective-C
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   
    [[AdformTrackingSDK sharedInstance] startTracking:yourTrackingId waitForPermissions:false];
	
    return YES;
}
  • 作为可选操作,在调用 startTracking: 之前,您可以为应用程序设置自定义名称和自定义变量。

Swift

AdformTrackingSDK.sharedInstance().setAppName("CustomApplicationName")

let order = AFOrder()
order.firstName = "Fist name"
order.lastName = "Last name"
        
// You also can set other custom variables.
order.setCustomVariable("var1", forKey: 1)
order.setSystemVariable("sysVar1", forKey: 1)
order.setNumericSystemVariable(123.45, forKey: 1)
        
AdformTrackingSDK.sharedInstance().setOrder(order)
AdformTrackingSDK.sharedInstance().startTracking(yourTrackingId, waitForPermissions: true)
Objective-C
[[AdformTrackingSDK sharedInstance] setAppName:@"CustomApplicationName"];

AFOrder *order = [AFOrder new];
order.firstName = @"First Name";
order.lastName = @"Last Name";

// You also can set other custom variables.
[order setCustomVariable:@"var1" forKey:1];
[order setSystemVariable:@"sysVar1" forKey:1];
[order setNumericSystemVariable:@(123.45) forKey:1];

[[AdformTrackingSDK sharedInstance] setOrder:order];
[[AdformTrackingSDK sharedInstance] startTracking:yourTrackingId waitForPermissions:false];

4. 自定义Adform跟踪SDK实现

  • 对于手动发送自定义跟踪事件,您必须在您想要发送事件的任何类中导入 AdformTracking,在提供的示例中我们使用 ViewController.h

  • 使用您的客户端 Tracking_ID 创建一个 AFTrackPoint 实例。之后,您可以设置跟踪点名称、自定义变量,并最终发送跟踪点。

  • 在定义变量时,需要注意不同类型的变量

    • 具有预定义名称的自定义变量(例如订单号、货币、名字等)
    • 自定义变量(var1-var10)
    • 系统变量(sv1-sv89)
    • 数字系统变量(svn1, svn2)
  • 使用您的跟踪点 ID 创建一个 AFTrackPoint 实例,设置自定义应用程序名称、自定义参数(又称订单),并发送跟踪点。

Swift

let trackPoint = AFTrackPoint(trackPoint: yourTrackingId)
trackPoint.setSectionName("Custom Tracking Point Name")
        
let order = AFOrder()
order.orderId = "Order ID"
order.sale = 1234
order.currency = "Eur"
order.orderStatus = "Sold"
order.firstName = "First Name"
order.lastName = "Last Name"
order.country = "Country"
order.address1 = "Address 1"
order.address2 = "Address 2"
order.zip = "ZIP code"
order.email = "E-mail"
order.phone = "Phone"
order.gender = "Gender"
order.ageGroup = "Age group"
order.basketSize = 12
        
// You also can set other custom variables.
order.setCustomVariable("var1", forKey: 1) // key defines variable index, e.g. forKey:3 means Var3
order.setSystemVariable("sysVar1", forKey: 1) // key defines variable index, e.g. forKey:3 means Sv3
order.setNumericSystemVariable(123.45, forKey: 1) // key defines variable index, e.g. forKey:2 means Svn2; Only numeric values allowed

trackPoint.setOrder(order)
        
AdformTrackingSDK.sharedInstance().send(trackPoint)
Objective-C
AFTrackPoint *trackPoint = [[AFTrackPoint alloc] initTrackPoint:yourTrackingId];
[trackPoint setSectionName:@"CCustom Tracking Point Name"];

AFOrder *order = [AFOrder new];
order.orderId = @"Order ID";
order.sale = 1234; //numeric format
order.currency = @"Eur";
order.orderStatus = @"Sold";
order.firstName = @"First Name";
order.lastName = @"Last Name";
order.country = @"Country";
order.address1 = @"Address 1";
order.address2 = @"Address 2";
order.zip = @"ZIP code";
order.email = @"E-mail";
order.phone = @"Phone";
order.gender = @"Gender";
order.ageGroup = @"Age group";
order.basketSize = 12; //numeric format

// You can also set other custom variables.
[order setCustomVariable:@"Var1 value" forKey:1]; // forKey defines variable index, e.g. forKey:3 means Var3
[order setSystemVariable:@"Sv1 value" forKey:1]; // forKey defines variable index, e.g. forKey:3 means Sv3
[order setNumericSystemVariable:@(123.45) forKey:1]; // forKey defines variable index, e.g. forKey:2 means Svn2; Only numeric values allowed

[trackPoint setOrder:order];

[[AdformTrackingSDK sharedInstance] sendTrackPoint:trackPoint];

为了逻辑性地组织跟踪点,可以为每个自定义跟踪点设置不同的应用名称。这将允许您联合使用应用名称和自定义部分名称。

Swift

let trackPoint = AFTrackPoint(trackPoint: yourTrackingId)
        
trackPoint.setSectionName("Custom Tracking Point Name")
trackPoint.setAppName("Custom_app_name-Section_name")
        
AdformTrackingSDK.sharedInstance().send(trackPoint)
Objective-C
AFTrackPoint *trackPoint = [[AFTrackPoint alloc] initTrackPoint:yourTrackingId];
    
[trackPoint setSectionName:@"Custom Tracking Point Name"];
[trackPoint setAppName:@"Custom_app_name-Section_name"];
    
[[AdformTrackingSDK sharedInstance] sendTrackPoint:trackPoint];

5. 产品变量

此外,您还可以使用跟踪点发送额外的产品变量信息。为此,您有两种选择,一是使用 addProduct: 方法将产品逐个添加到跟踪点中,二是使用 setProducts: 方法设置产品数组。无论如何,您必须设置 AFProduct 对象。

Swift

let trackPoint = AFTrackPoint(trackPoint: yourTrackingId)
trackPoint.setSectionName("Custom Application Name")
        
let product = AFProduct(
    categoryName: "Product category name",
    categoryId: "Product category id",
    productName: "Product name",
    productId: "Product id",
    weight: 10,
    step: 1,
    productSales: 12.58,
    productCount: 2,
    custom: "Custom product information"
)
trackPoint.addProduct(product)
        
AdformTrackingSDK.sharedInstance().send(trackPoint)
Objective-C
AFTrackPoint *trackPoint = [[AFTrackPoint alloc] initTrackPoint:yourTrackingId];
[trackPoint setSectionName:@"Custom Tracking Point Name"];
    
AFProduct *product = [[AFProduct alloc] initWithCategoryName:@"Product category name"
                                                  categoryId:@"Product category id"
                                                 productName:@"Product name"
                                                   productId:@"Product id"
                                                      weight:10
                                                        step:1
                                                productSales:12.58
                                                productCount:2
                                                      custom:@"Custom product information"];
 [trackPoint addProduct:product];
    
 [[AdformTrackingSDK sharedInstance] sendTrackPoint:trackPoint];

同样,对于同一跟踪点,您可以列出多个产品变量列表

Swift

let trackPoint = AFTrackPoint(trackPoint: yourTrackingId)
trackPoint.setSectionName("Custom Application Name")
        
let product1 = AFProduct(
    categoryName: "Product category name",
    categoryId: "Product category id",
    productName: "Product name",
    productId: "Product id",
    weight: 10,
    step: 1,
    productSales: 12.58,
    productCount: 2,
    custom: "Custom product information"
)

let product2 = AFProduct(
    categoryName: "Product category name",
    categoryId: "Product category id",
    productName: "Product name",
    productId: "Product id",
    weight: 10,
    step: 1,
    productSales: 12.58,
    productCount: 2,
    custom: "Custom product information"
)
trackPoint.setProducts([product1, product2])
        
AdformTrackingSDK.sharedInstance().send(trackPoint)
Objective-C
AFTrackPoint *trackPoint = [[AFTrackPoint alloc] initTrackPoint:yourTrackingId];
[trackPoint setSectionName:@"Custom Tracking Point Name"];
    
AFProduct *product1 = [[AFProduct alloc] initWithCategoryName:@"Product category name"
                                                   categoryId:@"Product category id"
                                                  productName:@"Product name"
                                                    productId:@"Product id"
                                                       weight:10
                                                         step:1
                                                 productSales:12.58
                                                 productCount:2
                                                       custom:@"Custom product information"];
                                                          
AFProduct *product2 = [[AFProduct alloc] initWithCategoryName:@"Product category name"
                                                   categoryId:@"Product category id"
                                                  productName:@"Product name"
                                                    productId:@"Product id"
                                                       weight:10
                                                         step:1
                                                 productSales:12.58
                                                 productCount:2
                                                       custom:@"Custom product information"];
[trackPoint setProducts:@[product1, product2]];

[[AdformTrackingSDK sharedInstance] sendTrackPoint:trackPoint];

如果您只想发送部分可用产品数据,可以创建带有默认初始化器的对象后手动设置这些属性,以避免使用大型的 init 方法。

Swift

let trackPoint = AFTrackPoint(trackPoint: yourTrackingId)
        
let product = AFProduct()
product.productName = "My Product Name"
trackPoint.addProduct(product)
        
AdformTrackingSDK.sharedInstance().send(trackPoint)
Objective-C
AFTrackPoint *trackPoint = [[AFTrackPoint alloc] initTrackPoint:Tracking_ID];

AFProduct *product = [AFProduct new];
product.productName = @"My Product Name";
[trackPoint addProduct:product];
    
[[AdformTrackingSDK sharedInstance] sendTrackPoint:trackPoint];

6. 向多个客户端发送信息

可以通过定义每个客户端的跟踪ID来向多个客户端发送跟踪信息。

为了开始跟踪,请使用以下示例:

Swift

AdformTrackingSDK.sharedInstance()
    .startTracking(
        withIds: [yourTrackingId1, yourTrackingId2, yourTrackingId3],
        waitForPermissions: true
    )
Objective-C
[[AdformTrackingSDK sharedInstance] startTrackingWithIds:@[yourTrackingId1, yourTrackingId2, yourTrackingId3] waitForPermissions:true];

要向多个客户端发送具有相同信息但不同跟踪ID的自定义跟踪点,应使用 AFTrackPointsBuilder 类。以下示例演示了如何做到这一点。

Swift

let trackPointBuilder = AFTrackPointsBuilder()
        
// You must set at least these properties:
trackPointBuilder.trackPointIds = [yourTrackingId1, yourTrackingId2, yourTrackingId3]
trackPointBuilder.sectionName = "Custom trackpoint"
        
// Additionally you can set more information to track.
trackPointBuilder.applicationName = "Custom application name"
trackPointBuilder.order = yourOrder;
            
// Create trackpoints
let trackingPoints = trackPointBuilder.build()
            
// Send trackpoints.
AdformTrackingSDK.sharedInstance().send(trackingPoints)
Objective-C
AFTrackPointsBuilder *trackPointBuilder = [[AFTrackPointsBuilder alloc] init];
    
// You must set at least these properties:
trackPointBuilder.trackPointIds = @[yourTrackingId1, yourTrackingId2, yourTrackingId3];
trackPointBuilder.sectionName = @"Custom trackpoint";
    
// Additionally you can set more information to track.
trackPointBuilder.applicationName = @"Custom application name";
trackPointBuilder.order = yourOrder;
    
// Create trackpoints
NSArray *trackPoints = [trackPointBuilder build];
    
// Send trackpoints.
[[AdformTrackingSDK sharedInstance] sendTrackPoints:trackPoints];

7. 限制跟踪

您可以通过调用 setEnabled: 方法并传递参数 NO 来禁用 Adform Tracking SDK 对任何事件的跟踪。此设置会在应用启动之间保留。默认情况下,跟踪是启用的。

Swift

AdformTrackingSDK.sharedInstance().setEnabled(false)
Objective-C
[[AdformTrackingSDK sharedInstance] setEnabled:NO];

您可以通过调用 isEnabled 方法来检查跟踪是否启用。

8. Deeplink tracking

Adform Tracking SDK使用深链接跟踪来归因部分Facebook事件。如果您打算使用我们的SDK进行Facebook跟踪,应实现此功能。

实现非常简单,您只需在您的AppDelegate类的method中调用AdformTrackingSDK方法的applicationOpenUrl:sourceApplication:并将url和sourceApplication参数传递。

Swift

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    return AdformTrackingSDK.sharedInstance().applicationOpen(url, options: options)
}
Objective-C
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    return [[AdformTrackingSDK sharedInstance] applicationOpenURL:url options:options];
}

9. SIM卡状态跟踪

Adform Tracking SDK允许您跟踪用户设备SIM卡状态。此功能允许您查看用户设备是否插入了SIM卡。

默认情况下,此功能是关闭的,因此您想要使用它,需要启用它。要启用,您只需使用setSendSimCardStateEnabled:方法。

Swift

AdformTrackingSDK.sharedInstance().setSendSimCardStateEnabled(true)
AdformTrackingSDK.sharedInstance().startTracking(yourTrackingId, waitForPermissions: true)
Objective-C
[[AdformTrackingSDK sharedInstance] setSendSimCardStateEnabled:true];
[[AdformTrackingSDK sharedInstance] startTracking:yourTrackingId waitForPermissions:true];

10. 安全

默认情况下,AdformTracking SDK使用HTTPS协议进行网络通信,但您可以选择禁用它并使用不安全的HTTP协议。以下示例展示了如何进行操作。

Swift

AdformTrackingSDK.sharedInstance().setHTTPSEnabled(false)
Objective-C
AdformTrackingSDK sharedInstance] setHTTPSEnabled:false];

第11条 GDPR

默认情况下,Adform Tracking SDK 将检查CMP设置并使用该信息。有关更多信息,请点击此处

可以手动设置GDPR和GDPR同意。您需要使用setGdpr:setGDPRConsent:方法。对于GDPR同意,您需要设置base64编码的字符串。

示例

Swift

AdformTrackingSDK.sharedInstance().setGDPR(true)
	
let encodedGDPRConsent = "GgdprConsent".data(using: .utf8)?.base64EncodedString()
AdformTrackingSDK.sharedInstance().setGDPRConsent(encodedGDPRConsent)
Objective-C
[[AdformTrackingSDK sharedInstance] setGDPR:@(true)];

NSString *encodedGDPRConsent = [[@"GgdprConsent" dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0];
[[AdformTrackingSDK sharedInstance] setGDPRConsent:encodedGDPRConsent];

第12条 US隐私

默认情况下,Adform Tracking SDK将检查CMP设置以获取美国隐私值。更多信息可以在此处找到

还可以手动设置US隐私值。您可以使用setUSPrivacy:方法来做这件事。

示例

Swift

let usPrivacy = "US_PRIVACY"
AdformTrackingSDK.sharedInstance().setUSPrivacy(usPrivacy)
Objective-C
NSString *usPrivacy = @"US_PRIVACY";
[[AdformTrackingSDK sharedInstance] setUSPrivacy:usPrivacy];

第13条 自定义用户代理

Adform Tracking SDK使用网页视图用户代理作为识别用户和进行归因的参数之一。在某些情况下,如果您在您的自己的网页视图中投放某些跟踪点,例如,您正在开发一个混合应用程序,可能会出现问题。在这种情况下,由于您自己的网页视图的用户代理与我们的SDK使用的默认用户代理可能不匹配,归因可能无法正常工作。为了解决这个问题,Adform Tracking SDK提供了设置自定义用户代理的方法。

示例

Swift

AdformTrackingSDK.sharedInstance().setCustomUserAgent("YOUR CUSTOM USER AGENT")
Objective-C
[[AdformTrackingSDK sharedInstance] setCustomUserAgent:@"YOUR CUSTOM USER AGENT"];

14. 调试模式

您可以通过提供AFTDebugModeEnabled启动参数来启用调试模式。当调试模式启用时,SDK将在控制台打印额外的日志。在将Adform Tracking SDK集成到您的应用程序中时,这可能对开发过程很有用。

迁移指南

升级到1.0

在1.0版本的SDK中添加了功能,这要求在从旧版本更新时进行额外的更改

  • 如果您手动集成SDK,您需要将额外的SafariServices框架依赖项添加到您的项目中。
  • 此外,如果您手动集成SDK,您还需要将Google Protobuf库导入到您的项目中。有关如何操作的说明,请参阅此处
  • TrackPoint类已重命名为AFTrackPoint
  • AFTrackPointAdformAdvertisingSDK类的getParametersaddParameter:withValue:setParameters:方法已弃用。设置自定义变量到跟踪点的方法不再使用它们,而应使用setOrder:方法和AFOrder类。

升级到1.2.0

SDK不再需要框架依赖。

升级到1.7.0

在iOS 14中,我们需要请求用户授权使用广告识别符进行跟踪。为此,您需要在SDK集成中做以下更改

  1. true作为waitForPermissions参数传递给startTracking方法。

Swift

AdformTrackingSDK.sharedInstance().startTracking(withIds: yourTrackingId, waitForPermissions: true)
Objective-C
[[AdformTrackingSDK sharedInstance] startTracking:yourTrackingId waitForPermissions:true];
  1. 使用requestTrackingPermissions方法请求用户授权访问广告识别符。调用此方法将会显示系统的权限提示,因此您需要决定何时显示它最为合适。

Swift

if #available(iOS 14.0, *) {
    AdformTrackingSDK.sharedInstance().requestTrackingPermissions()
}
Objective-C
if (@available(iOS 14.0, *)) {
    [[AdformTrackingSDK sharedInstance] requestTrackingPermissions];
}
  1. NSUserTrackingUsageDescription 条目添加到您应用的 Info.plist 文件中。

发布说明

1.9.0

新功能

  • 支持iOS 16。

1.8.0

新功能

  • 支持 iOS 15。

1.7.4

新功能

  • 添加调试模式,可使用 AFTDebugModeEnabled 启动参数开启。当调试模式开启后,SDK 将将额外的调试日志打印到控制台。

1.7.3

错误修复

  • 修复 Swift Package Manager 依赖问题

1.7.2

新功能

  • 增加 Swift Package Manager 支持。

1.7.1

新功能

  • 将框架格式更改为 .xcframework。

通知

  • 本版本不支持 carthage。由于 carthage 目前不支持 .xcframework 类型,如需使用 carthage 支持请使用 1.7.0 版本。

1.7.0

新功能

  • 增加对iOS 14和AppTrackingTransparency的支持。

注意事项

  • 此版本不支持cocoapods。Cocoapods需要.xcframework类型以便在iOS 14中工作,因此请使用1.7.1版本。

1.6.0

新功能

  • 支持IAB CCPA合规框架。
  • 更新框架结构。

1.5.1

错误修复

  • 修复WebView多线程问题。

1.5.0

新功能

  • 将UIWebView的用法迁移到WKWebView。

1.4.0

新功能

  • 支持IAB透明同意框架2.0。

1.3.3

新特性

  • 支持Carthage的广告功能。

1.3.2

新特性

  • 增加了自定义user-agent的能力。

1.3.1

错误修复

  • 修复了影响部分用户的数据库初始化错误问题;

1.3.0

新特性

  • 添加了GDPR支持。更多详情请查阅GDPR部分。

1.2.0

新特性

  • 移除了对SFSafariViewController的使用。

1.1.5

新特性

  • 现在SDK使用最新的Protobuf库版本。

1.1.4

错误修复

  • 修复了从后台线程调用UIWebView时的问题;

1.1.3

错误修复

  • 修复了一个打字错误;

1.1.2

新功能

  • 支持 iOS 10;

1.1.1

新功能

  • 现在 SDK 使用 Protocol Buffers v3.0.0-beta-3.1 库;

1.1

新功能

  • 将购物车大小参数添加到订单;

1.0

新功能

  • 改进了应用程序安装归因;
  • 支持多个跟踪点;

错误修复

  • 小的错误修复;