入门
当您运行移动广告活动时,新增应用安装量通常是一个主要目标。我们的易于安装的跟踪 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 拖拽到您的项目中。
- 当询问时,选择 将项目添加到目标文件夹。
-
然后在项目导航器中选中 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
。AFTrackPoint
和AdformAdvertisingSDK
类的getParameters
、addParameter:withValue:
和setParameters:
方法已弃用。设置自定义变量到跟踪点的方法不再使用它们,而应使用setOrder:
方法和AFOrder
类。
升级到1.2.0
SDK不再需要
升级到1.7.0
在iOS 14中,我们需要请求用户授权使用广告识别符进行跟踪。为此,您需要在SDK集成中做以下更改
- 将
true
作为waitForPermissions
参数传递给startTracking
方法。
Swift
AdformTrackingSDK.sharedInstance().startTracking(withIds: yourTrackingId, waitForPermissions: true)
Objective-C
[[AdformTrackingSDK sharedInstance] startTracking:yourTrackingId waitForPermissions:true];
- 使用
requestTrackingPermissions
方法请求用户授权访问广告识别符。调用此方法将会显示系统的权限提示,因此您需要决定何时显示它最为合适。
Swift
if #available(iOS 14.0, *) {
AdformTrackingSDK.sharedInstance().requestTrackingPermissions()
}
Objective-C
if (@available(iOS 14.0, *)) {
[[AdformTrackingSDK sharedInstance] requestTrackingPermissions];
}
- 将
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
新功能
- 改进了应用程序安装归因;
- 支持多个跟踪点;
错误修复
- 小的错误修复;