Tracking
Track customers and events using the MAUI SDK
You can track events in Engagement to learn more about your app’s usage patterns and to segment your customers by their interactions.
By default, the SDK tracks certain events automatically, including:
- Installation (after app installation and after invoking anonymize)
- User session start and end
- Banner event for showing an in-app message or content block
Additionally, you can track any custom event relevant to your business.
Also see Mobile SDK tracking FAQ at Bloomreach Support Help Center.
Events
Track event
Use the TrackEvent
method with an Event
object as an argument to track any custom event type relevant to your business.
You can use any name for a custom event type. We recommended using a descriptive and human-readable name.
Refer to the Custom events documentation for an overview of commonly used custom events.
Arguments
Name | Type | Description |
---|---|---|
event | Event | Event object. |
Event
Name | Type | Description |
---|---|---|
Name (required) | String | Name of the event type, for example screen_view . |
Attributes | Dictionary<string, object?> | Dictionary of event properties. |
Examples
Imagine you want to track which screens a customer views. You can create a custom event screen_view
for this.
First, create an Event
with the name and a dictionary of properties you want to track with this event. In our example, you want to track the name of the screen, so you include a property screen_name
along with any other relevant properties:
var event = new Event("screen_view") { ["screen_name"] = "dashboard", ["other_property"] = 123.45 };
Pass the event object to TrackEvent
as follows:
Bloomreach.BloomreachSDK.TrackEvent(event);
The second example below shows how you can use a nested structure for complex properties if needed:
var properties = new Dictionary<string, object>
{
["purchase_status"] = "success",
["product_list"] = new object[] {
new Dictionary<string, object>
{
["product_id"] = "abc123",
["quantity"] = 2
},
new Dictionary<string, object>
{
["product_id"] = "abc456",
["quantity"] = 1
},
},
["total_price"] = 7.99
};
var event = new Event("purchase");
event.Attributes = properties;
Bloomreach.BloomreachSDK.TrackEvent(event);
Customers
Identifying your customers allows you to track them across devices and platforms, improving the quality of your customer data.
Without identification, events are tracked for an anonymous customer, only identified by a cookie. Once the customer is identified by a hard ID, these events will be transferred to a newly identified customer.
Keep in mind that, while an app user and a customer record can be related by a soft or hard ID, they are separate entities, each with their own lifecycle. Take a moment to consider how their lifecycles relate and when to use identify and anonymize.
Identify
Use the IdentifyCustomer
method with a Customer
object as an argument to identify a customer using their unique hard ID.
The default hard ID is registered
and its value is typically the customer's email address. However, your Engagement project may define a different hard ID.
Optionally, you can track additional customer properties such as first and last names, age, etc.
Arguments
Name | Type | Description |
---|---|---|
customer (required) | Customer | Customer object. |
Customer
Name | Type | Description |
---|---|---|
CustomerIds (required) | Dictionary<String, String> | Dictionary of customer unique identifiers. Only identifiers defined in the Engagement project are accepted. |
Properties | Dictionary<string, object?> | Dictionary of customer properties. |
Examples
First, create a Customer
object containing at least the customer's hard ID and, optionally, a dictionary with additional customer properties:
var customer = new Customer("[email protected]").
WithProperties(new Dictionary<string, object>
{
["first_name"] = "Jane",
["last_name"] = "Doe",
["age"] = 32
});
Pass the customer object to identifyCustomer()
:
Bloomreach.BloomreachSDK.IdentifyCustomer(customer);
If you only want to update the customer ID without any additional properties, you can leave out those out:
var customer = new Customer("[email protected]");
Bloomreach.BloomreachSDK.IdentifyCustomer(customer);
Anonymize
Use the anonymize()
method to delete all information stored locally and reset the current SDK state. A typical use case for this is when the user signs out of the app.
Invoking this method will cause the SDK to:
- Remove the push notification token for the current customer from local device storage and the customer profile in Engagement.
- Clear local repositories and caches, excluding tracked events.
- Track a new session start if
automaticSessionTracking
is enabled. - Create a new customer record in Engagement (a new
cookie
soft ID is generated). - Assign the previous push notification token to the new customer record.
- Preload in-app messages, in-app content blocks, and App Inbox for the new customer.
- Track a new
installation
event for the new customer.
You can also use the anonymize
method to switch to a different Engagement project. The SDK will then track events to a new customer record in the new project, similar to the first app session after installation on a new device.
Examples
Bloomreach.BloomreachSDK.Anonymize();
Switch to a different project:
Bloomreach.BloomreachSDK.Anonymize(
new Project(
"YOUR_PROJECT_TOKEN",
"YOUR_API_KEY",
"https://api.exponea.com"
)
);
Sessions
The SDK tracks sessions automatically by default, producing two events: session_start
and session_end
.
The session represents the actual time spent in the app. It starts when the application is launched and ends when it goes into the background. If the user returns to the app before the session times out, the application will continue the current session.
The default session timeout is 20 seconds. Set SessionTimeout
in the SDK configuration to specify a different timeout.
Track session manually
To disable automatic session tracking, set AutomaticSessionTracking
to false
in the SDK configuration.
Use the TrackSessionStart
and TrackSessionEnd
methods to track sessions manually.
Examples
Bloomreach.BloomreachSDK.TrackSessionStart()
Bloomreach.BloomreachSDK.TrackSessionEnd()
Payments
The SDK provides a convenience method TrackPaymentEvent
to help you track information about a payment for a product or service within the application.
Track payment event
Use the TrackPaymentEvent
method to track payments. To support multiple platforms and use-cases, the SDK defines a map of properties that contains basic information about the purchase.
Arguments
Name | Type | Description |
---|---|---|
payment (required) | Payment | Map of payment properties. |
timestamp | double? | Unix timestamp (in seconds) specifying when the payment took place. |
Payment
Name | Type | Description |
---|---|---|
value (required) | double | The total purchase value. |
currency (required) | string | The currency in which the purchase was made. |
system | string? | |
productId | string? | |
productTitle | string? | |
receipt | string? |
Examples
Bloomreach.BloomreachSDK.TrackPaymentEvent(new Payment(
12.34,
"EUR",
"CardHolder",
"abcd1234",
"Best product",
"INV_12345"
));
Default properties
You can configure default properties to be tracked with every event. Note that the value of a default property will be overwritten if the tracking event has a property with the same key.
var config = new Configuration("YOUR_PROJECT_TOKEN", "YOUR_API_KEY", "YOUR_API_BASE_URL")
{
DefaultProperties = new Dictionary<string, object>
{
{ "thisIsADefaultStringProperty", "This is a default string value" },
{ "thisIsADefaultIntProperty", 1 },
{ "thisIsADefaultDoubleProperty", 12.53623 }
}
};
Bloomreach.BloomreachSDK.Configure(config);
After initializing the SDK, you can change the default properties using the method SetDefaultProperties
.
Bloomreach.BloomreachSDK.SetDefaultProperties(new Dictionary<string, object>()
{
{ "thisIsADefaultStringProperty", "This is a default string value" },
{ "thisIsADefaultIntProperty", 1},
{ "thisIsADefaultDoubleProperty", 12.53623}
});
Updated 2 months ago