Attention
This is a guide for the installation and setup of Unreal SDK v4. Please check the Unreal SDK guide for previous versions.
You can install the Airbridge Unreal SDK and add the necessary settings.
Unreal SDK 最低版本指南 1
Airbridge Unreal SDK 需要 4.23 及以上版本的 Unreal Engine。
You can install the Airbridge Unreal SDK in the following ways. After installation, you can verify that the SDK is installed correctly by testing the Unreal SDK.
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. Move the Airbridge Unreal SDK into the Plugins
folder inside the following structure
<YOUR_UE_PROJECT>
├── Plugins
└── AirbridgeUnrealSDK
├── Resources
├── Source
└── AirbridgeUnrealSDK.uplugin
4. Enable the Airbridge Unreal SDK by clicking Settings > Plugins
in the Unreal Engine toolbar.
5. Inside your app's Build.cs file(<YOUR_UE_PROJECT>.Build.cs
), add AirbridgeUnreal
to the PublicDependencyModuleNames array like this
public class <YOUR_UE_PROJECT> : ModuleRules
{
public <YOUR_UE_PROJECT>(ReadOnlyTargetRules Target) : base(Target)
{
...
PublicDependencyModuleNames.AddRange(new string[] { ... , "AirbridgeUnreal" }); // ADD DEPENDENCY
...
}
}
提示
请根据需求选择 General SDK 或 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. Move the Airbridge Unreal SDK into the Plugins
folder inside the following structure
<YOUR_UE_PROJECT>
├── Plugins
└── AirbridgeUnrealSDK
├── Resources
├── Source
└── AirbridgeUnrealSDK.uplugin
4. Enable the Airbridge Unreal SDK by clicking Settings > Plugins
in the Unreal Engine toolbar.
5. Inside your app's Build.cs file(<YOUR_UE_PROJECT>.Build.cs
), add AirbridgeUnreal
to the PublicDependencyModuleNames array like this
public class <YOUR_UE_PROJECT> : ModuleRules
{
public <YOUR_UE_PROJECT>(ReadOnlyTargetRules Target) : base(Target)
{
...
PublicDependencyModuleNames.AddRange(new string[] { ... , "AirbridgeUnreal" }); // ADD DEPENDENCY
...
}
}
Enter the correct values for the App Name
, App Token
in the Configure SDK.
You can find App Name and App Token in the "Airbridge Dashboard → Settings → Tokens" tab.
1. Open the Project Settings
window in Unreal Engine.
2. Under the Plugins section, click Airbridge Unreal SDK and you will see the screen below. If you do not need to set any values, please omit the key values.
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 |
提示
为确保遵守隐私政策所需的功能,应与法律顾问共同审查。
In the iOS environment, you can only collect the IDFA as an identifier for users who have consented to collect information in the AppTrackingTransparency(ATT) prompt.
You should delay collecting the app install event until the user agrees to collect information at the ATT prompt. IDFA is collected with the app install event. If you collect the app install event before the user agrees to collect information, then you can't measure your performance because IDFAs are not collected. We recommend that you time the collection of the app install event to collect IDFAs when the user agrees to the ATT prompt.
Translated with www.DeepL.com/Translator (free version)
1. Prepare the wording you use for the ATT prompt.
2. Follow Apple's guide to set up ATT prompts.
3. The Airbridge Unreal SDK delays the collection of app install events for 30 seconds each time the app is launched until the user agrees to collect the information if no app install events are collected. If the user exits the app before deciding whether or not to consent to the collection of information, the app install event is not collected and is retried the next time the app is launched.
You can set a longer delay for collecting installation events with iOS Tracking Authorize Timeout Seconds in Configure SDK. The default setting for iOS Tracking Authorize Timeout Seconds is 300 seconds. You can set it up to 3600 seconds (1 hour).
注意
请确保为延迟收集安装事件预留足够时间。在用户通过 ATT 弹窗允许追踪之前,如果延迟时间到期,SDK 将会收集不包含 IDFA 的安装事件。
提示
此功能并非必需功能,请在设置前确认需求。
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.
FAirbridge::StartTracking();
提示
此功能并非必需功能,请在设置前确认需求。
Opt-Out is a policy that uses user information before the user can opt out.
After setting Auto Start Tracking Enabled to true in Configure SDK, call the StopTracking function at a point when events cannot be collected. Stop collecting events from the time the StopTracking function is called.
FAirbridge::StopTracking();
提示
此功能并非必需功能,请在设置前确认需求。
SDK Signature prevents SDK spoofing to ensure that only events that have been verified for accuracy and safety can be used to measure ad performance.
SDK signature settings require SDK signature security information. SDK signature security information includes a secret ID and secret. You can find the required SDK signature security information in the Airbridge dashboard. For more information about SDK signature security information, see the Airbridge guide.
Enter the SDK Signature Secret ID from Configure SDK.
Enter the SDK Signature Secret from Configure SDK.
The SDK signature security information required to set up the SDK signature is listed below.
SDK Signature Secret ID: Secret ID. You can check it in Airbridge dashboard [Rule Management]>[Ad Fraud Verification Rule]>[SDK Signature]>[SDK Signature Security Information].
SDK Signature Secret: Secret. You can check it in Airbridge dashboard [Rule Management]> [Ad Fraud Verification Rules]> [SDK Signature]> [SDK Signature Security Information].
By setting up a deep link, you can send users who click on an ad with a tracking link to a specific page in your app of their choice. You can also see the performance of the deep link in Airbridge based on the information collected by the tracking link.
Airbridge automatically selects and utilizes the best Airbridge Deeplink for the environment, based on the Scheme Deeplink used for the user's movement, while creating the tracking link.
Airbridge deep link: https://YOUR_APP_NAME.airbridge.io/~~~
Scheme deep link: YOUR_SCHEME://product/12345
With the app installed, when a user opens a tracking link, the app opens with an Airbridge deep link. The Airbridge SDK converts the Airbridge deep link to the scheme deep link set in the tracking link. The converted scheme deep link is passed to the app.
When the app is not installed, it saves the Airbridge deep link when a user opens the tracking link. When the app is installed and launched after going to the app store or website, the Airbridge SDK converts the stored Airbridge deep link to a scheme deep link. The converted scheme deep link is passed to the app.
Set up a deep link. You'll need the information you set up in the Airbridge dashboard and the app page address used as the destination for the user.
First, register your deep link information with Airbridge.
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 schema 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 enter the above information into the Airbridge dashboard.
1. Go 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
, you enter it as demo://
.
3. In the Apple Developer Dashboard, go 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. Go 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
, you must enter it as 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 you register your deep link information with Airbridge, you need to set up deep linking in your app. The development required for deep linking in your app is described below.
Enable your app to launch with an Airbridge deep link.
Collect Airbridge deep links from apps.
Sends the user to an Airbridge deep link.
See below.
Follow the steps below to enable app launch with Airbridge deep links after the user clicks on a tracking link.
Set up the scheme deep link to your app.
In Configure SDK, enter the iOS URI scheme that you entered in the dashboard in field iOS URI Scheme
.
Setting up Universal Link is done automatically through the App Name
value in Configure SDK.
Set up the scheme deep link to your app.
In Configure SDK, enter the Android URI scheme that you entered in the dashboard in field Android URI Scheme
.
Setting up App Links is done automatically through the App Name
value in Configure SDK.
When the Airbridge deeplink is executed, it is converted into a scheme deeplink and passed on to the OnDeeplinkReceived
callback. And if a deeplink that is not an Airbridge deeplink is executed, it is delivered to the callback without conversion.
Utilize the received deeplink to send the user to the set destination.
Click on Content Browser > Add/Import > New C++ Class...
and then specify the Parent Class as Game Mode Base
to create a Game Mode Base class.
Proceed with deeplink callback settings 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
});
...
}
Specify the game mode (e.g. ExampleGameModeBase) with the completed deeplink callback settings as the Default GameMode
field value in the Project > Maps & Modes > Default Modes
of the Unreal Editor Project Settings window.
When you click a tracking link with deferred deep linking enabled without the app installed, the Airbridge deep link is saved. When you set up deferred deep linking, the Airbridge SDK acquires the deep link in the following ways
The Airbridge SDK attempts to retrieve a deep link after initializing the SDK when all the following conditions are met. If the app is closed during retrieval, the Airbridge SDK treats it as if there is no stored Airbridge deep link.
The FAirbridge::StartTracking
function is called with the opt-in settings in place. Or, opt-in has not been set.
The ATT tracking response has been determined. Or, the event collection delay time set in the ATT prompt has expired.
Deferred deep links are automatically passed to the onDeeplinkReceived callback, so you don't need to set anything up.
The Airbridge SDK collects certain user actions in your service, depending on your 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.
To send an event, you need to call the Airbridge.TrackEvent function. The Airbridge.TrackEvent function components are required and their types are shown below.
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 |
Below you'll find the definition of each component and the strings you can use.
You can check the standard event categories provided by the Airbridge SDK in AirbridgeCategory. Or, enter the event category you've found in the standard event list.
Custom events can be sent by entering the event name set in the event taxonomy.
Please 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");
注意
Airbridge SDK v4 的 Attribute 与旧版本不同。旧版本的 Attribute 不包含 Action、Label 和 Value。
You can collect additional information of the event through attributes.
Action, Label: Information which can be utilized in Airbridge reports as group-bys are collected.
Value: Information used for sales analysis is collected. Data collected can freely be applied in arithmetic operations.
Semantic Attribute: It is an attribute predefined by Airbridge. The list of semantic attributes provided by Airbridge can be found in the Airbridge guide.
Custom Attributes: Attributes defined by Airbridge users.
You can enter Action, Label, Value, and Semantic Attributes through the semanticAttributes parameter of the FAirbridge::TrackEvent
function, and enter Custom Attributes through the customAttributes parameter.
You can check the list of semantic attributes provided by Airbridge 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
);
注意
Semantic Attribute 和 Custom Attribute 仅支持 JSON 数据类型。
JSON 类型:String、Number、Boolean、Object<String, JSON>、Array<JSON>
Semantic Attribute 和 Custom Attribute 不支持的类型:Struct、Class 等
The standard event categories and semantic attributes provided by the SDK are listed below.
键 | 类型 | 值 |
---|---|---|
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 |
键 | 类型 | 值 |
---|---|---|
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 |
See the example code for each data type 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"))
);
提示
如果未配置其他设置,则将应用默认设置。请查看是否需要其他设置后再继续。
You can add the necessary settings for the in-app events that you send.
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. Use the Session Timeout Seconds
field of Configure SDK to modify this value of up to 604,800 seconds (7 days).
Attention
The Airbridge SDK collects Open events that initiate a new session and Foreground events. It does not collect these events 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 the queue is empty.
If event transmission fails, transmission is attempted again after waiting for 1, 2, 4, ... seconds, depending on the number of times it failed. If the transmission continues to fail, the SDK waits for the set event transmission interval and repeats loading events until successful.
The default transmission interval is 0 seconds. Using the Event Transmit Interval Seconds
field of Configure SDK, you can modify it up to 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). You can adjust these settings using the Event Buffer Count Limit
field and Event Buffer Size Limit In Gibibyte
field of Configure SDK. 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 initialization process of the Airbridge SDK are deleted. By default, the event deletion option is inactive.
By setting the Clear Event Buffer On Initialize Enabled
field of Configure SDK to true, the event deletion option is activated.
The Airbridge SDK supports functions to include device identifiers in all events for transmission.
Function | Description |
---|---|
| Adds additional device identifiers. Up to 10 can be entered. - Key: Maximum 128 characters. It must satisfy the regular expression - Value: Maximum 128 characters. |
| Deletes the specified device identifier from among the device identifiers. |
| Deletes all device identifiers. |
Refer to the example below.
FAirbridge::SetDeviceAlias("string", "string");
FAirbridge::RemoveDeviceAlias("string");
FAirbridge::ClearDeviceAlias();
The main in-app events that Airbridge collects are standard events and custom events. Standard events are events defined by Airbridge. See the example code 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")
)
)
);
A custom event is a newly defined user behavior that does not fit into a standard event to track ad performance specific to your app service. See 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"))
);
Send user information in the event. With this user information, you can better analyze the performance of your ads across web and apps.
The user ID is the user identifier utilized by the service. The user ID must be a unique ID that identifies the user as a single user across web and apps.
Function |
Description |
---|---|
| Set your user ID. |
| Clear the user ID. |
| Enter additional user identifiers. You can enter up to 10. |
| Remove the specified identifier from the additional user identifiers you entered. |
| Clear any additional user identifiers you entered. |
See the example below.
// ID
FAirbridge::SetUserID("testID");
// Alias
FAirbridge::SetUserAlias("ADD_YOUR_KEY", "ADD_YOUR_VALUE");
FAirbridge::RemoveUserAlias("DELETE_THIS_KEY");
FAirbridge::ClearUserAlias();
注意
可能包含敏感的用户信息。发送前请咨询法律顾问。
You can send additional user information by setting user attributes.
Function |
Description |
---|---|
| Enter the user email. It is hashed with SHA256. |
| Clear the user's email. |
| Enter the user's phone number. It is hashed with SHA256. |
| Clear the user's phone. |
| Enter additional user attributes. You can enter up to 100. |
| Delete the specified attribute from the additional user attributes you entered. |
| Clear any additional user attributes you entered. |
See 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();
Setting User Info Hash Enabled to false in Configure SDK will send user emails and phone numbers without hashing them. The default setting is true.
You can initialize user information with the FAirbridge::ClearUser
function.
提示
此功能并非必需功能,请在设置前确认需求。
You can make additional settings for the Unreal SDK.
提示
此功能并非必需功能,请在设置前确认需求。
The deep links received through the FAirbridge::SetOnDeeplinkReceived
method of the Airbridge Unreal 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
});
...
}
If you set Is Handle Airbridge Deeplink Only
to true
, only Airbridge deep links will be delivered through the OnDeeplinkReceived
callback. If you are using deep links from different solutions, you can handle the deep links separately.
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, it calls the FAirbridge::Click
function. When this function is called, it sends a scheme deeplink according to the tracking link settings, or sends it to the app market 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, it calls 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
如果在 Airbridge iOS SDK 1.24.0 及以上版本的 App 中使用追踪链接,将记录 “深度链接页面浏览(Deeplink Pageview)” 目标事件(Target Event)。如果深度链接页面浏览频繁随后深度链接打开(Deeplink Open)发生,可能会影响深度链接打开的绩效。
深度链接页面浏览的的默认归因窗口为 3 天。如果希望更改此归因窗口,请联系您的 CSM。
注意
Airbridge SDK 收集归因结果需要时间,因此不建议将归因结果用于需要实时处理的功能。
You can get attribution results for installation events with the FAirbridge::SetOnAttributionReceived
function.
static void OnReceived(TMap<FString, FString> Attribution) { }
void SomeFunction()
{
FAirbridge::SetOnAttributionReceived(OnReceived);
}
Depending on whether the attribution result exists, a value is passed as shown below.
If the attribution result exists, a dictionary including the values below will be passed as a 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 delivered as a callback within 1 minute after SDK initialization. If the app is closed before the attribution result is delivered, the previous attribution results will be delivered as a 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 as a callback. For this data to be delivered, 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 an app is launched with a deep link, regardless of the service that generated the deep link. If you find that you are collecting too many deep link events, you can set Track Airbridge Link Only to true in Configure SDK to collect only airbridge deep links.
The Airbridge SDK collects Open and Foreground events that start a new session. It does not collect these events while the session is persisted.
Setting Track In Session Life Cycle Event Enabled to true in Configure SDK allows you to collect Open and Foreground events while the session is persisted.
Any foreground events collected are logged as running (Open) events.
To comply with the Digital Markets Act (DMA), you must pass user response information (User Consent) to Airbridge. For more information about the DMA and who it applies to, please see the Airbridge guide.
If you are in the European Economic Area (EEA), you must always pass information to Airbridge about whether the user is in the European Economic Area and the user's response.
1. Check the region of the user who launched the app. If the user launched the app from the EEA (eea=1), check to see if you already have collected user response information. If you have collected user response information, then proceed to step 3.
If the user launched the app from outside the EEA, then you don't need to collect user response information.
Translated with www.DeepL.com/Translator (free version)
提示
Airbridge 无法提供有关存储用户同意信息或实现同意弹窗的指导。请咨询法律顾问。
2. If you don't have any user response information collected, collect user response information from prompts, etc. The information you need to collect in this step is adPersonalization, adUserData
.
注意
从 2024-03-06 起,必须对 EEA 的现有用户和新用户至少收集一次同意信息。
必须共享给 Airbridge 的用户同意信息如下。eea
值不是用户的直接响应,也不是 Airbridge 自动收集的信息。请根据用户所在地确定 eea
值并将其共享给 Airbridge。
Airbridge 字段 |
Google 字段 |
说明 |
---|---|---|
<string> |
| 表示用户是否在 EEA,或 DMA 适用地区。该值不是用户的直接响应,也不是 Airbridge 自动收集的信息。请根据用户所在地确定 不处理除 - - |
<string> |
| 对于收集信息以提供个性化广告(Personalized Ads) 的用户同意情况。不处理除 - - |
<string> |
| 对于向 Google 发送用于广告目的用户数据的同意情况。不处理除 - - |
3. Set Auto Start Tracking Enabled to false in Configure SDK.
4. Initialize the Airbridge SDK and pass user response information to Airbridge before collecting user information.
注意
必须为
eea
、adPersonalization
和adUserData
使用相同的名称。请根据收集的信息正确输入
0
或1
。
// 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();
You can serve deferred deep links in Meta Ads in the following ways The Airbridge SDK collects meta deferred app links first. If there is no meta deferred app link, it collects the Airbridge deferred deep link.
SKAdNetwork campaigns in Meta Ads do not support meta deferred app links.
1. Install the Facebook SDK. Refer to the Meta Ads Guide (iOS).
2. in Configure SDK, set Facebook Deferred App Link Enabled to true.
注意
如果 Airbridge SDK 在初始化后未立即启用,则可能无法收集安装(Install)、打开(Open)、深度链接(Deeplink)事件。
Initializing the Airbridge SDK enables all features. You can initialize the Airbridge SDK with all features disabled by setting SDK Enabled to false in Configure SDK.
Alternatively, you can check whether the Airbridge SDK is enabled and enable or disable all features in the following ways
FAirbridge::IsSDKEnabled();
FAirbridge::EnableSDK();
FAirbridge::DisableSDK();
This setting is required for Meta Install Referrer collection. During the SDK initialization step, pass your Facebook App ID to Meta Install Referrer (Facebook App ID) in Configure SDK.
Once set up, you'll need to enter the decryption key into the Airbridge dashboard to view the decrypted meta-install referrer. For instructions on how to enter the decryption key, see the Airbridge guide on .
Airbridge sends a silent push to users whose app events have been tracked at least once in the last six months, every day between 0:00 and 1:00 KST, to check for app uninstalls. App deletion events can be viewed in Airbridge reports and by extracting the original data.
For detailed setup instructions and explanations, see the Airbridge guide.
Some third-party solutions require SDK setup to integrate. We recommend that you complete the necessary setup for your third-party solution before collecting data with the Airbridge SDK.
Refer to the guides below for the settings required for each third-party solution integration.
The logs provided by the Airbridge SDK are organized into Debug, Info, Warning, Error, and Fault levels. The Debug level is the least critical log, and the Fault level is the most critical log.
The Airbridge SDK provides logs above the Warning, Error, and Fault levels by default. You can view logs from that log level up to the Fault level by entering a log level in Log Level in Configure SDK.
Was this page helpful?
FAirbridge::StartTracking();
FAirbridge::StopTracking();
keytool -list -v -keystore YOUR_KEYSTORE.keystore
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
...
#include "AirbridgeUnreal.h"
void AExampleGameModeBase::BeginPlay()
{
...
FAirbridge::SetOnDeeplinkReceived([](const FString& Url)
{
// show proper content using url
});
...
}
...
#include "AirbridgeUnreal.h"
void AExampleGameModeBase::BeginPlay()
{
...
FAirbridge::SetOnDeeplinkReceived([](const FString& Url)
{
// show proper content using url
});
...
}
static void TrackEvent(
const FString& Category,
const UAirbridgeMap* SemanticAttributes = nullptr,
const UAirbridgeMap* CustomAttributes = nullptr
);
// 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");
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
);
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"))
);
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"))
);
FAirbridge::SetDeviceAlias("string", "string");
FAirbridge::RemoveDeviceAlias("string");
FAirbridge::ClearDeviceAlias();
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")
)
)
);
// ID
FAirbridge::SetUserID("testID");
// Alias
FAirbridge::SetUserAlias("ADD_YOUR_KEY", "ADD_YOUR_VALUE");
FAirbridge::RemoveUserAlias("DELETE_THIS_KEY");
FAirbridge::ClearUserAlias();
// 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();
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
}
);
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
}
);
static void OnReceived(TMap<FString, FString> Attribution) { }
void SomeFunction()
{
FAirbridge::SetOnAttributionReceived(OnReceived);
}
{
"attributedChannel": "unattributed"
}
#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
}
// 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();
FAirbridge::IsSDKEnabled();
FAirbridge::EnableSDK();
FAirbridge::DisableSDK();