Android SDK (v4)

Maven metadata URL

提示

本指南介绍如何安装和设置 Android SDK(v4)。如需了解以前的版本,请参阅 Android SDK(v2)

Android SDK 安装

您可以通过以下方法安装 Airbridge Android SDK。安装后,您可以通过 测试 Android SDK 来检查 SDK 是否正确安装。

Restricted SDK

提示

请根据需求选择 General SDK 或 Restricted SDK, 只能安装其中一个。

根据政策或环境,可能需要对收集 设备 ID(例如 GAID 和 IDFA)进行限制。如果安装 Restricted SDK,Airbridge SDK 不会收集设备 ID。

请按照以下说明安装 Restricted SDK:

SDK 初始化

建议在 Android Application class 中初始化 Airbridge Android SDK。

1. 请创建 Application class。

12345678
import android.app.Application

class AndroidApplication: Application() {

    override fun onCreate() {
        super.onCreate()
    }
}

2. 请在 AndroidManifest.xml 中设置在步骤 1. 创建的 Application。

AndroidManifest.xml
123
 <application
        android:name=".AndroidApplication"
        ...>

3. 请从 Application class 导入 Airbridge

1
import co.ab180.airbridge.Airbridge

4. 请在 AndroidManifest.xml 中注册的 Application class 文件中添加以下代码。

YOUR_APP_NAME 和 YOUR_APP_SDK_TOKEN 可在 Airbridge 面板的 [设置]>[Token] 获取。

12345678
override fun onCreate() {
    super.onCreate()
    // YOUR_APP_NAME: input your app name
    // YOUR_APP_SDK_TOKEN: input your app token
    val option = AirbridgeOptionBuilder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
        .build()
    Airbridge.initializeSDK(this, option)
}

注意

为确保正常工作,请在 Application class 的 onCreate 时调用 initializeSDK 函数。

5. 请设置以下权限:

Opt-in 设置

提示

此功能并非必需功能,请在设置前确认需求。

Opt-in 政策是指在用户同意之前不使用用户信息。

请将 setAutoStartTrackingEnabled 函数设置为 false 后,在可以收集事件时调用 startTracking 函数。从调用 startTracking 函数的时刻起,才开始收集事件。

1. 请在 Application class 进行初始化。请使用 setAutoStartTrackingEnabled 函数防止事件追踪在初始化后自动启用。

12345
// Default Auto Start Tracking Enabled = true
val option = AirbridgeOptionBuilder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setAutoStartTrackingEnabled(false)
    .build()
Airbridge.initializeSDK(this, option)

2. 请收集用户对个人信息收集和使用的响应。如果用户同意收集和使用个人信息,则开始事件追踪。

1234
// Set a variable like below
if (properties.isGDPRAccepted) {
    Airbridge.startTracking()
}

Opt-out 设置

提示

此功能并非必需功能,请在设置前确认需求。

Opt-out 政策是指在用户拒绝之前使用用户信息。

请将 setAutoStartTrackingEnabled 设置为 true 后,在无法收集事件时调用 stopTracking 函数。从调用 stopTracking 函数的时刻起,将不再收集事件。

123456
val option = AirbridgeOptionBuilder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setAutoStartTrackingEnabled(true)
    .build()
Airbridge.initializeSDK(this, option)
...
Airbridge.stopTracking()

SDK 签名(SDK Signature)设置

提示

此功能并非必需功能,请在设置前确认需求。

您可以通过 SDK 签名防止 SDK 伪造(SDK Spoofing)。

SDK 签名设置需要 SDK 签名凭证。SDK 签名凭证包括 Secret 和 Secret ID。您可以在 Airbridge 面板中获取 SDK 签名凭证。SDK 签名凭证的更多信息,请参阅 本指南

您可以通过在 SDK 初始化代码之前调用 setSDKSignature 函数来设置 SDK 签名。

1234
val option = AirbridgeOptionBuilder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setSDKSignature("YOUR_SDK_SIGNATURE_SECRET_ID", "YOUR_SDK_SIGNATURE_SECRET")
    .build()
Airbridge.initializeSDK(this, option)

SDK 设置需要以下信息:

  • YOUR_APP_NAME:Airbridge App 名称,可在 Airbridge 面板的 [设置]>[Token] 中查看。

  • YOUR_APP_SDK_TOKEN:Android SDK Token,可在 Airbridge 面板的 [设置]>[Token] 中查看。

  • YOUR_SDK_SIGNATURE_SECRET:Secret,可在 Airbridge 面板的 [规则管理]>[作弊验证规则]>[SDK 签名] 中查看。

  • YOUR_SDK_SIGNATURE_SECRET_ID:Secret ID,可在 Airbridge 面板的 [规则管理]>[作弊验证规则]>[SDK 签名] 中查看。

深度链接(Deep Link)

您可以通过设置深度链接,将点击包含追踪链接的广告的用户跳转至 App 的特定页面。此外,还可以基于追踪链接收集的信息,在 Airbridge 面板查看通过深度链接产生的绩效。

Airbridge 深度链接的工作原理

Airbridge 在创建追踪链接时,会根据环境自动选用最适合的 Airbridge 深度链接来实现用户跳转。用于实现用户跳转的链接被称为 URI Scheme 深度链接。

示例:

  • Airbridge 深度链接:https://YOUR_APP_NAME.airbridge.io/~~~

  • URI Scheme 深度链接:YOUR_SCHEME://product/12345

当 App 已安装时,用户点击追踪链接后,App 将通过 Airbridge 深度链接打开。随后,Airbridge SDK 会将该 Airbridge 深度链接转换为追踪链接中配置的 URI Scheme 深度链接,并将转换后的 URI Scheme 深度链接传递给 App。

当 App 未安装时,用户点击追踪链接后,Airbridge 深度链接信息将被保存。用户被发送至应用商店或网站安装并打开 App 后,Airbridge SDK 会将保存的 Airbridge 深度链接转换为 URI Scheme 深度链接,并将转换后的 URI Scheme 深度链接传递给 App。

深度链接设置

请按照以下步骤设置深度链接。请准备在 Airbridge 面板中注册的深度链接信息和用户跳转目的地的 App 内页面地址。

首先,请在 Airbridge 面板注册深度链接信息。

在 Airbridge 面板输入深度链接信息后,请进行设置启用以下功能:

  • 使用 Airbridge 深度链接启用 App

  • 使用 Airbridge 深度链接实现用户跳转

延迟深度链接(Deferred Deep Link)设置

当 App 未安装时,如果用户点击了设置了延迟深度链接的追踪链接,Airbridge 深度链接信息将被保存。Airbridge SDK 会通过以下方法来获取保存的深度链接:

Airbridge.handleDeferredDeeplink 函数在获取已保存的 Airbridge 深度链接后,会将 Airbridge 深度链接转换为 URI Scheme 深度链接,并将转换后的 URI Scheme 深度链接传递给 App。转换后的 URI Scheme 深度链接将用户发送至预设的目标页面。

1234
val isHandled = Airbridge.handleDeferredDeeplink {
    // when app is opened with deferred deeplink
    // show proper content using url
}

Airbridge.handleDeferredDeeplink 函数在 App 安装后首次被调用时会返回 true,并等待获取 Airbridge 深度链接,将其转换为 URI Scheme 深度链接后传递给 onSuccess。您可以使用该 URI Scheme 深度链接将用户发送至预设的目标页面。

如果没有保存的 Airbridge 深度链接,则会向 onSuccess 传递 null。如果 SDK 尚未初始化,或 Airbridge.handleDeferredDeeplink 函数并非首次被调用,则会返回 false

传递的 URI Scheme 深度链接通常是 YOUR_SCHEME://... 格式的 URL。如果使用 Meta Deferred App Link 等服务,则可能会传递其他格式的 URL。

应用内事件

Airbridge SDK 会根据设置从您的服务中收集特定用户行为,并将其作为应用内事件发送。

应用内事件发送

Hybrid App 设置

在 Hybrid App 中,无需更改网站代码,即可通过设置使 Android SDK 处理应用内网站上出现的与 Airbridge 相关的操作。

请使用 trackEvent 方法发送事件。为了使用 trackEvent 方法,请导入 Airbridge。

1
import co.ab180.airbridge.Airbridge

为了使用 Airbridge 预定义的 Category 名称和 Attribute,您需要调用 AirbridgeCategoryAirbridgeAttribute

12
import co.ab180.airbridge.common.AirbridgeCategory
import co.ab180.airbridge.common.AirbridgeAttribute

trackEvent 函数构成要素的类型及其必需性如下:

12345
fun trackEvent(
    category: String,
    semanticAttributes: Map<String, Any?>? = null,
    customAttributes: Map<String, Any?>? = null
)

名称

是否必需

类型

说明

category

必需

String

事件名称

semanticAttributes

可选

Map<String, Any?>

事件标准属性

customAttributes

可选

Map<String, Any?>

事件自定义属性

各构成要素的定义和可用数据类型请参阅下文:

SDK 提供的标准事件 Category 和 Semantic Attribute 如下:

各数据类型的示例代码如下:

12345678910111213
Airbridge.trackEvent(
    "event",
    mapOf(
        AirbridgeAttribute.VALUE to 10,
    ),
    mapOf(
        "string" to "string",
        "number" to 1000,
        "boolean" to true,
        "object" to mapOf("key" to "value"),
        "array" to listOf("value"),
    )
)

应用内事件其他设置

提示

如果未配置其他设置,则将应用默认设置。请查看是否需要其他设置后再继续。

您可以为发送的应用内事件添加所需的设置。

应用内事件示例代码

Airbridge 收集的主要应用内事件是标准事件和自定义事件。标准事件是 Airbridge 预定义的事件,请参阅以下的示例代码:

自定义事件是 Airbridge 客户自定义的事件,用于追踪无法通过标准事件满足的、针对 Airbridge 客户服务定制的用户行为。请参阅以下示例代码:

12345678910111213
Airbridge.trackEvent(
    "event",
    mapOf(
        AirbridgeAttribute.VALUE to 10,
    ),
    mapOf(
        "string" to "string",
        "number" to 1000,
        "boolean" to true,
        "object" to ["key": "value"],
        "array" to ["value"],
    )
)

用户信息

您可以将用户信息随事件一同发送至 Airbridge,以基于这些信息更精确地衡量跨 Web 和 App 的广告绩效。

用户 ID 设置

用户 ID 是您服务中使用的用户标识符。用户 ID 必须唯一,能够在 Web 和 App 中将同一用户识别为一个用户。

#{"width":"140px"}

函数

#{"width":"240px"}

说明

Airbridge.setUserID

输入用户 ID

Airbridge.clearUserID

删除用户 ID

Airbridge.setUserAlias

输入其他用户标识符,最多可输入 10 个

- 键:最多 128 个字符,必须符合正则表达式 ^[a-zA-Z_][a-zA-Z0-9_]*$

- 值:最多 1024 个字符

Airbridge.removeUserAlias

从输入的其他用户标识符中删除指定的标识符

Airbridge.clearUserAlias

删除所有输入的其他用户标识符

请参阅以下示例:

1234567
// ID
Airbridge.setUserID("testID")

// alias
Airbridge.setUserAlias("ADD_YOUR_KEY", "value")
Airbridge.removeUserAlias("DELETE_THIS_KEY")
Airbridge.clearUserAlias()

用户属性设置

注意

可能包含敏感的用户信息。发送前请咨询法律顾问。

您可以通过设置用户属性发送其他用户信息。

#{"width":"140px"}

函数

#{"width":"240px"}

说明

Airbridge.setUserEmail

输入用户邮箱。自动进行 SHA256 哈希处理

Airbridge.clearUserEmail

删除用户邮箱

Airbridge.setUserPhone

输入用户电话号码。自动进行 SHA256 哈希处理

Airbridge.clearUserPhone

删除用户电话号码

Airbridge.setUserAttribute

输入其他用户属性,最多可输入 100 个

- 键:最多 128 个字符, 必须符合正则表达式 ^[a-zA-Z_][a-zA-Z0-9_]*$

- 值:仅支持 String、Number、Boolean 类型,最多 1024 个字符

Airbridge.removeUserAttribute

从输入的其他用户属性中删除指定属性

Airbridge.clearUserAttributes

删除所有输入的其他用户属性

请参阅以下示例:

1234567891011121314
// Automatically hashed on client side using SHA256
// Can turn off hashing feature with special flag
Airbridge.setUserEmail("testID@ab180.co")
Airbridge.setUserPhone("821012341234")

// attributes
Airbridge.setUserAttribute("ADD_YOUR_KEY", 1)
Airbridge.setUserAttribute("ADD_YOUR_KEY", 1L)
Airbridge.setUserAttribute("ADD_YOUR_KEY", 1f)
Airbridge.setUserAttribute("ADD_YOUR_KEY", 1.0)
Airbridge.setUserAttribute("ADD_YOUR_KEY", "1")
Airbridge.setUserAttribute("ADD_YOUR_KEY", true)
Airbridge.removeUserAttribute("DELETE_THIS_KEY")
Airbridge.clearUserAttributes()

如果将 setHashUserInformationEnabled 函数设置为 false,则发送用户邮箱和电话号码时不会进行 SHA256 哈希处理。默认设置为 true

12345
// Default User Info Hash Enabled = true
val option = AirbridgeOptionBuilder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setHashUserInformationEnabled(false)
    .build()
Airbridge.initializeSDK(this, option)

用户信息重置

您可以使用 Airbridge.clearUser 函数重置用户信息。

1
Airbridge.clearUser()

高级设置

提示

此功能并非必需功能,请在设置前确认需求。

在 App 中使用追踪链接

根据链接的打开方式,在 App 内正确使用追踪链接可能会有一定困难。

通过使用 Airbridge.click 函数或 Airbridge.impression 函数,您可以使用户在 App 中跳转到同一 App 的另一个页面,无需通过外部浏览器。

注意

如果在 Airbridge Android SDK 2.18.0 及以上版本设置 “在 App 中使用追踪链接” 功能,每次在 App 内使用追踪链接时会记录深度链接页面浏览(Deeplink Pageview)作为 目标事件。如果深度链接页面浏览频繁随深度链接打开(Deeplink Open)发生,可能会影响深度链接打开的绩效。

深度链接页面浏览的默认归因窗口为 3 天。如果希望更改此归因窗口,请联系您的 Airbridge CSM。如果没有指定的 CSM,请通过 [帮助] 提交请求。

归因结果(Attribution Result)使用设置

注意

Airbridge SDK 收集归因结果需要时间,因此不建议将归因结果用于需要实时处理的功能。

您可以使用 AirbridgeOptionBuilder.setOnAttributionReceived 函数收取归因结果数据。

12345678
val option = AirbridgeOptionBuilder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
	.setOnAttributionReceived(object : OnAttributionResultReceiveListener {
		override fun onAttributionResultReceived(result: Map<String, String>) {
			// Process attribution data
		}
	})
	.build()
Airbridge.initializeSDK(application, option)

根据归因结果的存在与否,数据传递如下:

无论深度链接由何种服务生成,只要通过深度链接启用 App,Airbridge SDK 即会收集深度链接事件。您可以将 setTrackAirbridgeDeeplinkOnlyEnabled 函数设置为 true,则只收集 Airbridge 深度链接触发的事件。

12345
// Default Track Airbridge Link Only = false
val option = AirbridgeOptionBuilder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setTrackAirbridgeDeeplinkOnlyEnabled(true)
    .build()
Airbridge.initializeSDK(application, option)

会话中发生的生命周期事件收集设置

Airbridge SDK 会收集开启新会话的 Open 事件和 Foreground 事件,但在会话持续期间,这些事件不会被收集。

您可以通过将 setTrackInSessionLifeCycleEventEnabled 函数设置为 true,以在会话持续期间也收集 Open 事件和 Foreground 事件。

所有收集到的 Foreground 事件都将被记录为 Open 事件。

1234
val option = AirbridgeOptionBuilder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setTrackInSessionLifeCycleEventEnabled(true)
    .build()
Airbridge.initializeSDK(application, option)

Google 《数字市场法案》(DMA)遵守设置

为遵守《数字市场法案》(Digital Markets Act,简称 DMA),用户的同意信息(User Consent)必须共享给 Airbridge。请注意,如果用户位于欧洲经济区(European Economic Area,简称 EEA),则必须始终向 Airbridge 共享用户是否位于 EEA 以及用户的同意信息。DMA 的更多信息,请参阅 本指南

1. 请检查启用 App 的用户所在地。如果用户在 EEA(eea = 1)启用了 App,则检查是否已取得该用户的同意信息。如果已取得,请继续步骤 3。

提示

Airbridge 无法提供有关存储用户同意信息或实现同意弹窗的指导。请咨询法律顾问。

2. 如果尚未取得用户的同意信息,请通过同意弹窗等方法取得用户的同意信息。必须收集 adPersonalizationadUserData

3. 请初始化 Airbridge Android SDK,并在收集用户信息之前将用户同意信息共享给 Airbridge。

注意

  • 必须为 eeaadPersonalizationadUserData 使用相同的名称。

  • 请根据收集的信息正确输入 01

123456789101112131415161718192021
// MainApplication.kt
override fun onCreate() {
    super.onCreate()
    // Initialize Airbridge SDK
    val option = AirbridgeOptionBuilder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
        // Make Airbridge SDK explicitly start tracking
        .setAutoStartTrackingEnabled(false)
        .build()
    Airbridge.initializeSDK(application, option)

    // Set device alias into Airbridge SDK
    // Based on actual region
    Airbridge.setDeviceAlias("eea", "0" or "1")

    // Based on actual user consent
    Airbridge.setDeviceAlias("adPersonalization", "0" or "1")
    Airbridge.setDeviceAlias("adUserData", "0" or "1")
    
    // Explicitly start tracking
    Airbridge.startTracking()
}

注意

如果已设置 Meta Deferred App Link,则不得使用 Facebook SDK 的 fetchDeferredAppLink 函数。

您可以通过以下方法在 Meta ads 使用 延迟深度链接。Airbridge SDK 优先收集 Meta Deferred App Link,若无 Meta Deferred App Link,则收集 Airbridge 延迟深度链接。

1. 请将以下 repository 添加到 project/build.gradle 文件中。

123456789
allprojects {
    ...
    repositories {
        ...
        mavenCentral()
        ...
    }
    ...
}

2. 请在 app/build.gradle 文件的 dependencies 块中添加以下代码:

12345
dependencies {
    ...
    implementation 'com.facebook.android:facebook-android-sdk:latest.release'
    ...
}

3. 请将以下代码添加到 app/res/values/string.xml 文件中。

12345
...
<string name="facebook_app_id">FACEBOOK_APP_ID</string>
<string name="facebook_client_token">FACEBOOK_CLIENT_TOKEN</string>
...

4. 请在 AndroidManifest.xml 文件的 <application> 元素中添加以下 <meta-data>

12345678
...
<application android:label="@string/app_name" ...> 
    ...
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
    <meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
    ...
</application>
...

5. 您可以在 SDK 初始化阶段通过 setTrackMetaDeferredAppLinkEnabled 函数使用 Meta Deferred App Link 功能。请将 setTrackMetaDeferredAppLinkEnabled 设置为 true

12345
// Default meta Deferred App Link Enabled = false
val option = AirbridgeOptionBuilder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setTrackMetaDeferredAppLinkEnabled(true)
    .build()
Airbridge.initializeSDK(application, option)

在禁用状态初始化 Airbridge SDK

注意

如果 Airbridge SDK 在初始化后未立即启用,则可能无法收集安装(Install)、打开(Open)、深度链接(Deeplink)事件。

初始化 Airbridge SDK 时,所有功能将默认启用。您可以通过将 setSDKEnabled 函数设置为 false,在禁用所有功能的状态下初始化 Airbridge SDK。

1234
val option = AirbridgeOptionBuilder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setSdkEnabled(false)
    .build()
Airbridge.initializeSDK(application, option)

或者,可以通过以下方法检查 Airbridge SDK 的启用状态,以启用或禁用所有功能。

123456789
// Checks whether the SDK is currently enabled.
// @return Boolean
Airbridge.isSDKEnabled()

// Enables the SDK.
Airbridge.enableSDK()

// Disables the SDK.
Airbridge.disableSDK()

Meta Install Referrer(MIR)收集设置

以下是收集 MIR 所需的设置。请在 SDK 初始化阶段,将 Meta App ID 传递给 setMetaInstallReferrer 函数。

1234
val option = AirbridgeOptionBuilder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setMetaInstallReferrer("YOUR_FACEBOOK_APP_ID")
    .build()
Airbridge.initializeSDK(application, option)

完成设置后,需要将 Install Referrer Decryption Key(安装引荐来源解密密钥)注册到 Airbridge 面板,才能查看解密后的 MIR。如何注册 Install Referrer Decryption Key,请参阅 本指南

App 卸载追踪设置

Airbridge 会向过去 6 个月内执行过至少 1 次 App 事件的用户发送静默推送通知,以检查用户是否已卸载 App。此静默推送通知在每天 UTC 15:00 至 16:00 之间发送。App 卸载事件可在 Airbridge 报告和通过导出原始数据查看。

详细设置方法和说明,请参阅以下指南:

第三方解决方案集成

部分第三方解决方案的集成需要进行 SDK 设置。建议在通过 Airbridge SDK 收集数据之前,完成所需设置。

各第三方解决方案的集成设置,请参见下文:

SDK 日志查看

Airbridge SDK 提供的日志分为以下 5 个级别:Debug、Info、Warning、Error、Fault。Debug 为严重性最低的日志级别,Fault 为最严重的日志级别。

Airbridge SDK 默认提供 Warning、Error、Fault 级别的日志。通过将日志级别输入 setLogLevel 函数,可以查看从该日志级别到 Fault 级别的所有日志。

12345
// Default log level = Log.INFO
val option = AirbridgeOptionBuilder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
    .setLogLevel(AirbridgeLogLevel.DEBUG)
    .build()
Airbridge.initializeSDK(this, option)

Was this page helpful?

Have any questions or suggestions?