Attention
This is a guide for the installation and setup of Unreal SDK v4. Please check the Unreal SDK guide for previous versions.
Install the Airbridge SDK and implement the necessary settings by following the steps below.
The Airbridge Unreal SDK supports the Unreal Engine v.4.23 and later.
The Airbridge Unreal SDK can be installed using the method below. After installation, you can confirm whether the SDK has been properly installed through the Unreal SDK Test.
1. Download the latest version of the Airbridge Unreal SDK.
2. Create the Plugins
folder in the root directory of your Unreal Engine project.
3. Locate the Airbridge Unreal SDK within the Plugins
folder like in the following structure.
<YOUR_UE_PROJECT>
├── Plugins
└── AirbridgeUnrealSDK
├── Resources
├── Source
└── AirbridgeUnrealSDK.uplugin
4. Navigate to [Settings]>[Plugins] in the Unreal Engine toolbar and enable the Airbridge Unreal SDK.
5. Add AirbridgeUnreal
to the PublicDependencyModuleNames array within the app's Build.cs file (<YOUR_UE_PROJECT>.Build.cs
).
public class <YOUR_UE_PROJECT> : ModuleRules
{
public <YOUR_UE_PROJECT>(ReadOnlyTargetRules Target) : base(Target)
{
...
PublicDependencyModuleNames.AddRange(new string[] { ... , "AirbridgeUnreal" }); // ADD DEPENDENCY
...
}
}
Attention
Install only one version of the SDK, either the general SDK or the restricted SDK.
Depending on policies and environments, restrictions on collecting device IDs like GAID and IDFA may be required. When installing the Restricted SDK version, the device IDs are not collected.
Install the Restricted SDK using the method below.
1. Download the latest version of the Airbridge Unreal SDK.
2. Create a Plugins
folder in the root directory of your Unreal Engine project.
3. Locate the Airbridge Unreal SDK within the Plugins
folder like in the following structure.
<YOUR_UE_PROJECT>
├── Plugins
└── AirbridgeUnrealSDK
├── Resources
├── Source
└── AirbridgeUnrealSDK.uplugin
4. Navigate to [Settings]>[Plugins] in the Unreal Engine toolbar and enable the Airbridge Unreal SDK.
5. Add AirbridgeUnreal
to the PublicDependencyModuleNames array within the app's Build.cs file (<YOUR_UE_PROJECT>.Build.cs
).
public class <YOUR_UE_PROJECT> : ModuleRules
{
public <YOUR_UE_PROJECT>(ReadOnlyTargetRules Target) : base(Target)
{
...
PublicDependencyModuleNames.AddRange(new string[] { ... , "AirbridgeUnreal" }); // ADD DEPENDENCY
...
}
}
Enter the correct App Name and App Token values in the SDK Settings window. The App Name and App Token can be found on the [Settings]>[Tokens] page in the Airbridge dashboard.
1. Open the Project Settings
window in Unreal Engine.
2. Under the [Plugins] section, click Airbridge Unreal SDK o open the SDK settings window. You may fill in the fields or click on the checkboxes that are necessary for your service.
3. After filling in the required fields, click the Set as Default
button.
See below for a guide to the settings.
Value | Reference |
---|---|
App Name | |
App Token | |
Log Level | |
iOS URI Scheme | |
Android URI Scheme | |
Session Timeout Seconds | |
User Info Hash Enabled | |
Track Airbridge Link Only | |
Auto Start Tracking Enabled | |
Facebook Deferred App Link Enabled | |
iOS Tracking Authorize Timeout Seconds | |
SDK Signature Secret ID | |
SDK Signature Secret | |
Track In Session Life Cycle Event Enabled | |
Clear Event Buffer On Initialize Enabled | |
SDK Enabled | |
Event Buffer Count Limit | |
Event Buffer Size Limit In Gibibyte | |
Event Transmit Interval Seconds | |
Meta Install Referrer (Facebook App ID) | |
Is Handle Airbridge Deeplink Only |
Note
The functions necessary to ensure compliance with privacy policies should be reviewed with legal counsel.
In the iOS environment, the IDFA can only be collected when users consent to data tracking through the App Tracking Transparency (ATT) prompt.
Event collection should be delayed until the user allows tracking. If the install event is collected before the user allows tracking through the ATT prompt, the install event data will lack an identifier, making performance measurement difficult. We recommend setting a sufficient delay time for event collection to collect identifiers.
1. Prepare the text you will use in the ATT prompt.
2. Provide the ATT prompt following this guide provided by Apple.
3. If the install event is not collected, the Airbridge React Native SDK delays collecting install events for 30 seconds until the user allows tracking each time the app is launched. If the user exits the app before deciding whether to allow tracking, the SDK will not collect the install event and will try again at the next app launch.
In the SDK settings, configure the iOS Tracking Authorize Timeout Seconds
to set a sufficient delay time for collecting install events. The default value is 300 seconds, and it can be set up to 3600 seconds (1 hour).
Attention
Set a sufficient delay time to collect the app install event. If the SDK collects install events before users can allow tracking on the ATT prompt, the IDFA will not be collected along with the install events.
Attention
Optional settings. Configure only if necessary.
Opt-in is a policy where you don't use a user's information until they agree to it.
After setting Auto Start Tracking Enabled to false in Configure SDK, call the StartTracking function at a time when events can be collected. Events are collected from the time the StartTracking function is called.
The opt-in policy requires user consent before using user data.
After setting the Auto Start Tracking Enabled
in the SDK settings to false
, call the StartTracking
function at the point of time when you can collect events. The SDK will start collecting events when the startTracking
function is called.
FAirbridge::StartTracking();
Attention
Optional settings. Configure only if necessary.
The opt-out policy allows the use of user information until the user explicitly declines.
After setting the Auto Start Tracking Enabled
in the SDK settings to true
, call the StopTracking
function at the point of time when you can no longer collect events. The SDK will stop collecting events when the stopTracking
function is called.
FAirbridge::StopTracking();
Attention
Optional settings. Configure only if necessary.
With the SDK Signature, you can prevent SDK spoofing and use verified events to measure ad performance.
The SDK Signature credentials, which are the Secret ID and the Secret, are required for the SDK Signature setup. They can be found on the [Management]>[Fraud Validation Rules]>[SDK Signature] page in the Airbridge dashboard. For more details on how to find the SDK Signature credentials, refer to this Airbridge guide.
Once you have the credentials, go to the SDK settings and enter the Secret ID as sdkSignatureID and the Secret as sdkSignatureSecret
.
When a user clicks on the Airbridge tracking link, the scheme deep link embedded in the tracking link is converted into an Airbridge Deep Link, which can be either an HTTP deep link or a scheme deep link. This Airbridge Deep Link redirects the user to the desired app location. Then, the Airbridge SDK converts the Airbridge Deep Link back to the original scheme deep link embedded in the tracking link and passes it to the app.
Example scheme deep link embedded in the tracking link: YOUR_SCHEME://product/12345
Examples of Airbridge Deep Links
HTTP deep link format 1: https://YOUR_APP_NAME.airbridge.io/~~~
HTTP deep link format 2: https://YOUR_APP_NAME.abr.ge/~~~
Scheme deep link format: YOUR_SCHEME://product/12345?airbridge_referrer=~~~
When the app is installed on the device and the tracking link is clicked, the app opens through the Airbridge Deep Link. The Airbridge SDK converts the Airbridge Deep Link into the scheme deep embedded in the tracking link and passes it to the app.
When the app is not installed on the device and the tracking link is clicked, the Airbridge SDK saves the Airbridge Deep Link is saved. After the user is redirected to the app store or website and the app is installed and launched, the Airbridge SDK converts the saved Airbridge Deep Link into the scheme deep embedded in the tracking link and passes it to the app.
For the deep linking setup, the following information is required.
Deep link information submitted in the Airbridge dashboard
In-app location address for user redirection
First, submit the deep link information to the Airbridge dashboard.
For the deep linking setup, the following information must be entered into the Airbridge dashboard.
iOS URI scheme: The Airbridge Deep Link is converted to a scheme deep link using the iOS URI scheme.
iOS App ID: The universal link domain of the Airbridge Deep Link is set using the iOS App ID.
Android URI scheme: The Airbridge deep link is converted to a scheme deep link using the Android URI scheme. This information is necessary for the App Link and URI scheme.
Package name: This is the Android app identifier necessary for the App Link and URI scheme.
Android sha256_cert_fingerprints: This is used for setting the App Link domain. This information is necessary for the App Link.
Attention
To properly redirect users as intended, submit different information for the production app and the development app.
Follow the steps below to submit the necessary information to the Airbridge dashboard.
1. Navigate to [Tracking Link]>[Deep Links] in the Airbridge dashboard.
2. Enter the iOS URI scheme in the iOS URI Scheme field. Include ://
. For example, if the iOS URI scheme is demo
, enter demo://
.
3. In the Apple Developer Dashboard, navigate to [Identifier] of the app you want to set up the deep link. Find the App ID Prefix and Bundle ID.
4. The iOS App ID is in the format of App ID Prefix+ . + Bundle ID
. Enter the iOS App ID into the iOS App ID field. For example, if the App ID Prefix is prefix
and the Bundle ID is example
, the iOS App ID is prefix.example
.
1. Navigate to [Tracking Link]>[Deep Links] in the Airbridge dashboard.
2. Enter the Android URI scheme into the Android URI Scheme field. Include ://
. For example, if the URI scheme is demo
, enter demo://
.
3. Enter the package name in the Package name field.
4. You need to find the sha256_cert_fingerprints. Run the following command from the keystore file you are deploying.
keytool -list -v -keystore YOUR_KEYSTORE.keystore
Find the SHA256 value in the results. The SHA256 value is the sha256_cert_fingerprints.
Certificate fingerprints:
MD5: 4C:65:04:52:F0:3F:F8:65:08:D3:71:86:FC:EF:C3:49
SHA1: C8:BF:B7:B8:94:EA:5D:9D:38:59:FE:99:63:ED:47:B2:D9:5A:4E:CC
SHA256: B5:EF:4D:F9:DC:95:E6:9B:F3:9A:5E:E9:D6:E0:D8:F6:7B:AB:79:C8:78:67:34:D9:A7:01:AB:6A:86:01:0E:99
5. Enter the SHA256 value into the sha256_cert_fingerprints field.
After entering the deep link information into the Airbridge dashboard, an additional setup is required to enable the following.
App launch with Airbridge Deep Links
Airbridge Deep Link event collection
User redirection with Airbridge Deep Links
For detailed instructions, refer to the information below.
Perform the following setup to enable app launch with Airbridge Deep Links after the user clicks on a tracking link.
In the SDK settings, enter the iOS URI scheme that you entered on the [Tracking Link]>[Deep Links] page in the Airbridge dashboard into the iOS URI Scheme
field. The Universal Link domain will be automatically set up using the App Name
value in the SDK settings.
In the SDK settings, enter the Android URI scheme that you entered on the [Tracking Link]>[Deep Links] page in the Airbridge dashboard into the Android URI Scheme
field. The App Name value will be used to set up the App Links automatically.
When the Airbridge Deep Link is executed, it is converted into a scheme deep link and passed to the onDeeplinkReceived
callback. And if a deep link that is not an Airbridge Deep Link is executed, it is passed to the callback without being converted.
Use the received deep link to redirect the user to the intended destination.
1. Navigate to Content Browser > Add/Import > New C++ Class...
and specify the parent class as Game Mode Base
to create a Game Mode Base class.
2. Proceed with the deep link callback setup through the following method in the source code of the created Game Mode Base class.
...
#include "AirbridgeUnreal.h"
void AExampleGameModeBase::BeginPlay()
{
...
FAirbridge::SetOnDeeplinkReceived([](const FString& Url)
{
// show proper content using url
});
...
}
3. In the Unreal Editor Project Settings window, navigate to Project > Maps & Modes > Default Modes
and set the Default GameMode
field value as the game mode after the deep link callback setup is completed.
When a user clicks on a tracking link with deferred deep linking capabilities and the app is not installed on the device, the Airbridge SDK collects the deep link as follows.
After initialization, the Airbridge SDK attempts to collect a deep link when all of the following conditions are met. When the app is closed before collection, the Airbridge SDK considers it as if there has not been an Airbridge Deep Link.
The FAirbridge::StartTracking
function is called with the opt-in settings in place. Or, opt-in has not been set.
The user's response to the ATT prompt has been determined. Or, the event collection delay time configured regarding the ATT prompt has expired.
Deferred deep links are automatically passed to onDeeplinkReceived callback, so no additional settings are required.
The Airbridge SDK collects user actions from the app as per settings and sends them as in-app events.
Setting up a Hybrid App
You can set up the Unreal SDK to handle Airbridge-related work occurring on in-app websites in hybrid apps without changing the website code.
The Airbridge.TrackEvent
function must be called to send events. Refer to the information below about the required Airbridge.TrackEvent
function components and their types.
static void TrackEvent(
const FString& Category,
const UAirbridgeMap* SemanticAttributes = nullptr,
const UAirbridgeMap* CustomAttributes = nullptr
);
Name | Required | Type | Description |
---|---|---|---|
category | Required | String | Name of the event |
semanticAttributes | Optional | UAirbridgeMap | Semantic attributes of events |
customAttributes | Optional | UAirbridgeMap | Custom attributes of events |
Refer to the component definition and available strings below.
The Standard Event Categories provided by the Airbridge SDK can be found in the AirbridgeCategory. You can also enter the Event Categories from the list of Standard Events.
Custom events can be sent by entering the event name set in the event taxonomy.
Refer to the example below.
// track standard event (provided by sdk)
FAirbridge::TrackEvent(AirbridgeCategory::ORDER_COMPLETED);
// track standard event (not provided by sdk)
FAirbridge::TrackEvent("airbridge.ecommerce.order.canceled");
// track custom event
FAirbridge::TrackEvent("eventViewed");
Attention
The Airbridge SDK v4 attributes differ from the previous version. The previous version's attributes do not include action, label, and value.
Additional information about the event can be collected using attributes.
Action, Label: Collect information that can be used as GroupBys in the Airbridge reports
Value: Collect information that can be used for sales analysis. Airbridge can perform calculations using the collected data.
Semantic Attribute: Collect predefined attributes by Airbridge.
Custom Attributes: Collect attributes defined by Airbridge users.
In the FAirbridge::TrackEvent
function, you can enter Action, Label, Value, and Semantic Attributes using the semanticAttributes
parameter and Custom Attributes using the customAttributes
parameter.
The semantic attributes predefined by Airbridge can be found in the user guide below.
Please refer to the example below.
UAirbridgeList* Products = UAirbridgeList::CreateObject();
UAirbridgeMap* PlasticHammer = UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, 12345);
Products->Add(PlasticHammer);
UAirbridgeMap *SemanticAttributes = UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::ACTION, "Tool")
->Set(AirbridgeAttribute::LABEL, "Hammer")
->Set(AirbridgeAttribute::VALUE, 10)
->Set(AirbridgeAttribute::CURRENCY, "USD")
->Set(AirbridgeAttribute::PRODUCTS, Products)
->Set("totalQuantity", 1);
UAirbridgeMap *CustomAttributes = UAirbridgeMap::CreateObject()
->Set("promotion", "FirstPurchasePromotion")
FAirbridge::TrackEvent(
"airbridge.ecommerce.order.canceled",
SemanticAttributes,
CustomAttributes
);
Attention
Semantic attributes and custom attributes only allow JSON as a data type.
JSON types: String, Number, Boolean, Object<String, JSON>, Array<JSON>
Types that cannot be used in semantic attributes and custom attributes: Struct, Class, etc.
The standard event categories and semantic attributes provided by the SDK are as follows.
Key | Type | Value |
---|---|---|
SIGN_UP | String | airbridge.user.signup |
SIGN_IN | String | airbridge.user.signin |
SIGN_OUT | String | airbridge.user.signout |
HOME_VIEWED | String | airbridge.ecommerce.home.viewed |
PRODUCT_LIST_VIEWED | String | airbridge.ecommerce.productList.viewed |
SEARCH_RESULTS_VIEWED | String | airbridge.ecommerce.searchResults.viewed |
PRODUCT_VIEWED | String | airbridge.ecommerce.product.viewed |
ADD_PAYMENT_INFO | String | airbridge.addPaymentInfo |
ADD_TO_WISHLIST | String | airbridge.addToWishlist |
ADDED_TO_CART | String | airbridge.ecommerce.product.addedToCart |
INITIATE_CHECKOUT | String | airbridge.initiateCheckout |
ORDER_COMPLETED | String | airbridge.ecommerce.order.completed |
ORDER_CANCELED | String | airbridge.ecommerce.order.canceled |
START_TRIAL | String | airbridge.startTrial |
SUBSCRIBE | String | airbridge.subscribe |
UNSUBSCRIBE | String | airbridge.unsubscribe |
AD_IMPRESSION | String | airbridge.adImpression |
AD_CLICK | String | airbridge.adClick |
COMPLETE_TUTORIAL | String | airbridge.completeTutorial |
ACHIEVE_LEVEL | String | airbridge.achieveLevel |
UNLOCK_ACHIEVEMENT | String | airbridge.unlockAchievement |
RATE | String | airbridge.rate |
SHARE | String | airbridge.share |
SCHEDULE | String | airbridge.schedule |
SPEND_CREDITS | String | airbridge.spendCredits |
Key | Type | Value |
---|---|---|
ACTION | String | action |
LABEL | String | label |
VALUE | String | value |
CURRENCY | String | currency |
ORIGINAL_CURRENCY | String | originalCurrency |
PRODUCTS | String | products |
PRODUCT_ID | String | productID |
PRODUCT_NAME | String | name |
PRODUCT_PRICE | String | price |
PRODUCT_QUANTITY | String | quantity |
PRODUCT_CURRENCY | String | currency |
PRODUCT_POSITION | String | position |
PRODUCT_CATEGORY_ID | String | categoryID |
PRODUCT_CATEGORY_NAME | String | categoryName |
PRODUCT_BRAND_ID | String | brandID |
PRODUCT_BRAND_NAME | String | brandName |
PERIOD | String | period |
IS_RENEWAL | String | isRenewal |
RENEWAL_COUNT | String | renewalCount |
PRODUCT_LIST_ID | String | productListID |
CART_ID | String | cartID |
TRANSACTION_ID | String | transactionID |
TRANSACTION_TYPE | String | transactionType |
TRANSACTION_PAIRED_EVENT_CATEGORY | String | transactionPairedEventCategory |
TRANSACTION_PAIRED_EVENT_TIMESTAMP | String | transactionPairedEventTimestamp |
TOTAL_QUANTITY | String | totalQuantity |
QUERY | String | query |
IN_APP_PURCHASED | String | inAppPurchased |
CONTRIBUTION_MARGIN | String | contributionMargin |
ORIGINAL_CONTRIBUTION_MARGIN | String | originalContributionMargin |
LIST_ID | String | listID |
RATE_ID | String | rateID |
RATE | String | rate |
MAX_RATE | String | maxRate |
ACHIEVEMENT_ID | String | achievementID |
SHARED_CHANNEL | String | sharedChannel |
DATE_TIME | String | datetime |
DESCRIPTION | String | description |
IS_REVENUE | String | isRevenue |
PLACE | String | place |
SCHEDULE_ID | String | scheduleID |
TYPE | String | type |
LEVEL | String | level |
SCORE | String | score |
AD_PARTNERS | String | adPartners |
IS_FIRST_PER_USER | String | isFirstPerUser |
Refer to the example codes for each type of data below.
FAirbridge::TrackEvent(
"event",
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::VALUE, 10),
UAirbridgeMap::CreateObject()
->Set("string", "string")
->Set("number", 1000)
->Set("boolean", true)
->Set("object", UAirbridgeMap::CreateObject()->Set("key", "value"))
->Set("array", UAirbridgeList::CreateObject()->Add("value"))
);
Attention
The default settings will apply if no additional settings are configured. Proceed after reviewing whether additional settings are necessary.
Configure additional settings for sending in-app events if necessary.
The Airbridge SDK supports events triggered by users on a session basis. A session ends if any of the following conditions are met.
The app moves to the background, or the app is terminated
The session expires with the app being in the foreground
When the app is launched or an event is performed after the end of a session, a new session is initiated.
The default session timeout is set to 300 seconds. In the SDK settings, you can configure Session Timeout Seconds
to a maximum of 604,800 seconds (7 days).
Attention
The Airbridge SDK collects Open events and Foreground events that initiate a new session. However, those events are not collected during a session. To collect them while the session is being maintained, additional settings are required.
The Airbridge SDK maintains a queue of collected events and transmits them until they are empty.
When event transmission fails, it is attempted again after waiting for 1, 2, 4, or... seconds, depending on the number of times it failed. If the transmission fails again, the SDK waits for the set event transmission interval and repeats loading events until it is successful.
The default transmission interval is set to 0 seconds. In the SDK settings, you can adjust Event Transmit Interval Seconds
to modify it to a maximum of 86,400 seconds (1 day).
The Airbridge SDK stores events as long as they don't exceed the maximum event count and size limits. Excess events are discarded.
The default maximum event count is set to INT_MAX, and the default maximum event size is 1024 GiB (gibibytes). In the SDK settings, you can configure Event Buffer Count Limit
and Event Buffer Size Limit In Gibibyte
to modify the values. The highest allowable event count is INT_MAX, and the highest maximum event size you can set is 1024 GiB (gibibytes).
When the event deletion option is activated, all in-app events that are not transmitted during the Airbridge SDK's initialization process are deleted. By default, the event deletion option is inactive.
In the SDK settings, set Clear Event Buffer On Initialize Enabled
to true
to activate the event deletion option.
The Airbridge SDK supports functions to include device identifiers in all events for transmission.
Function | Description |
---|---|
| Adds additional device identifiers. Up to 10 identifiers can be entered. - Key: Maximum 128 characters. It must satisfy the regular expression - Value: Maximum 128 characters. |
| Deletes only specified device identifiers. |
| Deletes all device identifiers. |
Refer to the example below.
FAirbridge::SetDeviceAlias("string", "string");
FAirbridge::RemoveDeviceAlias("string");
FAirbridge::ClearDeviceAlias();
Airbridge collects in-app events that are classified as Standard Events and Custom Events. Standard Events are events predefined by Airbridge. Refer to the example codes below.
FAirbridge::SetUserID("string");
FAirbridge::SetUserAlias("string", "string");
FAirbridge::SetUserEmail("string");
FAirbridge::SetUserPhone("string");
FAirbridge::SetUserAttribute("string", "string");
FAirbridge::TrackEvent(AirbridgeCategory::SIGN_UP);
FAirbridge::SetUserID("string");
FAirbridge::SetUserAlias("string", "string");
FAirbridge::SetUserEmail("string");
FAirbridge::SetUserPhone("string");
FAirbridge::SetUserAttribute("string", "string");
FAirbridge::TrackEvent(AirbridgeConstant::AirbridgeCategory::SIGN_IN);
FAirbridge::TrackEvent(AirbridgeCategory::SIGN_OUT);
FAirbridge::ClearUser();
FAirbridge::TrackEvent(AirbridgeCategory::HOME_VIEWED);
FAirbridge::TrackEvent(
AirbridgeCategory::PRODUCT_LIST_VIEWED,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::LIST_ID, "84e6e236-38c4-48db-9b49-16e4cc064386")
->Set(AirbridgeAttribute::PRODUCTS,
UAirbridgeList::CreateObject()
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "0117b32a-5a6c-4d4c-b64c-7858e07dba78")
->Set(AirbridgeAttribute::PRODUCT_NAME, "PlasticHammer")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 10)
->Set(AirbridgeAttribute::PRODUCT_QUANTITY, 1)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "d6ab2fbe-decc-4362-b719-d257a131e91e")
->Set(AirbridgeAttribute::PRODUCT_NAME, "PlasticFork")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 1)
->Set(AirbridgeAttribute::PRODUCT_QUANTITY, 1)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
)
);
FAirbridge::TrackEvent(
AirbridgeCategory::SEARCH_RESULTS_VIEWED,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::QUERY, "Plastic")
->Set(AirbridgeAttribute::PRODUCTS,
UAirbridgeList::CreateObject()
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "0117b32a-5a6c-4d4c-b64c-7858e07dba78")
->Set(AirbridgeAttribute::PRODUCT_NAME, "PlasticHammer")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 10)
->Set(AirbridgeAttribute::PRODUCT_QUANTITY, 1)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "d6ab2fbe-decc-4362-b719-d257a131e91e")
->Set(AirbridgeAttribute::PRODUCT_NAME, "PlasticFork")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 1)
->Set(AirbridgeAttribute::PRODUCT_QUANTITY, 1)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
)
);
FAirbridge::TrackEvent(
AirbridgeCategory::PRODUCT_VIEWED,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCTS,
UAirbridgeList::CreateObject()
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "0117b32a-5a6c-4d4c-b64c-7858e07dba78")
->Set(AirbridgeAttribute::PRODUCT_NAME, "PlasticHammer")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 10)
->Set(AirbridgeAttribute::PRODUCT_QUANTITY, 1)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
)
);
FAirbridge::TrackEvent(
AirbridgeCategory::ADD_PAYMENT_INFO,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::TYPE, "CreditCard")
);
FAirbridge::TrackEvent(
AirbridgeCategory::ADD_TO_WISHLIST,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::LIST_ID, "189a2f8b-83ee-4074-8158-726be54e57d4")
->Set(AirbridgeAttribute::CURRENCY, "USD")
->Set(AirbridgeAttribute::PRODUCTS,
UAirbridgeList::CreateObject()
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "0117b32a-5a6c-4d4c-b64c-7858e07dba78")
->Set(AirbridgeAttribute::PRODUCT_NAME, "PlasticHammer")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 10)
->Set(AirbridgeAttribute::PRODUCT_QUANTITY, 1)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
)
);
FAirbridge::TrackEvent(
AirbridgeCategory::ADDED_TO_CART,
UAirbridgeMap::CreateObject()
->Set(:AirbridgeAttribute::CART_ID, "421eaeb7-6e80-4694-933e-f2e1a55e9cbd")
->Set(AirbridgeAttribute::CURRENCY, "USD")
->Set(AirbridgeAttribute::PRODUCTS,
UAirbridgeList::CreateObject()
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "0117b32a-5a6c-4d4c-b64c-7858e07dba78")
->Set(AirbridgeAttribute::PRODUCT_NAME, "PlasticHammer")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 10)
->Set(AirbridgeAttribute::PRODUCT_QUANTITY, 1)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
)
);
FAirbridge::TrackEvent(
AirbridgeCategory::INITIATE_CHECKOUT,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::TRANSACTION_ID, "0a7ee1ec-33da-4ffb-b775-89e80e75978a")
->Set(AirbridgeAttribute::CURRENCY, "USD")
->Set(AirbridgeAttribute::PRODUCTS,
UAirbridgeList::CreateObject()
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "0117b32a-5a6c-4d4c-b64c-7858e07dba78")
->Set(AirbridgeAttribute::PRODUCT_NAME, "PlasticHammer")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 10)
->Set(AirbridgeAttribute::PRODUCT_QUANTITY, 1)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "d6ab2fbe-decc-4362-b719-d257a131e91e")
->Set(AirbridgeAttribute::PRODUCT_NAME, "PlasticFork")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 1)
->Set(AirbridgeAttribute::PRODUCT_QUANTITY, 1)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
)
);
FAirbridge::TrackEvent(
AirbridgeCategory::ORDER_COMPLETED,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::VALUE, 11)
->Set(AirbridgeAttribute::TRANSACTION_ID, "8065ef16-162b-4a82-b683-e51aefdda7d5")
->Set(AirbridgeAttribute::CURRENCY, "USD")
->Set(AirbridgeAttribute::IN_APP_PURCHASED, true)
->Set(AirbridgeAttribute::PRODUCTS,
UAirbridgeList::CreateObject()
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "0117b32a-5a6c-4d4c-b64c-7858e07dba78")
->Set(AirbridgeAttribute::PRODUCT_NAME, "PlasticHammer")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 10)
->Set(AirbridgeAttribute::PRODUCT_QUANTITY, 1)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "d6ab2fbe-decc-4362-b719-d257a131e91e")
->Set(AirbridgeAttribute::PRODUCT_NAME, "PlasticFork")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 1)
->Set(AirbridgeAttribute::PRODUCT_QUANTITY, 1)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
)
);
FAirbridge::TrackEvent(
AirbridgeCategory::ORDER_CANCELED,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::VALUE, 11)
->Set(AirbridgeAttribute::TRANSACTION_ID, "8065ef16-162b-4a82-b683-e51aefdda7d5")
->Set(AirbridgeAttribute::CURRENCY, "USD")
->Set(AirbridgeAttribute::IN_APP_PURCHASED, true)
->Set(AirbridgeAttribute::PRODUCTS,
UAirbridgeList::CreateObject()
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "0117b32a-5a6c-4d4c-b64c-7858e07dba78")
->Set(AirbridgeAttribute::PRODUCT_NAME, "PlasticHammer")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 10)
->Set(AirbridgeAttribute::PRODUCT_QUANTITY, 1)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "d6ab2fbe-decc-4362-b719-d257a131e91e")
->Set(AirbridgeAttribute::PRODUCT_NAME, "PlasticFork")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 1)
->Set(AirbridgeAttribute::PRODUCT_QUANTITY, 1)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
)
);
FAirbridge::TrackEvent(
AirbridgeCategory::START_TRIAL,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::TRANSACTION_ID, "ef1e5271-0370-407c-b1e9-669a8df1dc2c")
->Set(AirbridgeAttribute::CURRENCY, "USD")
->Set(AirbridgeAttribute::PERIOD, "P1M")
->Set(AirbridgeAttribute::PRODUCTS,
UAirbridgeList::CreateObject()
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "306a57cb-f653-4220-a208-8405d8e4d506")
->Set(AirbridgeAttribute::PRODUCT_NAME, "MusicStreamingMembership")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 15)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
)
);
FAirbridge::TrackEvent(
AirbridgeCategory::SUBSCRIBE,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::VALUE, 15)
->Set(AirbridgeAttribute::CURRENCY, "USD")
->Set(AirbridgeAttribute::TRANSACTION_ID, "cbe718c7-e44e-4707-b5cd-4a6a29f29649")
->Set(AirbridgeAttribute::PERIOD, "P1M")
->Set(AirbridgeAttribute::IS_RENEWAL, true)
->Set(AirbridgeAttribute::PRODUCTS,
UAirbridgeList::CreateObject()
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "306a57cb-f653-4220-a208-8405d8e4d506")
->Set(AirbridgeAttribute::PRODUCT_NAME, "MusicStreamingMembership")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 15)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
)
);
FAirbridge::TrackEvent(
AirbridgeCategory::UNSUBSCRIBE,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::VALUE, 15)
->Set(AirbridgeAttribute::CURRENCY, "USD")
->Set(AirbridgeAttribute::TRANSACTION_ID, "cbe718c7-e44e-4707-b5cd-4a6a29f29649")
->Set(AirbridgeAttribute::IS_RENEWAL, true)
->Set(AirbridgeAttribute::PRODUCTS,
UAirbridgeList::CreateObject()
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "306a57cb-f653-4220-a208-8405d8e4d506")
->Set(AirbridgeAttribute::PRODUCT_NAME, "MusicStreamingMembership")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 15)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
)
);
FAirbridge::TrackEvent(
AirbridgeCategory::AD_IMPRESSION,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::VALUE, 0.01)
->Set(AirbridgeAttribute::AD_PARTNERS,
UAirbridgeMap::CreateObject()
->Set("mopub",
UAirbridgeMap::CreateObject()
->Set("app_version", "5.18.0")
->Set("adunit_id", "12345")
->Set("adunit_name", "12345")
->Set("adunit_format", "Banner")
->Set("id", "12345")
->Set("currency", "USD")
->Set("publisher_revenue", 12345.123)
->Set("adgroup_id", "12345")
->Set("adgroup_name", "12345")
->Set("adgroup_type", "12345")
->Set("adgroup_priority", "12345")
->Set("country", "kr")
->Set("precision", "publisher_defined")
->Set("network_name", "12345")
->Set("network_placement_id", "12345")
->Set("demand_partner_data", "12345")
)
)
);
FAirbridge::TrackEvent(
AirbridgeCategory::AD_CLICK,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::VALUE, 0.01)
->Set(AirbridgeAttribute::AD_PARTNERS,
UAirbridgeMap::CreateObject()
->Set("mopub",
UAirbridgeMap::CreateObject()
->Set("app_version", "5.18.0")
->Set("adunit_id", "12345")
->Set("adunit_name", "12345")
->Set("adunit_format", "Banner")
->Set("id", "12345")
->Set("currency", "USD")
->Set("publisher_revenue", 12345.123)
->Set("adgroup_id", "12345")
->Set("adgroup_name", "12345")
->Set("adgroup_type", "12345")
->Set("adgroup_priority", "12345")
->Set("country", "kr")
->Set("precision", "publisher_defined")
->Set("network_name", "12345")
->Set("network_placement_id", "12345")
->Set("demand_partner_data", "12345")
)
)
);
FAirbridge::TrackEvent(
AirbridgeCategory::COMPLETE_TUTORIAL,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::DESCRIPTION, "Finish Initial Tutorial")
);
FAirbridge::TrackEvent(
AirbridgeCategory::ACHIEVE_LEVEL,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::LEVEL, 13)
);
FAirbridge::TrackEvent(
AirbridgeCategory::UNLOCK_ACHIEVEMENT,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::ACHIEVEMENT_ID, "36a0f0bb-b153-4be1-a3e0-3cb5b2b076c1")
->Set(AirbridgeAttribute::DESCRIPTION, "Get Score Over 50")
->Set(AirbridgeAttribute::SCORE, 80)
);
FAirbridge::TrackEvent(
AirbridgeCategory::RATE,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::RATE_ID, "531c64b3-4704-4780-a306-89014ec18daf")
->Set(AirbridgeAttribute::RATE, 4.5)
->Set(AirbridgeAttribute::MAX_RATE, 5)
->Set(AirbridgeAttribute::PRODUCTS,
UAirbridgeList::CreateObject()
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "0117b32a-5a6c-4d4c-b64c-7858e07dba78")
->Set(AirbridgeAttribute::PRODUCT_NAME, "PlasticHammer")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 10)
->Set(AirbridgeAttribute::PRODUCT_QUANTITY, 1)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
)
);
FAirbridge::TrackEvent(
AirbridgeCategory::SHARE,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::DESCRIPTION, "Share Promotion")
->Set(AirbridgeAttribute::SHARED_CHANNEL, "CopyLink")
);
FAirbridge::TrackEvent(
AirbridgeCategory::SCHEDULE,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::SCHEDULE_ID, "75712915-2cd9-4e42-a85e-8d42f356f4c6")
->Set(AirbridgeAttribute::DATE_TIME, "2024-01-01T00:00:00+00:00")
->Set(AirbridgeAttribute::PLACE, "ConferenceRoom")
->Set(AirbridgeAttribute::PRODUCTS,
UAirbridgeList::CreateObject()
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "abb3e65d-17bc-4b28-89e3-5e356c0ea697")
->Set(AirbridgeAttribute::PRODUCT_NAME, "ConferenceRoom")
)
)
);
FAirbridge::TrackEvent(
AirbridgeCategory::SPEND_CREDITS,
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::TRANSACTION_ID, "22eb193d-be11-4fe4-95da-c91a196faf1c")
->Set(AirbridgeAttribute::PRODUCTS,
UAirbridgeList::CreateObject()
->Add(
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::PRODUCT_ID, "0117b32a-5a6c-4d4c-b64c-7858e07dba78")
->Set(AirbridgeAttribute::PRODUCT_NAME, "PlasticHammer")
->Set(AirbridgeAttribute::PRODUCT_PRICE, 10)
->Set(AirbridgeAttribute::PRODUCT_QUANTITY, 1)
->Set(AirbridgeAttribute::PRODUCT_CURRENCY, "USD")
)
)
);
Custom Events are events defined by Airbridge users to track user actions that are unique to their services. Refer to the example code below.
FAirbridge::TrackEvent(
"event",
UAirbridgeMap::CreateObject()
->Set(AirbridgeAttribute::VALUE, 10),
UAirbridgeMap::CreateObject()
->Set("string", "string")
->Set("number", 1000)
->Set("boolean", true)
->Set("object", UAirbridgeMap::CreateObject()->Set("key", "value"))
->Set("array", UAirbridgeList::CreateObject()->Add("value"))
);
Airbridge sends user data along with events. User data allows for a more accurate ad performance measurement.
User IDs refer to the user identifier used in a service. User IDs should be unique IDs that can identify unique users across websites and apps.
Function |
Description |
---|---|
| Inputs the user ID. |
| Deletes the user ID. |
| Adds additional user identifiers. Up to 10 items can be added. - key: Up to 128 characters. Must follow the regular expression - value: Up to 1024 characters. |
| Deletes only specified identifiers. |
| Deletes all additional user identifiers. |
Refer to the example below.
// ID
FAirbridge::SetUserID("testID");
// Alias
FAirbridge::SetUserAlias("ADD_YOUR_KEY", "ADD_YOUR_VALUE");
FAirbridge::RemoveUserAlias("DELETE_THIS_KEY");
FAirbridge::ClearUserAlias();
Attention
Sensitive user information may be included. Send after a thorough review with a legal advisor.
Refer to the functions below to send additional user information.
Function |
Description |
---|---|
| Inputs user's email. The data is hashed using SHA256. |
| Deletes the user email. |
| Inputs user's phone number. The data is hashed using SHA256. |
| Deletes the user's phone number. |
| Adds additional user attributes. Up to 100 items can be added. - key: Up to 128 characters. Must satisfy the regular expression: - value: Only supports string, number, and Boolean types. Up to 1024 characters. |
| Deletes only specified attributes from the additional attributes. |
| Deletes all additional user attributes. |
Refer to the example below.
// Automatically hashed on client side using SHA256
// Can turn off hashing feature with special flag
FAirbridge::SetUserEmail("testID@ab180.co");
FAirbridge::SetUserPhone("821012341234");
// Attributes
FAirbridge::SetUserAttribute("ADD_YOUR_KEY", 1);
FAirbridge::SetUserAttribute("ADD_YOUR_KEY", 1L);
FAirbridge::SetUserAttribute("ADD_YOUR_KEY", 1f);
FAirbridge::SetUserAttribute("ADD_YOUR_KEY", 1.0);
FAirbridge::SetUserAttribute("ADD_YOUR_KEY", "1");
FAirbridge::SetUserAttribute("ADD_YOUR_KEY", true);
FAirbridge::RemoveUserAttribute("DELETE_THIS_KEY");
FAirbridge::ClearUserAttributes();
When User Info Hash Enabled
is set to false
in the SDK settings, user emails and phone numbers are passed without being hashed. The default setting is true
.
You can initialize user information with the FAirbridge::ClearUser
function.
Attention
Optional settings. Configure only if necessary.
Follow the instructions below for additional setup.
Attention
Optional settings. Configure only if necessary.
The deep links passed through the AFAirbridge::SetOnDeeplinkReceived
method of the Airbridge Unity SDK include not only Airbridge Deep Links but also deep links from other solutions.
...
#include "AirbridgeUnreal.h"
void AExampleGameModeBase::BeginPlay()
{
...
FAirbridge::SetOnDeeplinkReceived([](const FString& Url)
{
// show proper content using url
});
...
}
By setting Is Handle Airbridge Deeplink Only
to true
in the SDK settings, only Airbridge Deep Links will be passed to the onDeeplinkReceived
callback. In this way, you can handle the deep links from other solutions separately from the Airbridge Deep Links.
Depending on how the link is opened, it may be difficult to properly utilize the app's tracking link in-app.
The FAirbridge::Click
function or FAirbridge::Impression
function allows you to utilize tracking links normally, bypassing the external browser.
When a user clicks on the tracking link in the app, call the FAirbridge::Click
function. Depending on the tracking link settings, the scheme deep link is passed, or the user is redirected to the app store or website.
FAirbridge::Click(
"https://abr.ge/~~~",
[]()
{
// when url is tracking link and succeed
},
[](const FString& Error)
{
// when url is tracking link and failed
// example: url is another app's tracking link, internet is not connected
}
);
When a user is impressed to the tracking link, call the FAirbridge::Impression
function. Calling this function collects Impression event data.
FAirbridge::Impression(
"https://abr.ge/~~~",
[]()
{
// when url is tracking link and succeed
},
[](const FString& Error)
{
// when url is tracking link and failed
// example: url is another app's tracking link, internet is not connected
}
);
Attention
When you set up the Airbridge SDK to use tracking links within apps, every time a tracking link is used within the app, Deeplink Pageviews are aggregated as Target Events. The deep link performance may be affected when Deeplink Pageviews occur frequently right after Deeplink Opens.
The attribution window for Deeplink Pageviews is set to 3 days by default. If you want to change the attribution window for Deeplink Pageviews, contact your Airbridge CSM. If you don't have a designated CSM, contact the Airbridge Help Center.
Attention
It takes some time for the Airbridge SDK to collect attribution results. We do not recommend using attribution results for functionalities requiring real-time processing.
You can receive attribution results for installation events through the FAirbridge::SetOnAttributionReceived
function.
static void OnReceived(TMap<FString, FString> Attribution) { }
void SomeFunction()
{
FAirbridge::SetOnAttributionReceived(OnReceived);
}
The value is delivered as follows, depending on the existence of attribution results.
If the attribution result exists, a dictionary including the values below will be passed to the callback. All keys provide the attribution data. For example, attributedChannel
contains information about the ad channel to which the ad performance is attributed.
The attribution results are passed to the callback within 1 minute after SDK initialization. If the app is closed before the attribution result is passed, the previous attribution results will be passed to the callback within 1 minute the next time the app is launched. Depending on network conditions and other factors, there may be a delay of up to 5 minutes.
Key | Type | Description |
---|---|---|
attributedChannel | String | Channel |
attributedCampaign | String | Campaign |
attributedAdGroup | String | Ad Group |
attributedAdCreative | String | Ad Creative |
attributedContent | String | Content |
attributedTerm | String | Keyword |
attributedSubPublisher | String | Sub Publisher |
attributedSubSubPublisher1 | String | Sub Sub Publisher 1 |
attributedSubSubPublisher2 | String | Sub Sub Publisher 2 |
attributedSubSubPublisher3 | String | Sub Sub Publisher 3 |
If there is no attribution result, the following dictionary will be sent to the callback. For this data to be passed, the app must be launched again at least 3 hours after the SDK initialization.
{
"attributedChannel": "unattributed"
}
Attention
Apply the code below using a custom iOS AppDelegate.
After the push notification is clicked, you need to pass the deep link information in the payload to the Airbridge SDK to collect the deep link event. Set up the FAirbridge::trackDeeplink
function.
Add the code below to your custom AppDelegate.
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <Airbridge/Airbridge.h>
#import <UserNotifications/UserNotifications.h>
@interface SomeAppDelegate : NSObject <UIApplicationDelegate, UNUserNotificationCenterDelegate>
@end
@implementation SomeAppDelegate
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
UIApplicationState state = UIApplication.sharedApplication.applicationState;
if (state == UIApplicationStateInactive) {
NSURL *url = // 푸시 알림 페이로드의 딥링크
Airbridge.trackDeeplink(url)
}
}
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler {
UIApplicationState state = UIApplication.sharedApplication.applicationState;
if ((state == UIApplicationStateInactive || state == UIApplicationStateBackground)
&& [response.actionIdentifier isEqualToString:UNNotificationDefaultActionIdentifier]) {
NSURL *url = // 푸시 알림 페이로드의 딥링크
Airbridge.trackDeeplink(url)
}
}
#if PLATFORM_IOS
#include "SomeAppDelegate.h"
#endif
void SomeCpp::SomeCpp
{
#if PLATFORM_IOS
[SomeAppDelegate load];
#endif
}
The Airbridge SDK collects deep link events when the app is opened through a deep link, even if the deep link is not an Airbridge Deep Link. Configure Track Airbridge Link Only
in the SDK Settings to true
to collect deep link events only if the app is opened through an Airbridge Deep Link and prevent unnecessary event collection.
The Airbridge SDK collects Open and Foreground events that initiate a new session. These events are not collected during an ongoing session.
By configuring the Track In Session Life Cycle Event Enabled
in the SDK settings to true
, the Open and Foreground events can be collected during ongoing sessions.
All collected Foreground events are recorded as Open events.
To comply with the Digital Markets Act (DMA), the user consent data must be sent to Airbridge. For more information about the DMA and whether it applies to your service, refer to the Airbridge user guide.
If you are in the European Economic Area (EEA), the user consent data must be sent to Airbridge at all times.
1. Confirm whether the end user launched the app in the EEA. If the end user did launch the app in the EEA (eea=1
), confirm whether the consent values have already been stored for the session. If consent values are stored, proceed to Step 3.
If the user launched the app from outside the EEA, user consent data collection is not mandatory.
Note
Airbridge cannot provide guidance on storing the user consent data and implementing the prompts. For assistance, consult legal professionals.
2. If no consent values are stored, collect user consent data using means such as a prompt. The adPersonalization
and adUserData
values should be collected in this step.
Attention
Advertisers must collect user consent data from all existing and new users in the EEA at least once starting March 6, 2024.
The table below lists the user consent data that must be passed to Airbridge. The eea
value is neither the response from the user nor a value automatically filled in by Airbridge. Advertisers should determine the eea
value based on whether the user is in the EEA region and whether the DMA applies or not.
Field Name in Airbridge |
Field Name in Google |
Description |
---|---|---|
<string> |
| Indicates whether the user is in the EEA and whether the DMA applies or not. The value is neither the response from the user nor a value automatically filled in by Airbridge. Determine the value based on where the user is located and whether the DMA applies or not. Values other than - - |
<string> |
| Indicates whether the user gave consent to use their data for ad personalization. Values other than - - |
<string> |
| Indicates whether the user gave consent to pass the user data used for advertising to Google. Values other than - - |
3. Configure the Auto Start Tracking Enabled
in the SDK settings to false
.
4. After the SDK initialization, the user consent data must be passed to Airbridge before the user data collection.
Attention
Ensure to follow the instructions below.
Use the field names specified by Airbridge:
eea
,adPersonalization
,adUserData
Input
0
or1
following the consent data collected.
// Set device alias into Airbridge SDK
// Based on actual region
FAirbridge::SetDeviceAlias("eea", "0" /* or "1" */);
// Based on actual user consent
FAirbridge::SetDeviceAlias("adPersonalization", "0" /* or "1" */);
FAirbridge::SetDeviceAlias("adUserData", "0" /* or "1" */);
// Explicitly start tracking
FAirbridge::StartTracking();
Follow the steps below to use deferred deep linking in Meta ads. The Airbridge SDK collects the Meta deferred app links before the Airbridge deferred deep links. If there are no Meta deferred app links, the Airbridge deferred deep links are collected.
Note that Meta does not support Meta deferred app links for SKAdNetwork campaigns.
1. Install the Facebook SDK. Refer to the Meta Ads Guide (iOS).
2. Configure the Facebook Deferred App Link Enabled
in the SDK settings to true
.
Attention
If the SDK is not enabled immediately after the SDK initialization, the Install, Open, and Deeplink Openbvevents may not be collected.
Upon initialization, all functions of the SDK are enabled by default. By configuring SDK Enabled
in the SDK settings to false
, the SDK can be initialized with all functions disabled.
You can also check the activation status of the Airbridge SDK and enable or disable all functions, as in the following example.
FAirbridge::IsSDKEnabled();
FAirbridge::EnableSDK();
FAirbridge::DisableSDK();
To collect the Meta Install Referrer, enter the Meta App ID as the key value for Meta Install Referrer (Facebook App ID)
in the SDK settings.
Note that the decryption key must be submitted to the Airbridge dashboard to read the decrypted Meta Install Referrer. Refer to this user guide to learn how to enter the decryption key.
Airbridge sends a silent push every day between 3:00 PM and 4:00 PM (UTC) to users who performed an app event at least once in the last 6 months to check if the app has been deleted. You can check the uninstall event in the Airbridge reports and raw data export files.
Refer to the article below for the detailed setup instructions.
An additional SDK setup is required to integrate with some third-party solutions. It is recommended that you complete this setup before collecting data with the Airbridge SDK.
Refer to the articles listed below for integrating with third-party solutions.
The logs provided by the Airbridge SDK are categorized into Debug
, Info
, Warning
, Error
, and Fault
levels. The Debug
level is the least critical log, while the Fault
level is the most critical log.
By default, the Airbridge SDK provides logs at Warning
, Error
, and Fault
levels. By entering a specific log level as the Log Level
value in the SDK settings, the logs from that specified level up to the Fault
level will be available.
Was this page helpful?