通过 Adjust iOS SDK,您可以在 iOS 应用中记录归因、事件以及更多信息。该指南展示了如何将 Adjust SDK 集成至应用。
1. 添加 SDK 至您的项目
要在您的 iOS 应用中使用 Adjust SDK,请先将 SDK 加入 Xcode 项目。
要使用 Swift package manager 添加 SDK:
- 选择 File —> Swift Packages —> Add Package Dependency
- 在出现的文本框中输入 SDK 的 GitHub 地址:
https://github.com/adjust/ios_sdk
- 在 Version 下拉菜单中选择要使用的 Adjust SDK 版本。请查看发布页面,找到最新版本。
其他安装方法
要使用 Cocoapods 添加 SDK,请在 Podfile
中指定要使用的版本:
// Get pod from repository
pod 'Adjust', '~> 4.38.4'
// Get source directly from GitHub
pod 'Adjust', :git => 'https://github.com/adjust/ios_sdk.git', :tag => 'v4.38.4'
如果您在应用中使用的是 web 视图,请添加下列行以加入 Adjust Web Bridge:
pod 'Adjust/WebBridge', '~> 4.38.4'
要使用 Carthage 添加 SDK,请将下列内容添加至您的 Cartfile
:
您也可以把 Adjust SDK 作为框架添加至您的项目中,以进行集成。在发布页面,您可以找到以下文档:
AdjustSdkStatic.framework.zip
: 针对操作系统为 iOS 7 或更旧版本的设备
AdjustSdkDynamic.framework.zip
: 针对操作系统为 iOS 8 或更新版本的设备
AdjustSdkTvDynamic.framework.zip
: tvOS 应用动态框架
AdjustSdkTvStatic.framework.zip
: tvOS 应用的静态框架
AdjustSdkImDynamic.framework.zip
: iMessage 应用动态框架
AdjustSdkWebBridgeDynamic.framework.zip
: web 视图动态框架
选择您要使用的框架,然后将其加入您的 Xcode
项目:
- 从发布页面下载文档。
- 将压缩文件解压至您的电脑。
- 将
.framework
文件夹复制到您的 Xcode
项目中。
2. 集成 Adjust SDK
将 Adjust SDK 添加到 Xcode
项目后,您需要将其集成至应用。
在您的项目文件中添加相关导入语句:
要导入 Adjust SDK,请将下列行添加至您的桥接标头文件:
#import <Adjust/Adjust.h>
如果您使用的是 Adjust Web Bridge,请将下列行添加至您的桥接标头文件:
要导入 Adjust SDK,请将下列行添加至您的 AppDelegate.h
文件:
#import <Adjust/Adjust.h>
如果您使用的是 Adjust Web Bridge,请将下列行添加至 AppDelegate.h
文件:
在您的项目文件中添加相关导入语句:
要导入 Adjust SDK,请将下列行添加至您的桥接标头文件:
#import <Adjust/Adjust.h>
如果您使用的是 Adjust Web Bridge,请将下列行添加至您的桥接标头文件:
#import <AdjustSdkWebBridge/AdjustBridge.h>
如果您是在 tvOS 应用中使用 Adjust SDK,请将下列行添加至桥接标头文件:
#import <AdjustSdkTv/Adjust.h>
如果您是在 iMessage 应用中使用 Adjust SDK,请将下列行添加至桥接标头文件:
#import <AdjustSdkIm/Adjust.h>
要导入 Adjust SDK,请将下列行添加至您的 AppDelegate.h
文件:
#import <AdjustSdk/Adjust.h>
如果您使用的是 Adjust Web Bridge,请将下列行添加至 AppDelegate.h
文件:
#import <AdjustSdkWebBridge/AdjustBridge.h>
如果您是在 tvOS 应用中使用 Adjust SDK,请将下列行添加至 AppDelegate.h
文件:
#import <AdjustSdkTv/Adjust.h>
如果您是在 iMessage 应用中使用 Adjust SDK,请将下列行添加至 AppDelegate.h
文件:
#import <AdjustSdkIm/Adjust.h>
在您的项目文件中添加相关导入语句:
要导入 Adjust SDK,请将下列行添加至您的桥接标头文件:
#import <Adjust/Adjust.h>
如果您使用的是 Adjust Web Bridge,请将下列行添加至您的桥接标头文件:
#import <AdjustSdkWebBridge/AdjustBridge.h>
如果您是在 tvOS 应用中使用 Adjust SDK,请将下列行添加至桥接标头文件:
#import <AdjustSdkTv/Adjust.h>
如果您是在 iMessage 应用中使用 Adjust SDK,请将下列行添加至桥接标头文件:
#import <AdjustSdkIm/Adjust.h>
要导入 Adjust SDK,请将下列行添加至您的 AppDelegate.h
文件:
#import <AdjustSdk/Adjust.h>
如果您使用的是 Adjust Web Bridge,请将下列行添加至 AppDelegate.h
文件:
#import <AdjustSdkWebBridge/AdjustBridge.h>
如果您是在 tvOS 应用中使用 Adjust SDK,请将下列行添加至 AppDelegate.h
文件:
#import <AdjustSdkTv/Adjust.h>
如果您是在 iMessage 应用中使用 Adjust SDK,请将下列行添加至 AppDelegate.h
文件:
#import <AdjustSdkIm/Adjust.h>
3. 添加 iOS 框架
Adjust SDK 依赖各种框架读取具体设备信息。要启用设备信息读取,请添加对应框架,并将其标记为 可选 。
框架 | 描述 | 注意事项 |
---|
AdSupport.framework | 允许读取设备 IDFA。对于操作系统为 iOS 14 及更早版本的设备,添加该框架也会允许读取 LAT 信息。 | 如果您的应用属于 “儿童” 类别,那么请勿添加该框架。 |
AdServices.framework | 处理 ASA 归因。 | |
StoreKit.framework | 允许访问 SKAdNetwork 框架。 | 若要允许 Adjust 处理 iOS 14 或更新操作版本设备上与 SKAdNetwork 的通讯,那么必须添加该框架。 |
AppTrackingTransparency.framework | 若要允许 Adjust SDK 包装用户 ATT 许可对话,并读取 iOS 14 或更新操作版本设备的许可响应,那么必须添加该框架。 | 如果您的应用属于 “儿童” 类别,那么请勿添加该框架 |
WebKit.framework | 允许在您的应用中使用 web 视图。 | 只有在应用使用 web 视图时才有必要 |
3. 初始化 Adjust SDK
要初始化 Adjust SDK,您需要创建一个 config 对象。该对象包含控制 Adjust SDK 行为的配置选项。发送以下参数能够保证最少的设置:
appToken
: 您的应用识别码。
environment
: SDK 运行的环境。将其设为ADJEnvironmentSandbox
。
要使用此 config 对象初始化 Adjust SDK:
- 在您应用委托的
didFinishLaunching
或 didFinishLaunchingWithOptions
方法中声明 config 对象。
- 将 config 对象的
logLevel
属性设置为 ADJLogLevelVerbose
(详细)。您必须启用 verbose 日志记录,才能调取设备信息。
- 将 config 对象作为参数发送至
appDidLaunch
方法。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let yourAppToken = "{YourAppToken}"
let environment = ADJEnvironmentSandbox as? String
let myAdjustConfig = ADJConfig(
environment: environment)
myAdjustConfig?.logLevel = ADJLogLevel.verbose
Adjust.appDidLaunch(myAdjustConfig)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSString *yourAppToken = @"{YourAppToken}";
NSString *environment = ADJEnvironmentSandbox;
*myAdjustConfig = [ADJConfig configWithAppToken:yourAppToken
environment:environment];
[myAdjustConfig setLogLevel:ADJLogLevelVerbose];
[Adjust appDidLaunch:myAdjustConfig];
设置您的 iMessage 应用
如果您的应用面向 iMessage,那么您还需要进行下列额外的配置:
- 如果您是从源代码添加 Adjust SDK,请确保您已在 iMessage 项目中添加了预处理宏
ADJUST_IM=1
。
- 如果您将 SDK 作为框架添加,请务必在 Build Phases 项目设置中添加 New Copy Files Phase 。将
AdjustSdkIm.framework
复制到 Frameworks 文件夹。
记录会话
Adjust SDK 并未订阅 iMessage 应用中的 iOS 系统通知。要在应用进入或离开前台时通知 Adjust SDK,请调用 trackSubsessionStart
和 trackSubsessionEnd
方法。
在 didBecomeActiveWithConversation:
方法中添加对 trackSubsessionStart
的调用:
func didBecomeActive(with conversation: MSConversation) {
// Called when the extension is about to move from the inactive to active state.
// This will happen when the extension is about to present UI.
// Use this method to configure the extension and restore previously stored state.
Adjust.trackSubsessionStart()
-(void)didBecomeActiveWithConversation:(MSConversation *)conversation {
// Called when the extension is about to move from the inactive to active state.
// This will happen when the extension is about to present UI.
// Use this method to configure the extension and restore previously stored state.
[Adjust trackSubsessionStart];
在 willResignActiveWithConversation:
方法中添加对 trackSubsessionEnd
的调用:
func willResignActive(with conversation: MSConversation) {
// Called when the extension is about to move from the active to inactive state.
// This will happen when the user dismisses the extension, changes to a different
// conversation or quits Messages.
// Use this method to release shared resources, save user data, invalidate timers,
// and store enough state information to restore your extension to its current state
// in case it is terminated later.
Adjust.trackSubsessionEnd()
-(void)willResignActiveWithConversation:(MSConversation *)conversation {
// Called when the extension is about to move from the active to inactive state.
// This will happen when the user dismisses the extension, changes to a different
// conversation or quits Messages.
// Use this method to release shared resources, save user data, invalidate timers,
// and store enough state information to restore your extension to its current state
// in case it is terminated later.
[Adjust trackSubsessionEnd];
设置 Adjust Web Bridge
如果您的应用使用的是 web 视图,请务必设置 Adjust Web Bridge,以记录 web 视图中的信息。
将 AdjustBridge
集成到您的应用中
在项目导航中:
- 打开您的视图控制器 (View Controller) 源文件。
- 在文件顶端添加
import
导入语句。
- 在 Web View Delegate 的
viewDidLoad
或 viewWillAppear
方法中,添加下列 AdjustBridge
调用:
func viewWillAppear(_ animated: Bool) {
let webView = WKWebView(frame: view.bounds)
// add var adjustBridge: AdjustBridge? on your interface
adjustBridge.loadWKWebViewBridge(webView)
// optionally you can add a web view delegate so that you can also capture its events
// adjustBridge.loadWKWebViewBridge(webView, wkWebViewDelegate: self as? WKNavigationDelegate?);
// or #import <AdjustSdkWebBridge/AdjustBridge.h>
- (void)viewWillAppear:(BOOL)animated {
WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.bounds];
// add @property (nonatomic, strong) AdjustBridge *adjustBridge; on your interface
[self.adjustBridge loadWKWebViewBridge:webView];
// optionally you can add a web view delegate so that you can also capture its events
// [self.adjustBridge loadWKWebViewBridge:webView wkWebViewDelegate:(id<wknavigationdelegate>)self];
您也可以使用其中包含的 WebViewJavascriptBridge
。为此,请为 AdjustBridge
实例设置 bridgeRegister
属性。请查看关于库的文档,了解使用方法。
将 AdjustBridge
集成进您的 web 视图
要在 web 视图上使用 Javascript bridge,您就需要配置 bridge。请添加下列 Javascript 代码,初始化 Adjust iOS web bridge:
function setupWebViewJavascriptBridge(callback) {
if (window.WebViewJavascriptBridge) {
return callback(WebViewJavascriptBridge);
if (window.WVJBCallbacks) {
return window.WVJBCallbacks.push(callback);
window.WVJBCallbacks = [callback];
var WVJBIframe = document.createElement("iframe");
WVJBIframe.style.display = "none";
WVJBIframe.src = "https://**bridge_loaded**";
document.documentElement.appendChild(WVJBIframe);
document.documentElement.removeChild(WVJBIframe);
setupWebViewJavascriptBridge(function (bridge) {
var yourAppToken = yourAppToken;
var environment = AdjustConfig.EnvironmentSandbox;
var adjustConfig = new AdjustConfig(yourAppToken, environment);
Adjust.appDidLaunch(adjustConfig);
添加 config 对象和初始化逻辑后,您可以配置 Adjust SDK 来记录应用不同部分的信息。查看 SDK 配置和记录功能指南,设置您想要记录的信息。
6. 测试 Adjust SDK
完成配置,能通过 Adjust SDK 记录应用相关信息后,您就可以进行测试了。Adjust 为您提供测试控制台和设备 ID,方便您测试应用。
请按照测试指南中的说明操作,确保您的应用能将预期值发送给 Adjust。
7. 针对生产环境构建应用
完成测试后,您就可以针对生产环境构建应用了。为此,请更新您的 config 对象。
更新以下值:
environment
: 将其设为ADJEnvironmentProduction
。
logLevel
: 选择日志级别,或在 config 对象中传送 allowSuppressLogLevel
参数,以完全禁用日志记录。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let yourAppToken = "{YourAppToken}"
let environment = ADJEnvironmentProduction as? String
let myAdjustConfig = ADJConfig(
environment: environment,
allowSuppressLogLevel: true)
myAdjustConfig?.logLevel = ADJLogLevelSuppress
Adjust.appDidLaunch(myAdjustConfig)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSString *yourAppToken = @"{YourAppToken}";
NSString *environment = ADJEnvironmentProduction;
*myAdjustConfig = [ADJConfig configWithAppToken:yourAppToken
allowSuppressLogLevel:YES];
[myAdjustConfig setLogLevel:ADJLogLevelSuppress];
[Adjust appDidLaunch:myAdjustConfig];
您可以使用 Xcode
版本标记 (flag),根据您创建的版本 (调试或生产版本) 情况动态更新 config。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let yourAppToken = "{YourAppToken}"
let environment = ADJEnvironmentSandbox as? String
let myAdjustConfig = ADJConfig(
environment: environment)
myAdjustConfig?.logLevel = ADJLogLevel.verbose
let environment = ADJEnvironmentProduction as? String
let myAdjustConfig = ADJConfig(
environment: environment,
allowSuppressLogLevel: true)
myAdjustConfig?.logLevel = ADJLogLevel.suppress
Adjust.appDidLaunch(myAdjustConfig)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSString *yourAppToken = @"{YourAppToken}";
NSString *environment = ADJEnvironmentSandbox;
*myAdjustConfig = [ADJConfig configWithAppToken:yourAppToken
environment:environment];
[myAdjustConfig setLogLevel:ADJLogLevelVerbose];
NSString *environment = ADJEnvironmentProduction;
*myAdjustConfig = [ADJConfig configWithAppToken:yourAppToken
allowSuppressLogLevel:YES];
[myAdjustConfig setLogLevel:ADJLogLevelSuppress];
[Adjust appDidLaunch:myAdjustConfig];