Usage examples
- Library initialization with the extended configuration
- Sending statistics to an additional API key
- Tracking app crashes
- Manually monitoring app crashes
- Using the library to send device location
- Setting location manually
- Sending a custom event
- Sending a custom event with nested parameters
- Sending a custom error message
- Sending ProfileId
- Sending profile attributes
- Sending E-commerce events
- Sending Revenue
- Sending AdRevenue manually
- Setting the session timeout duration
- Setting the app version
- Determining the library's version
- Tracking installation sources
- Tracking app opens using deeplinks
- Requesting a deferred deeplink
- Requesting deferred deeplink parameters
- Tracking new users
- Disabling and enabling sending statistics
- Getting AppMetrica SDK IDs
- Delivering the device type
Library initialization with the extended configuration
To initialize the library with an extended startup configuration, create an instance of the AppMetricaConfig
class with appropriate settings and activate the library using the AppMetrica.Activate([NotNull] AppMetricaConfig config)
method. Using an extended configuration, you can enable or disable logging, set session timeout, pass parameters for tracking pre-installed apps, and so on.
Extended configuration settings take effect immediately upon library initialization.
AppMetrica.Activate(new AppMetricaConfig(API_KEY) {
Logs = true,
});
To configure the library while the application is running, use the AppMetrica
class methods.
Sending statistics to an additional API key
Sending data to an additional API key allows you to collect own statistics for these API keys. You can use this to control access to information for other users. For example, to provide access to statistics for analysts you can duplicate sending marketing data for the additional API key. Thus they will only have access to the information they need.
To send data to an additional API key, you must use reporters. Just like for the main API key, you can set up an extended startup configuration for a reporter, send events, profile information, and data about in-app purchases. The reporter can work without the AppMetrica SDK initialization.
Step 1. (Optional) Initialize a reporter with an extended configuration
To initialize a reporter with an extended configuration, create an instance of the ReporterConfig
class with appropriate settings and activate the reporter using the AppMetrica.ActivateReporter([NotNull] ReporterConfig config)
method. This configuration is used for a reporter with the specified API key. You can set up your own configuration for each additional API key.
Alert
The reporter with an extended configuration should be initialized before the first call to the reporter. Otherwise, the reporter will be initialized without a configuration.
AppMetrica.ActivateReporter(new ReporterConfig(ANOTHER_API_KEY) {
Logs = true,
});
Step 2. Configure sending data using a reporter
To send data using a reporter, get an object that implements the IReporter
interface with the AppMetrica.GetReporter([NotNull] string apiKey)
method and use the interface methods for sending reports. If the reporter was not initialized with an extended configuration, calling this method will initialize the reporter for the specified API key.
Example of sending an event:
AppMetrica.GetReporter(ANOTHER_API_KEY).ReportEvent("Updates installed");
For correct tracking, manually configure the reporters to send events about the start and the pause of the session for each reporter. To do this, use the ResumeSession()
and PauseSession()
methods of the IReporter
interface:
AppMetrica.GetReporter(ANOTHER_API_KEY).ResumeSession();
AppMetrica.GetReporter(ANOTHER_API_KEY).PauseSession();
Tracking app crashes
Reports on app crashes are sent by default.
To disable automatic monitoring, initialize the library with the configuration in which sending crashes is disabled. To do this, pass false
to the CrashReporting
property when creating an extended library configuration.
AppMetrica.Activate(new AppMetricaConfig(API_KEY) {
CrashReporting = false,
});
If automatic monitoring is disabled, you can manually submit information about crashes.
Manually monitoring app crashes
Reports on app crashes are sent by default. To prevent event duplication when sending crashes manually, disable the automatic monitoring of app crashes.
To send crash data manually, use the AppMetrica.ReportUnhandledException([NotNull] Exception exception)
method:
try
{
...
}
catch (Exception ex)
{
AppMetrica.ReportUnhandledException(ex);
}
Using the library to send device location
Note
Sending device location is disabled by default.
To enable sending it, initialize the library with the configuration where sending device location data is enabled. To do this, pass true
to the LocationTracking
property when creating an extended library configuration.
AppMetrica.Activate(new AppMetricaConfig(API_KEY) {
LocationTracking = true,
});
To enable sending at app runtime, use the AppMetrica.SetLocationTracking(bool enabled)
method:
AppMetrica.SetLocationTracking(true);
For more precise locations, add one of the following permissions to the AndroidManifest.xml file:
- android.permission.ACCESS_COARSE_LOCATION — For approximate determination.
- android.permission.ACCESS_FINE_LOCATION — For accurate determination.
Setting location manually
Before sending your own data about the device location, make sure that report sending is enabled.
The library determines the device location on its own. To send your own data about the device location, pass an instance of the Location
class to the AppMetrica.SetLocation([CanBeNull] Location? location)
method:
AppMetrica.SetLocation(new Location {
Latitude = ... ,
Longitude = ... ,
});
To send your own data about the device location using the startup configuration, pass an instance of the Location
class to the Location
property when creating an extended library configuration.
AppMetrica.Activate(new AppMetricaConfig(API_KEY) {
Location = new Location {
Latitude = ... ,
Longitude = ... ,
},
});
To resume detecting the location with the library, call the AppMetrica.SetLocation([CanBeNull] Location? location)
method with a null
and configure the sending of device location data.
AppMetrica.SetLocation(null);
Sending a custom event
To send a custom event without nested parameters, pass a short name or description of the event to the AppMetrica.ReportEvent([NotNull] string eventName)
method:
AppMetrica.ReportEvent("Updates installed");
Sending a custom event with nested parameters
With the AppMetrica SDK, you can send custom events with nested parameters in JSON string format.
To pass nested event parameters in JSON format, use the AppMetrica.ReportEvent([NotNull] string eventName, [CanBeNull] string jsonValue)
method:
string eventParameters = "{\"name\":\"Alice\", \"age\":\"18\"}";
AppMetrica.ReportEvent("New person", eventParameters);
The AppMetrica web interface displays up to five nesting levels for events. So if an event has six or more levels, only the top five are shown in the report. You can use the Reporting API to export up to ten levels.
For more information about events, see Events.
Sending a custom error message
To send your own error message, use the following methods:
AppMetrica.ReportError([NotNull] string message, [NotNull] Exception error);
AppMetrica.ReportError([NotNull] string identifier, [CanBeNull] string message = null, [CanBeNull] Exception error = null);
Example with groupIdentifier
If you send errors using methods with groupIdentifier, they are grouped by ID.
try
{
...
}
catch (Exception ex)
{
AppMetrica.ReportError("Your ID", "Error while parsing some integer number", ex);
}
Don't use variable values as grouping IDs. Otherwise, the number of groups increases, and it becomes difficult to analyze them.
Example with message
If errors are sent using the AppMetrica.ReportError([NotNull] string message, [NotNull] Exception error)
method, they are grouped by stack trace.
try
{
...
}
catch (Exception ex)
{
AppMetrica.ReportError("Error while parsing some integer number", ex);
}
Sending ProfileId
If you know the user profile ID before initializing the AppMetrica SDK, pass it before initialization (SetUserProfileID
) or during initialization with an extended configuration (UserProfileID
).
Otherwise, a user profile is created with the ID appmetrica_device_id
.
Warning
AppMetrica doesn't display predefined attributes
in the web interface if ProfieId sending isn't configured.
You can update ProfileId
at any time by calling setUserProfileID
:
AppMetrica.SetUserProfileID("id");
Sending profile attributes
To send profile attributes, pass the necessary attributes to an instance of the UserProfile
class and send this instance using the AppMetrica.ReportUserProfile([NotNull] UserProfile profile)
method. To create profile attributes, use methods of the Attribute
class.
using Io.AppMetrica;
using Io.AppMetrica.Profile;
...
// Creating the UserProfile instance.
UserProfile userProfile = new UserProfile()
// Updating predefined attributes.
.Apply(Attribute.Name().WithValue("John"))
.Apply(Attribute.Gender().WithValue(GenderAttribute.Gender.Male))
.Apply(Attribute.BirthDate().WithAge(24))
.Apply(Attribute.NotificationsEnabled().WithValue(false))
// Updating custom attributes.
.Apply(Attribute.CustomString("string_attribute").WithValue("string"))
.Apply(Attribute.CustomBoolean("boolean_attribute").WithValue(true))
.Apply(Attribute.CustomNumber("number_attribute").WithValue(55))
.Apply(Attribute.CustomCounter("counter_attribute").WithDelta(1));
// Setting the ProfileID using the method of the AppMetrica class.
AppMetrica.SetUserProfileID("id");
// Sending the UserProfile instance.
AppMetrica.ReportUserProfile(userProfile);
Sending E-commerce events
AppMetrica doesn't let you segment E-commerce events into test and non-test events. If you use the main API key for debugging purchases, the test events are included in general statistics. Therefore, to debug E-commerce event sending, use a reporter to send statistics to the additional API key.
Step 1. Configure sending E-commerce events to the test API key
For different user actions, there are appropriate types of E-commerce events. To create a specific event type, use the appropriate ECommerceEvent
class method.
The examples below show how to send specific types of events:
Opening a page
using Io.AppMetrica;
using Io.AppMetrica.Ecommerce;
...
IDictionary<string, string> payload = new Dictionary<string, string>();
payload.Add("configuration", "landscape");
payload.Add("full_screen", "true");
// Creating a screen object.
ECommerceScreen screen = new ECommerceScreen();
screen.Name = "ProductCardActivity";
screen.CategoriesPath = new string[] { "Promos", "Hot Deal" };
screen.SearchQuery = "danissimo maple syrup";
screen.Payload = payload;
ECommerceEvent showScreenEvent = ECommerceEvent.ShowScreenEvent(screen);
// Sending an E-commerce event.
AppMetrica.GetReporter("Testing API key").ReportECommerce(showScreenEvent);
Viewing a product card
using Io.AppMetrica;
using Io.AppMetrica.Ecommerce;
...
IDictionary<string, string> payload = new Dictionary<string, string>();
payload.Add("configuration", "landscape");
payload.Add("full_screen", "true");
// Creating a screen object.
ECommerceScreen screen = new ECommerceScreen();
screen.Name = "ProductCardActivity";
screen.CategoriesPath = new string[] { "Promos", "Hot Deal" };
screen.SearchQuery = "danissimo maple syrup";
screen.Payload = payload;
// Creating an actualPrice object.
ECommercePrice actualPrice = new ECommercePrice(new ECommerceAmount(4.53, "USD"));
actualPrice.InternalComponents = new ECommerceAmount[] { // Optional.
new ECommerceAmount(30_570_000, "wood"),
new ECommerceAmount(26.89, "iron"),
new ECommerceAmount(new decimal(5.1), "gold")
};
// Creating an originalPrice object.
ECommercePrice originalPrice = new ECommercePrice(new ECommerceAmount(5.78, "USD"));
originalPrice.InternalComponents = new ECommerceAmount[] { // Optional.
new ECommerceAmount(30_590_000, "wood"),
new ECommerceAmount(26.92, "iron"),
new ECommerceAmount(new decimal(5.5), "gold")
};
// Creating a product object.
ECommerceProduct product = new ECommerceProduct("779213");
product.ActualPrice = actualPrice; // Optional.
product.Promocodes = new string[] { "BT79IYX", "UT5412EP" }; // Optional.
product.Payload = payload; // Optional.
product.OriginalPrice = originalPrice; // Optional.
product.Name = "Danissimo curd product 5.9%, 130 g"; // Optional.
product.CategoriesPath = new string[] { "Groceries", "Dairy", "Yogurts" }; // Optional.
ECommerceEvent showProductCardEvent = ECommerceEvent.ShowProductCardEvent(product, screen);
// Sending an E-commerce event.
AppMetrica.GetReporter("Testing API key").ReportECommerce(showProductCardEvent);
Viewing a product page
using Io.AppMetrica;
using Io.AppMetrica.Ecommerce;
...
IDictionary<string, string> payload = new Dictionary<string, string>();
payload.Add("configuration", "landscape");
payload.Add("full_screen", "true");
// Creating a screen object.
ECommerceScreen screen = new ECommerceScreen();
screen.Name = "ProductCardActivity";
screen.CategoriesPath = new string[] { "Promos", "Hot Deal" };
screen.SearchQuery = "danissimo maple syrup";
screen.Payload = payload;
// Creating an actualPrice object.
ECommercePrice actualPrice = new ECommercePrice(new ECommerceAmount(4.53, "USD"));
actualPrice.InternalComponents = new ECommerceAmount[] { // Optional.
new ECommerceAmount(30_570_000, "wood"),
new ECommerceAmount(26.89, "iron"),
new ECommerceAmount(new decimal(5.1), "gold")
};
// Creating an originalPrice object.
ECommercePrice originalPrice = new ECommercePrice(new ECommerceAmount(5.78, "USD"));
originalPrice.InternalComponents = new ECommerceAmount[] { // Optional.
new ECommerceAmount(30_590_000, "wood"),
new ECommerceAmount(26.92, "iron"),
new ECommerceAmount(new decimal(5.5), "gold")
};
// Creating a product object.
ECommerceProduct product = new ECommerceProduct("779213");
product.ActualPrice = actualPrice; // Optional.
product.Promocodes = new string[] { "BT79IYX", "UT5412EP" }; // Optional.
product.Payload = payload; // Optional.
product.OriginalPrice = originalPrice; // Optional.
product.Name = "Danissimo curd product 5.9%, 130 g"; // Optional.
product.CategoriesPath = new string[] { "Groceries", "Dairy", "Yogurts" }; // Optional.
ECommerceEvent showProductCardEvent = ECommerceEvent.ShowProductCardEvent(product, screen);
// Sending an E-commerce event.
AppMetrica.GetReporter("Testing API key").ReportECommerce(showProductCardEvent);
Adding/removing an item to/from the cart
using Io.AppMetrica;
using Io.AppMetrica.Ecommerce;
...
IDictionary<string, string> payload = new Dictionary<string, string>();
payload.Add("configuration", "landscape");
payload.Add("full_screen", "true");
// Creating a screen object.
ECommerceScreen screen = new ECommerceScreen();
screen.Name = "ProductCardActivity";
screen.CategoriesPath = new string[] { "Promos", "Hot Deal" };
screen.SearchQuery = "danissimo maple syrup";
screen.Payload = payload;
// Creating an actualPrice object.
ECommercePrice actualPrice = new ECommercePrice(new ECommerceAmount(4.53, "USD"));
actualPrice.InternalComponents = new ECommerceAmount[] { // Optional.
new ECommerceAmount(30_570_000, "wood"),
new ECommerceAmount(26.89, "iron"),
new ECommerceAmount(new decimal(5.1), "gold")
};
// Creating an originalPrice object.
ECommercePrice originalPrice = new ECommercePrice(new ECommerceAmount(5.78, "USD"));
originalPrice.InternalComponents = new ECommerceAmount[] { // Optional.
new ECommerceAmount(30_590_000, "wood"),
new ECommerceAmount(26.92, "iron"),
new ECommerceAmount(new decimal(5.5), "gold")
};
// Creating a product object.
ECommerceProduct product = new ECommerceProduct("779213");
product.ActualPrice = actualPrice; // Optional.
product.Promocodes = new string[] { "BT79IYX", "UT5412EP" }; // Optional.
product.Payload = payload; // Optional.
product.OriginalPrice = originalPrice; // Optional.
product.Name = "Danissimo curd product 5.9%, 130 g"; // Optional.
product.CategoriesPath = new string[] { "Groceries", "Dairy", "Yogurts" }; // Optional.
// Creating a referrer object.
ECommerceReferrer referrer = new ECommerceReferrer();
referrer.Type = "button"; // Optional.
referrer.Identifier = "76890"; // Optional.
referrer.Screen = screen; // Optional.
// Creating a cartItem object.
ECommerceCartItem addedItems1 = new ECommerceCartItem(product, actualPrice, 1.0);
addedItems1.Referrer = referrer; // Optional.
ECommerceEvent addCartItemEvent = ECommerceEvent.AddCartItemEvent(addedItems1);
// Sending an E-commerce event.
AppMetrica.GetReporter("Testing API key").ReportECommerce(addCartItemEvent);
ECommerceEvent removeCartItemEvent = ECommerceEvent.RemoveCartItemEvent(addedItems1);
// Sending an E-commerce event.
AppMetrica.GetReporter("Testing API key").ReportECommerce(removeCartItemEvent);
Starting and completing a purchase
using Io.AppMetrica;
using Io.AppMetrica.Ecommerce;
...
IDictionary<string, string> payload = new Dictionary<string, string>();
payload.Add("configuration", "landscape");
payload.Add("full_screen", "true");
// Creating a screen object.
ECommerceScreen screen = new ECommerceScreen();
screen.Name = "ProductCardActivity";
screen.CategoriesPath = new string[] { "Promos", "Hot Deal" };
screen.SearchQuery = "danissimo maple syrup";
screen.Payload = payload;
// Creating an actualPrice object.
ECommercePrice actualPrice = new ECommercePrice(new ECommerceAmount(4.53, "USD"));
actualPrice.InternalComponents = new ECommerceAmount[] { // Optional.
new ECommerceAmount(30_570_000, "wood"),
new ECommerceAmount(26.89, "iron"),
new ECommerceAmount(new decimal(5.1), "gold")
};
// Creating an originalPrice object.
ECommercePrice originalPrice = new ECommercePrice(new ECommerceAmount(5.78, "USD"));
originalPrice.InternalComponents = new ECommerceAmount[] { // Optional.
new ECommerceAmount(30_590_000, "wood"),
new ECommerceAmount(26.92, "iron"),
new ECommerceAmount(new decimal(5.5), "gold")
};
// Creating a product object.
ECommerceProduct product = new ECommerceProduct("779213");
product.ActualPrice = actualPrice; // Optional.
product.Promocodes = new string[] { "BT79IYX", "UT5412EP" }; // Optional.
product.Payload = payload; // Optional.
product.OriginalPrice = originalPrice; // Optional.
product.Name = "Danissimo curd product 5.9%, 130 g"; // Optional.
product.CategoriesPath = new string[] { "Groceries", "Dairy", "Yogurts" }; // Optional.
// Creating a referrer object.
ECommerceReferrer referrer = new ECommerceReferrer();
referrer.Type = "button"; // Optional.
referrer.Identifier = "76890"; // Optional.
referrer.Screen = screen; // Optional.
// Creating a cartItem object.
ECommerceCartItem addedItems1 = new ECommerceCartItem(product, actualPrice, 1.0);
addedItems1.Referrer = referrer; // Optional.
// Creating an order object.
ECommerceOrder order = new ECommerceOrder("88528768", new ECommerceCartItem[] { addedItems1 });
order.Payload = payload; // Optional.
ECommerceEvent beginCheckoutEvent = ECommerceEvent.BeginCheckoutEvent(order);
// Sending an E-commerce event.
AppMetrica.GetReporter("Testing API key").ReportECommerce(beginCheckoutEvent);
ECommerceEvent purchaseEvent = ECommerceEvent.PurchaseEvent(order);
// Sending an E-commerce event.
AppMetrica.GetReporter("Testing API key").ReportECommerce(purchaseEvent);
Step 2. Check the test app report
Make in-app test purchases. After a while, check the Purchase analysis report in the AppMetrica interface. Make sure that the report shows E-commerce events.
For more information about the report, see Purchase analysis.
Step 3. Configure sending events to the main API key
After successful testing, configure sending E-commerce events to the main API key.
To send the ECommerceEvent
object to the main API key, use the AppMetrica.ReportECommerce([NotNull] ECommerceEvent ecommerce)
method.
...
// Sending an E-commerce event.
AppMetrica.ReportECommerce(ecommerceEvent)
Sending Revenue
Note
Local validation with a public key is used to validate purchases on Android. To enable validation, create a public key and specify it in the settings. For more information, see Sending In-App purchases on Android.
Step 1. Configure sending Revenue to the test API key
AppMetrica doesn't let you segment between test and non-test revenue. If you use the main API key for debugging purchases, the test purchases are included in general statistics. Therefore, to debug Revenue sending, use a reporter to send statistics to the additional API key.
This section outlines the steps for sending Revenue to the additional API key:
With validation
To validate purchases, configure sending a Revenue.Receipt
instance along with Revenue
:
- Create a
Revenue.Receipt
instance with information about the purchase and signature. Use it in theRevenue.Receipt
property when creating an instance ofRevenue
. - Create a
Revenue
instance. - Send the
Revenue
instance to the test API key using theIReporter
. For more information about reporters, see Sending statistics to an additional API key.
The example below is based on the use of Unity IAP.
using Io.AppMetrica;
...
// Declaration of the Receipt structure for getting information about the IAP.
[System.Serializable]
public struct Receipt {
public string Store;
public string TransactionID;
public string Payload;
}
// Additional information about the IAP for Android.
[System.Serializable]
public struct PayloadAndroid {
public string Json;
public string Signature;
}
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args) {
var product = args.purchasedProduct;
if (String.Equals(product.definition.id, kProductIDConsumable, StringComparison.Ordinal)) {
string currency = product.metadata.isoCurrencyCode;
decimal price = product.metadata.localizedPrice;
// Creating an instance of the Revenue class.
Revenue revenue = new Revenue(price, currency);
if (product.receipt != null) {
// Creating an instance of the Revenue.Receipt class.
Revenue.Receipt yaReceipt = new Revenue.Receipt();
Receipt receipt = JsonUtility.FromJson<Receipt>(product.receipt);
#if UNITY_ANDROID
PayloadAndroid payloadAndroid = JsonUtility.FromJson<PayloadAndroid>(receipt.Payload);
yaReceipt.Signature = payloadAndroid.Signature;
yaReceipt.Data = payloadAndroid.Json;
#elif UNITY_IPHONE
yaReceipt.TransactionID = receipt.TransactionID;
yaReceipt.Data = receipt.Payload;
#endif
revenue.ReceiptValue = yaReceipt;
}
// Sending data to the AppMetrica server.
AppMetrica.GetReporter("Testing API key").ReportRevenue(revenue);
}
return PurchaseProcessingResult.Complete;
}
Without validation
To send information about a purchase without validation:
-
Create a
Revenue
instance. -
(Optional) To group purchases by
OrderID
, specify it in theRevenue.Payload
property.Note
If the
OrderID
is not specified, AppMetrica generates the ID automatically. -
Send the
Revenue
instance to the test API key using theIReporter
. For more information about reporters, see Sending statistics to an additional API key.
using Io.AppMetrica;
...
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args) {
var product = args.purchasedProduct;
if (String.Equals(product.definition.id, kProductIDConsumable, StringComparison.Ordinal)) {
string currency = product.metadata.isoCurrencyCode;
decimal price = product.metadata.localizedPrice;
// Creating an instance of the Revenue class.
Revenue revenue = new Revenue(price, currency);
revenue.Payload = "{\"OrderID\":\"Identifier\", \"source\":\"Google Play\"}";
revenue.Quantity = 2;
// Sending data to the AppMetrica server.
AppMetrica.GetReporter("Testing API key").ReportRevenue(revenue);
}
return PurchaseProcessingResult.Complete;
}
Step 2. Check the test app report
Check the Revenue report in the AppMetrica report. Make sure that the number of purchases has increased.
For more information about the report, see Revenue.
Step 3. Configure sending Revenue to the main API key
After successful testing, have Revenue
sent to the main API key.
To send the Revenue
instance to the main API key, use the AppMetrica.ReportRevenue([NotNull] Revenue revenue)
method.
...
// Sending the Revenue instance.
AppMetrica.ReportRevenue(revenue);
Sending AdRevenue manually
Use this option to manually set up the transfer of data from an ad monetization service that provides impression-level revenue data.
Create a PluginErrorDetails
class object.
IDictionary<string, string> payload = new Dictionary<string, string>();
payload.Add("payload_key_1", "payload_value_1");
payload.Add("payload_key_2", "payload_value_2");
AdRevenue adRevenue = new AdRevenue(100.100, "USD");
adRevenue.AdNetwork = "ad_network";
adRevenue.AdPlacementId = "ad_placement_id";
adRevenue.AdPlacementName = "ad_placement_name";
adRevenue.AdType = AdType.Banner;
adRevenue.AdUnitId = "ad_unit_id";
adRevenue.AdUnitName = "ad_unit_name";
adRevenue.Precision = "some_precision";
adRevenue.Payload = payload;
Send the AdRevenue
instance using the AppMetrica.ReportAdRevenue([NotNull] AdRevenue adRevenue)
method.
AppMetrica.ReportAdRevenue(adRevenue);
Setting the session timeout duration
By default, the session timeout is 10 seconds. This is the minimum acceptable value of the SessionTimeout
parameter.
To change the timeout duration, pass the value in seconds to the SessionTimeout
property when creating an extended library configuration.
AppMetrica.Activate(new AppMetricaConfig(API_KEY) {
SessionTimeout = 15,
});
Setting the app version
By default, the app version is set in the file build.gradle.
To specify the app version programmatically, pass the app version to the AppVersion
property when creating an extended library configuration.
AppMetrica.Activate(new AppMetricaConfig(API_KEY) {
AppVersion = "1.13.2",
});
where 1.13.2
is the app version.
Determining the library's version
To determine the library version from the application code, use the AppMetrica.GetLibraryVersion()
method.
string libraryVersion = AppMetrica.GetLibraryVersion();
Tracking installation sources
Tracking installation source in AppMetrica SDK is enabled by default.
Tracking app opens using deeplinks
Starting with version 4.0 of the iOS/Android SDK, deeplink tracking works automatically when the app is opened. For more information, see Deeplink tracking.
If you need to track app launches manually, use the ReportAppOpen([NotNull] string deeplink)
method:
AppMetrica.ReportAppOpen(deeplink);
Note
You can add the opening of the app via the deferred deeplink on Android.
Learn more
How do I create a remarketing campaign in AppMetrica?
Requesting a deferred deeplink
To request a deferred deeplink, pass an implementation of the DeferredDeeplink.DeeplinkDelegate
and DeferredDeeplink.ErrorDelegate
delegates to the AppMetrica.RequestDeferredDeeplink()
method. The method returns the deferred deeplink only at the initial application start after obtaining the Google Play Install Referrer.
void DeeplinkDelegate(string deeplink)
{
Debug.Log("deeplink: " + deeplink);
}
void ErrorDelegate(DeferredDeeplink.Error? error, string referrer)
{
Debug.Log("error: " + error + " referrer: " + referrer);
}
...
AppMetrica.RequestDeferredDeeplink(DeeplinkDelegate, ErrorDelegate);
For more information about deferred deeplinks, see Support for deferred deeplinks
Requesting deferred deeplink parameters
To request parameters for a deferred deeplink, pass the methods implementing the DeferredDeeplinkParameters.ParametersDelegate
and DeferredDeeplinkParameters.ErrorDelegate
delegates to the AppMetrica.RequestDeferredDeeplinkParameters()
method. The method returns the deferred deeplink parameters only at the first application start after Google Play Install Referrer obtaining.
void DeeplinkParametersDelegate(IDictionary<string, string> parameters)
{
foreach(KeyValuePair<string, string> pair in parameters)
{
Debug.Log("key: " + pair.Key + " Value: " + pair.Value);
}
}
void ErrorParametersDelegate(DeferredDeeplinkParameters.Error? error, string referrer)
{
Debug.Log("error: " + error + " referrer: " + referrer);
}
...
AppMetrica.RequestDeferredDeeplinkParameters(DeeplinkParametersDelegate, ErrorParametersDelegate);
For more information about deferred deeplinks, see Support for deferred deeplinks
Tracking new users
By default, the user is counted as a new user when the app is opened for the first time. If you connect the AppMetrica SDK to an app that already has active users, you can set up tracking new and old users to get correct statistics. Configure that by initializing the AppMetrica SDK using the extended AppMetricaConfig
configuration:
using Io.AppMetrica;
using UnityEngine;
public static class AppMetricaActivator {
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
private static void Activate() {
AppMetrica.Activate(new AppMetricaConfig("APIKey") {
FirstActivationAsUpdate = !IsFirstLaunch(),
});
}
private static bool IsFirstLaunch() {
// Implement logic to detect whether the app is opening for the first time.
// For example, you can check for files (settings, databases, and so on),
// which the app creates on its first launch.
return true;
}
}
Disabling and enabling sending statistics
If you need confirmation from the user before sending statistical data, you should initialize the library with the disabled sending option. To do this, pass false
to the DataSendingEnabled
property when creating an extended library configuration.
AppMetrica.Activate(new AppMetricaConfig(API_KEY) {
DataSendingEnabled = false,
});
After the user has granted permission to send statistics (for example, in the app settings or by accepting the agreement when launching the app for the first time), enable the sending of statistics using the AppMetrica.SetDataSendingEnabled(bool enabled)
method:
// Checking the status of the boolean variable. It shows the user confirmation.
if (flag) {
// Enabling sending data.
AppMetrica.SetDataSendingEnabled(true);
}
Alert example
You can use any text to inform users of statistics collection. For example:
This app uses the AppMetrica analytical service provided by YANDEX LLC, ulitsa Lva Tolstogo 16, Moscow, Russia 119021 (hereinafter referred to as Yandex) based on the Terms of Use.
AppMetrica analyzes app usage data, including the device it is running on, the installation source, calculates conversion, collects statistics of your activity for product analytics, ad campaign analysis, and optimization, as well as for troubleshooting. Information collected in this way cannot identify you.
Depersonalized information about your use of this app collected by AppMetrica tools will be transferred to Yandex and stored on Yandex’s server in the EU and the Russian Federation. Yandex will process this information to provide you with app usage statistics, generate app performance reports, and deliver other services.
Getting AppMetrica SDK IDs
To get AppMetrica SDK IDs (DeviceId
, DeviceIdHash
, UUID
), use the RequestStartupParams
method. To get the appmetrica_device_id
, make sure to request the DeviceIdHash
.
void StartupParamsDelegateStartupParamsDelegate(StartupParamsResult result, StartupParamsErrorReason errorReason) {
Debug.Log("Uuid: " + result.Uuid);
Debug.Log("DeviceId: " + result.DeviceId);
Debug.Log("DeviceIdHash: " + result.DeviceIdHash);
Debug.Log("errorReason: " + errorReason);
}
...
IEnumerable<string> keys = new string[] { StartupParamsKey.AppMetricaUuid, StartupParamsKey.AppMetricaDeviceID, StartupParamsKey.AppMetricaDeviceIDHash };
AppMetrica.RequestStartupParams(StartupParamsDelegateStartupParamsDelegate, keys);
Delivering the device type
If you want to set the device type, specify it when creating your configuration:
AppMetrica.Activate(new AppMetricaConfig(API_KEY) {
DeviceType = "TV",
});
If you didn't find the answer you were looking for, you can use the feedback form to submit your question. Please describe the problem in as much detail as possible. Attach a screenshot if possible.