参考这篇分步指南,在 iOS 端 Adobe Experience 应用中集成和配置 Adjust Extension,并通过该扩展无缝集成 Adjust 和 Adobe Experience SDK,捕捉并发送归因数据和应用内事件信息。
通过该扩展,您可以向 Adjust 发送安装、会话、自定义应用内事件和其他类型的数据。参考本指南,设置和配置 Adjust Extension,并验证您是否能向 Adjust 正常发送安装信息。
设置您的项目
按照以下步骤操作,设置您的项目,支持适用于 Adobe Experience SDK 的 Adjust Extension。
安装 Adjust Extension
要开始使用针对 Adobe Experience SDK 的 Adjust Extension,您首先要以依赖形式,将 Extension 添加至项目中。
如果您使用的是 Swift Package Manager,请输入以下 URL:
https://github.com/adjust/ios_adobe_extension.git
如果您使用的是 CocoaPods,请添加下行到您的 Podfile
:
pod 'AdjustAdobeExtension'
添加 iOS 框架
Adjust Extension 需要额外的 iOS 框架才能访问设备信息。请添加以下框架,并将它们标记为 可选 ,以启用这些功能。
AdSupport.framework
-
用于访问广告主 ID (IDFA) 和限制广告跟踪 (LAT) 信息。LAT 仅适用于 iOS 14 或更早版本的设备。
AppTrackingTransparency.framework
-
用于启用 Adjust Extension,以包装用户 AppTrackingTransparency (ATT) 许可对话,并访问用户的 ATT 许可数据。ATT 仅适用于 iOS 14 或更高版本的设备。
AdServices.framework
-
用于启用 Adjust Extension,以在 iOS 14.3 或更高版本的设备上自动处理 Apple Search Ads (ASA) 推广活动的归因。使用 Apple Ads Attribution API 时必须采用该框架。
StoreKit.framework
-
用于在 iOS 14 或更高版本的设备上启用 Adjust Extension,来与 SKAdNetwork
框架通讯。
集成指南
完成项目设置后,您就可以按照下列指南,集成 Adjust SDK 了:
- 将 Adjust Extension 添加至 Adobe Experience SDK。
- 请将日志级别设置为 详细 ,以便从 Extension 中调取尽可能多的信息。
- 在 sandbox 模式下测试 Extension,确保数据能正常发送至 Adjust。
- 允许应用打开深度链接。
- 注册 Adobe Experience SDK。
为此,您需要创建下列文件:
AppDelegate.swift
: 在这里,您可以配置 Adjust Extension 。
ViewController.swift
: 在这里,您可以使用 Adjust Extension 创建函数。
AppDelegate.m
: App Delegate 的方法文件。在这里,您可以配置 Adjust Extension 。
AppDelegate.h
: App Delegate 的标头文件。
ViewController.m
: View Controller 的方法文件。在这里,您可以使用 Adjust Extension 创建函数。
ViewController.h
: View Controller 的标头文件。
出于本指南的说明目的,请使用以下标头文件:
@interface AppDelegate : UIResponder <uiapplicationdelegate>
@interface ViewController : UIViewController
导入类
首先,您需要将一些类导入到应用程序文件中。将下列类导入您的 App Delegate:
AEPCore
-
包含 Event Hub 的实装。
AEPServices
-
提供平台安装支持,包括网络、磁盘访问权限和数据库管理等。
AdjustAdobeExtension
-
针对 Adobe Experience SDK 的 Adjust Extension。
import AdjustAdobeExtension
#import <AdjustAdobeExtension/AdjustAdobeExtension.h>
下一步,将下列类导入您的 View Controller:
AEPCore
-
包含 Event Hub 的实装。
AdjustAdobeExtension
-
针对 Adobe Experience SDK 的 Adjust Extension。
import AdjustAdobeExtension
#import "ViewController.h"
#import <AdjustAdobeExtension/AdjustAdobeExtension.h>
创建 App Delegate
为 Adobe Experience SDK 注册 Adjust iOS Extension 时,您需要创建一个 App Delegate。如果您尚未创建 App Delegate,请按照下列步骤操作:
- 创建新的
AppDelegate
安装。
import AdjustAdobeExtension
class AppDelegate: UIResponder, UIApplicationDelegate {}
#import <AdjustAdobeExtension/AdjustAdobeExtension.h>
@implementation AppDelegate
- 在您的
AppDelegate
安装中,创建一个名为 application
的新函数。该函数会返回布尔值,并使用下列参数:
application
: UIApplication
-
单例应用对象。
launchOptions
: [UIApplication.LaunchOptionsKey : Any]
-
说明应用启动原因的字典。
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {}
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {}
创建 App Delegate 后,请按照以下步骤设置针对 Adobe Experience SDK 的 Adjust iOS Extension:
- 在
application
函数中,使用以下参数调用 AEPMobileCore
类的 setLogLevel
方法,以设置日志级别:
logLevel
-
要启用的日志级别。
Trace
: 启用完整日志。
Debug
: 禁用详细日志。
Warning
: 仅记录错误和警告。
Error
: 仅记录错误。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
MobileCore.setLogLevel(LogLevel.trace)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[AEPMobileCore setLogLevel: AEPLogLevelTrace];
- 创建一个名为
appState
的新 UIApplicationState
变量,用来与 Adobe Experience SDK 通讯,说明应用状态。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
MobileCore.setLogLevel(LogLevel.trace)
let appState = application.applicationState
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[AEPMobileCore setLogLevel: AEPLogLevelTrace];
const UIApplicationState appState = application.applicationState;
- 使用以下参数创建名为
config
的新 AdjustAdobeExtensionConfig
实例:
environment
: NSString
-
设备运行的环境。
- 测试时发送
ADJEnvironmentSandbox
。
- 在生产环境中运行应用时发送
ADJEnvironmentProduction
。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
MobileCore.setLogLevel(LogLevel.trace)
let appState = application.applicationState
if let config = AdjustAdobeExtensionConfig(environment: ADJEnvironmentSandbox) {}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[AEPMobileCore setLogLevel: AEPLogLevelTrace];
const UIApplicationState appState = application.applicationState;
AdjustAdobeExtensionConfig *config = [AdjustAdobeExtensionConfig configWithEnvironment:ADJEnvironmentSandbox];
- 以配置实例作为参数,调用
AdjustAdobeExtension
类的 setConfiguration
方法,来注册配置。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
MobileCore.setLogLevel(LogLevel.trace)
let appState = application.applicationState
if let config = AdjustAdobeExtensionConfig(environment: ADJEnvironmentSandbox) {
AdjustAdobeExtension.setConfiguration(config)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[AEPMobileCore setLogLevel: AEPLogLevelTrace];
const UIApplicationState appState = application.applicationState;
AdjustAdobeExtensionConfig *config = [AdjustAdobeExtensionConfig configWithEnvironment:ADJEnvironmentSandbox];
[AdjustAdobeExtension setConfiguration:config];
注册 Adjust Extension
配置好 Adjust Extension 后,您需要将其注册到 Adobe Experience SDK。为此请进行下列操作:
- 在
application
函数中,使用以下参数调用 AEPMobileCore 类的 registerExtensions
方法:
extensions
: NSArray<Class*>* _Nonnull
-
扩展的列表。
completion
: (^ _Nullable)(void))
-
completion handler。
出于本指南说明目的,请为 extensions
传递 AdjustAdobeExtension
类。您可在下一步中设置 completion handler。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
MobileCore.setLogLevel(LogLevel.trace)
let appState = application.applicationState
if let config = AdjustAdobeExtensionConfig(environment: ADJEnvironmentSandbox) {
AdjustAdobeExtension.setConfiguration(config)
MobileCore.registerExtensions([AdjustAdobeExtension.self]) {}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[AEPMobileCore setLogLevel: AEPLogLevelTrace];
const UIApplicationState appState = application.applicationState;
AdjustAdobeExtensionConfig *config = [AdjustAdobeExtensionConfig configWithEnvironment:ADJEnvironmentSandbox];
[AdjustAdobeExtension setConfiguration:config];
[AEPMobileCore registerExtensions:@[AdjustAdobeExtension.class]
- 在 completion handler 中使用您的 Adobe App ID 调用
AEPMobileCore
类的 configureWithAppId
方法。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
MobileCore.setLogLevel(LogLevel.trace)
let appState = application.applicationState
if let config = AdjustAdobeExtensionConfig(environment: ADJEnvironmentSandbox) {
AdjustAdobeExtension.setConfiguration(config)
MobileCore.registerExtensions([AdjustAdobeExtension.self]) {
MobileCore.configureWith(appId: "{your_adobe_app_id}")
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[AEPMobileCore setLogLevel: AEPLogLevelTrace];
const UIApplicationState appState = application.applicationState;
AdjustAdobeExtensionConfig *config = [AdjustAdobeExtensionConfig configWithEnvironment:ADJEnvironmentSandbox];
[AdjustAdobeExtension setConfiguration:config];
[AEPMobileCore registerExtensions:@[AdjustAdobeExtension.class]
[AEPMobileCore configureWithAppId: @"{your_adobe_app_id}"];
- 在您的 completion handler 中添加一个
if
块,这样,如果应用不在后台运行,就能调用 AEPMobileCore
的 lifecycleStart
方法。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
MobileCore.setLogLevel(LogLevel.trace)
let appState = application.applicationState
if let config = AdjustAdobeExtensionConfig(environment: ADJEnvironmentSandbox) {
AdjustAdobeExtension.setConfiguration(config)
MobileCore.registerExtensions([AdjustAdobeExtension.self]) {
MobileCore.configureWith(appId: "{your_adobe_app_id}")
if appState != .background {
MobileCore.lifecycleStart(additionalContextData: nil)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[AEPMobileCore setLogLevel: AEPLogLevelTrace];
const UIApplicationState appState = application.applicationState;
AdjustAdobeExtensionConfig *config = [AdjustAdobeExtensionConfig configWithEnvironment:ADJEnvironmentSandbox];
[AdjustAdobeExtension setConfiguration:config];
[AEPMobileCore registerExtensions:@[AdjustAdobeExtension.class]
[AEPMobileCore configureWithAppId: @"{your_adobe_app_id}"];
if (appState != UIApplicationStateBackground) {
[AEPMobileCore lifecycleStart:nil];
- 最后,在
application
函数的顶层返回一个 true
值。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
MobileCore.setLogLevel(LogLevel.trace)
let appState = application.applicationState
if let config = AdjustAdobeExtensionConfig(environment: ADJEnvironmentSandbox) {
AdjustAdobeExtension.setConfiguration(config)
MobileCore.registerExtensions([AdjustAdobeExtension.self]) {
MobileCore.configureWith(appId: "{your_adobe_app_id}")
if appState != .background {
MobileCore.lifecycleStart(additionalContextData: nil)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[AEPMobileCore setLogLevel: AEPLogLevelTrace];
const UIApplicationState appState = application.applicationState;
AdjustAdobeExtensionConfig *config = [AdjustAdobeExtensionConfig configWithEnvironment:ADJEnvironmentSandbox];
[AdjustAdobeExtension setConfiguration:config];
[AEPMobileCore registerExtensions:@[AdjustAdobeExtension.class]
[AEPMobileCore configureWithAppId: @"{your_adobe_app_id}"];
if (appState != UIApplicationStateBackground) {
[AEPMobileCore lifecycleStart:nil];
设置深度链接处理
要为深度链接打开配置针对 Adobe Experience SDK 的 Adjust iOS Extension,请按照下列步骤操作:
- 在您的
AppDelegate
安装中,创建一个名为 application
的新布尔函数,来处理深度链接的打开。该函数会使用下列参数:
app
: UIApplication
-
单例应用对象。
url
: NSURL
-
要在应用中打开的 URL 资源。
options
: [UIApplicationOpenURLOptionsKey : id]
-
用于处理 URL 的选项字典,其中包含指定 URL 相关选项的键。
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {}
- 在此函数内调用
Adjust
类的 processDeeplink
方法,来打开深度链接并返回 true 值。
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
if let deeplink = ADJDeeplink(deeplink: url) {
Adjust.processDeeplink(deeplink)
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
[Adjust processDeeplink: [[ADJDeeplink alloc] initWithDeeplink:url]];
- 接下来,创建另一个名为
application
的布尔函数,来处理用户活动的恢复。该函数会使用下列参数:
application
: UIApplication
-
单例应用对象。
userActivity
: NSUserActivity
-
代表要继续的 activity 的用户活动对象。
restorationHandler
: void (^)(NSArray<id<uiuseractivityrestoring>> * _Nullable)
-
处理程序块,以便在有需要时恢复应用状态。
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {}
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<uiuseractivityrestoring>> * _Nullable))restorationHandler {}
- 在此函数中添加检查,确定应用是否通过链接打开;如果是,则调用
processDeeplink
。
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
if let incomingUrl = userActivity.webpageUrl {
if let deeplink = ADJDeeplink(deeplink: incomingUrl) {
Adjust.processDeeplink(deeplink)
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<uiuseractivityrestoring>> * _Nullable))restorationHandler {
if ([[userActivity activityType] isEqualToString:NSUserActivityTypeBrowsingWeb]) {
[Adjust proceessDeeplink:[[ADJDeeplink alloc] initWithDeeplink:[userActivity webpageURL]]];
如果您使用的是品牌化短链接,那么可以选择使用 Adjust.processAndResolveDeeplink
方法解析短链接,并将其返回至回传函数。
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
if let incomingUrl = userActivity.webpageUrl {
if let deeplink = ADJDeeplink(deeplink: incomingUrl) {
Adjust.processAndResolveDeeplink(deeplink) { resolveDeeplink in
print("[\(resolveDeeplink)]")
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<uiuseractivityrestoring>> * _Nullable))restorationHandler {
if ([[userActivity activityType] isEqualToString:NSUserActivityTypeBrowsingWeb]) {
ADJDeeplink *deeplink = [[ADJDeeplink alloc] initWithDeeplink:[userActivity webpageURL]];
[Adjust processAndResolveDeeplink:deeplink
withCompletionHandler:^(NSString * _Nullable resolvedLink) {
NSLog(@"[%@]", resolvedLink);
设置 View Controller
下一步,您需要设置 View Controller,以备稍后设置 Adjust 功能。在本指南中,我们仅设置 viewDidLoad
函数,用来处理应用程序的启动。
- 在您的 View Controller 文件中创建一个新的
ViewController
类实装。
class ViewController: UIViewController {}
@implementation ViewController
- 在
ViewController
类中创建一个 void 函数,并通过该函数调用 super.viewDidLoad
,来初始化您的视图。
class ViewController: UIViewController {
override func viewDidLoad() {
@implementation ViewController
完成上述步骤后,请创建并运行应用。启动应用后,您应当在 Xcode 日志中看到 Install tracked
信息。