Airbridge
Airbridge offers people-based attribution and incrementality measurement to measure and analyze true marketing effectiveness across devices, identities, and platforms.
The Braze and Airbridge integration lets you pass all organic and non-organic install attribution data to Braze to build personalized marketing campaigns and understand exactly where users were acquired.
Prerequisites
Requirement | Description |
---|---|
Airbridge account | An Airbridge account is required to take advantage of this partnership. |
iOS or Android app | This integration supports iOS and Android apps. Depending on your platform, code snippets may be required in your application. |
Airbridge SDK | In addition to the required Braze SDK, you must install the Airbridge Android or iOS SDK. |
Integration
Integrating Airbridge to Braze will be made via SDK-to-SDK. Attribution data collected by the Airbridge SDK will be transmitted to Braze via the Braze SDK. Include the following code snippet into your Android or iOS application.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
AirbridgeConfig config = new AirbridgeConfig.Builder(BuildConfig.AIRBRIDGE_APP_NAME, BuildConfig.AIRBRIDGE_APP_TOKEN)
.setOnAttributionResultReceiveListener(new OnAttributionResultReceiveListener() {
@Override
public void onAttributionResultReceived(Map<String, String> result) {
AttributionData data = new AttributionData(
result.get("attributedChannel"),
result.get("attributedCampaign"),
result.get("attributedAdGroup"),
result.get("attributedAdCreative")
);
Braze.getInstance(applicationContext).getCurrentUser().setAttributionData(data);
// NOTE: Data point will be consumed
Braze.getInstance(applicationContext).getCurrentUser().setCustomUserAttribute("airbridge_ad_content", result.get("attributedContent"));
Braze.getInstance(applicationContext).getCurrentUser().setCustomUserAttribute("airbridge_term", result.get("attributedTerm"));
Braze.getInstance(applicationContext).getCurrentUser().setCustomUserAttribute("airbridge_sub_id", result.get("attributedSubPublisher"));
Braze.getInstance(applicationContext).getCurrentUser().setCustomUserAttribute("airbridge_sub_id_1", result.get("attributedSubSubPublisher1"));
Braze.getInstance(applicationContext).getCurrentUser().setCustomUserAttribute("airbridge_sub_id_2", result.get("attributedSubSubPublisher2"));
Braze.getInstance(applicationContext).getCurrentUser().setCustomUserAttribute("airbridge_sub_id_3", result.get("attributedSubSubPublisher3"));
}
})
.build();
Airbridge.init(this, config);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
val config = AirbridgeConfig.Builder(BuildConfig.AIRBRIDGE_APP_NAME, BuildConfig.AIRBRIDGE_APP_TOKEN)
.setOnAttributionResultReceiveListener(object : OnAttributionResultReceiveListener {
override fun onAttributionResultReceived(result: Map<String, String>) {
val data = AttributionData(
result["attributedChannel"],
result["attributedCampaign"],
result["attributedAdGroup"],
result["attributedAdCreative"]
)
Braze.getInstance(applicationContext).currentUser?.setAttributionData(data)
// NOTE: Data point will be consumed
Braze.getInstance(applicationContext).currentUser?.setCustomUserAttribute("airbridge_ad_content", result["attributedContent"])
Braze.getInstance(applicationContext).currentUser?.setCustomUserAttribute("airbridge_term", result["attributedTerm"])
Braze.getInstance(applicationContext).currentUser?.setCustomUserAttribute("airbridge_sub_id", result["attributedSubPublisher"])
Braze.getInstance(applicationContext).currentUser?.setCustomUserAttribute("airbridge_sub_id_1", result["attributedSubSubPublisher1"])
Braze.getInstance(applicationContext).currentUser?.setCustomUserAttribute("airbridge_sub_id_2", result["attributedSubSubPublisher2"])
Braze.getInstance(applicationContext).currentUser?.setCustomUserAttribute("airbridge_sub_id_3", result["attributedSubSubPublisher3"])
}
})
.build()
Airbridge.init(this, config)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
AirBridge.setting()?.attributionCallback = { attribution in
let data = ABKAttributionData(network: attribution["attributedChannel"],
campaign: attribution["attributedCampaign"],
adGroup: attribution["attributedAdGroup"],
creative: attribution["attributedAdCreative"])
// NOTE: Data point will be consumed
Appboy.sharedInstance()?.user.attributionData = data
[
"attributedContent": "airbridge_content",
"attributedTerm": "airbridge_term",
"attributedSubPublisher": "airbridge_sub_id",
"attributedSubSubPublisher1": "airbridge_sub_id_1",
"attributedSubSubPublisher2": "airbridge_sub_id_2",
"attributedSubSubPublisher3": "airbridge_sub_id_3",
].forEach { (key, brazeKey) in
guard let value = attribution[key] else {
return
}
Appboy.sharedInstance()?.user.setCustomAttributeWithKey(brazeKey, andStringValue: value)
}
Appboy.sharedInstance()?.flushDataAndProcessRequestQueue()
}
AirBridge.getInstance("YOUR_APP_TOKEN", appName: "YOUR_APP_NAME", withLaunchOptions: launchOptions)
return true
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
AirBridge.setting.attributionCallback = ^(NSDictionary<NSString*, NSString*>* _Nonnull attribution) {
ABKAttributionData* data = [[ABKAttributionData alloc] initWithNetwork:attribution[@"attributedChannel"]
campaign:attribution[@"attributedCampaign"]
adGroup:attribution[@"attributedAdGroup"]
creative:attribution[@"attributedAdCreative"]];
[Appboy.sharedInstance.user setAttributionData:data];
// NOTE: Data point will be consumed
NSDictionary* keyMap = @{
@"attributedContent": @"airbridge_content",
@"attributedTerm": @"airbridge_term",
@"attributedSubPublisher": @"airbridge_sub_id",
@"attributedSubSubPublisher1": @"airbridge_sub_id_1",
@"attributedSubSubPublisher2": @"airbridge_sub_id_2",
@"attributedSubSubPublisher3": @"airbridge_sub_id_3",
};
for (NSString* key in keyMap.allKeys) {
NSString* brazeKey = keyMap[key];
NSString* value = attribution[key];
[Appboy.sharedInstance.user setCustomAttributeWithKey:brazeKey andStringValue:value];
}
[Appboy.sharedInstance flushDataAndProcessRequestQueue];
};
[AirBridge getInstance:"YOUR_APP_TOKEN" appName:"YOUR_APP_NAME" withLaunchOptions:launchOptions];
return YES;
}
@end
Available data fields
Airbridge can send seven types of data to Braze listed in the following data field chart. This data can be viewed in the Airbridge dashboard and is used for user install attribution, custom attribution, and filtering.
In addition to the four basic data types (Source, Campaign, Ad Group, and Ad) provided by Braze, Airbridge offers three additional data types such as airbridge_content
, airbridge_sub_id
, and airbridge_term
as a custom attribute. Among these, airbridge_sub_id
delivers a keyword to the value when it comes from search ads.
Braze data points will be used when you send data marked as optional because it is transmitted as a custom user attribute.
Airbridge data field | Braze segment filter | Type | Description |
---|---|---|---|
attributedChannel |
Install Attribution Source | Install Attribution Data | Name of paid ad channel |
attributedCampaign |
Install Attribution Campaign | Install Attribution Data | Name of campaign |
attributedAdGroup |
Install Attribution Ad Group | Install Attribution Data | Name of adGroup |
attributedAdCreative |
Install Attribution Ad | Install Attribution Data | Name of adCreative |
attributedContent (Optional) |
airbridge_content |
Custom User Attribute | Name of ad copy, slogan, and promotion |
attributedTerm (Optional) |
airbridge_term |
Custom User Attribute | Type of medium |
attributedSubPublisher (Optional) |
airbridge_sub_id |
Custom User Attribute | Ad search keyword |
attributedSubSubPublisher1 (Optional) |
airbridge_sub_id_1 |
Custom User Attribute | |
attributedSubSubPublisher2 (Optional) |
airbridge_sub_id_2 |
Custom User Attribute | |
attributedSubSubPublisher3 (Optional) |
airbridge_sub_id_3 |
Custom User Attribute |
Facebook attribution data
Attribution data for Facebook campaigns is not available through our partners. This media source does not permit their partners to share attribution data with third parties and, therefore, our partners cannot send that data to Braze.
Airbridge click tracking URLs in Braze (optional)
Using click tracking links in your Braze campaigns will allow you to easily see which campaigns are driving app installs and re-engagement. As a result, you’ll be able to measure your marketing efforts more effectively and make data-driven decisions on where to invest more resources for the maximum ROI.
To get started with Airbridge click tracking links, visit the documentation found here. Once set up, you can directly insert the Airbridge click tracking links into your Braze campaigns. Airbridge will then use its probabilistic attribution methodologies to attribute the user that has clicked on the link. We recommend appending your Airbridge tracking links with a device identifier to improve the accuracy of attributions from your Braze campaigns. This will deterministically attribute the user that has clicked on the link.
For Android, Braze allows customers to opt-in to Google Advertising ID collection (GAID). The GAID is also collected natively through the Airbridge SDK integration. You can include the GAID in your Airbridge click tracking links by utilizing the following Liquid logic:
1
2
3
{% if most_recently_used_device.${platform} == 'android' %}
aifa={{most_recently_used_device.${google_ad_id}}}
{% endif %}
For iOS, both Braze and Airbridge automatically collect the IDFV natively through our SDK integrations. This can be used as the device identifier. You can include the IDFV in your Airbridge click tracking links by utilizing the following Liquid logic:
1
2
3
{% if most_recently_used_device.${platform} == 'ios' %}
idfv={{most_recently_used_device.${id}}}
{% endif %}
This recommendation is purely optional
If you currently do not use any device identifiers - such as the IDFV or GAID - in your click tracking links, or do not plan to in the future, Airbridge will still be able to attribute these clicks through their probabilistic modeling.