The following sections show you how to use the Xamarin SDK to customize your instrumentation.
Because the agent stores data about events in a local buffer before reporting the information, you are recommended to use the APIs with discretion.
You can instrument methods to see how often the instrumented a method is invoked and how long it takes to run. To do this, add a call at the beginning and end of the method you'd like to instrument.
In the example below, the code executed in the constructor for the class
MyClass will be tracked and reported. In your own code, start tracking calls by specifying the class and method in
BeginCall and then complete the tracking and report the data by calling
Sometimes you want to time an event in your application that spans multiple methods. You can do this by calling
StartTimerWithName when the event starts, and then
StopTimerWithName when it ends. For example, to track the time a user spends viewing a screen, the instrumentation might look something like the following:
To report other types of data, you can use a metric. The metric name should only contain alphanumeric characters and spaces. Illegal characters are replaced by their ASCII hex value. The metric value must be a long integer.
The snippet below shows how you might report a metric.
You can report a Network Request using the
The following is an example of using
HTTPRequestTracker with the
System.Net.Http.HttpClient class. The
tracker object synchronously captures and reports the network request as well as any network errors.
You can leave breadcrumbs to mark interesting events. For example, if your application crashes, the breadcrumbs you left with be displayed in the crash report and could provide context. You can also configure the breadcrumb to appear in sessions.
The following is the method signature for leaving breadcrumbs:
You use the mode to set the visibility of the breadcrumb. The visibility defines where you will see the breadcrumb in the Controller UI. The value of mode can be one of the following:
BreadcrumbVisibility.CrashesOnly– The breadcrumb will only appear in crash snapshots.
BreadcrumbVisibility.CrashesAndSessions– The breadcrumb will appear in crash snapshots and sessions.
Thus, you would use the method below to set breadcrumbs that are only reported in crash reports:
If you would like to see the breadcrumb in crash reports and sessions:
Report Errors and Exceptions
You can report exceptions using the method
reportError from the
Instrumentation class. Reported exceptions will appear in session details.
You can also set one of the severity levels below for an issue. With the severity level, you can filter errors in the Code Issues Dashboard or Code Issues Analyze.
The example below uses the API to report possible exceptions and sets the severity level to
ErrorSeverityLevel.CRITICAL (critical) when writing to a file
Disable the Reporting of Exceptions as Crashes
By default, the Xamarin Agent reports exceptions as a crash. You can enable or disable the all exceptions as crashes with the boolean property
enableExceptionReporting. The default value is
Report Aggregate Exceptions as Crashes
You can configure the Xamarin Agent to report aggregate exceptions (handled and unhandled) as crashes by setting the boolean property
true. When the property is set to
false, only unhandled exceptions are reported. The default value is
The following code example configures the Xamarin Agent to report aggregate exceptions (handled and unhandled) as crashes.
Programmatically Control Sessions
By default, a mobile session ends after a period of user inactivity. For example, when a user opens your application, the session begins and only ends after the user stops using the app for a set period of time. When the user begins to use the application again, a new session begins.
Instead of having a period of inactivity to define the duration of a session, however, you can use the following API to programmatically control when sessions begin and end:
When you call the method
StartNextSession, the current session ends and a new session begins. The API enables you to define and frame your sessions so that they align more closely with business goals and expected user flows. For example, you could use the API to define a session that tracks a purchase of a product or registers a new user.
Excessive use of this API will cause sessions to be throttled (excessive use is >10 calls per minute per Xamarin Agent, but is subject to change). When not using the API, sessions will fall back to the default of ending after a period of user inactivity.
Example of a Programmatically Controlled Session
In the example below, the current session ends and a new one begins when an item is bought.
Start and End Session Frames
You can use the
ISessionFrame API to create session frames that will appear in the session activity. Session frames provide context for what the user is doing during a session. With the API, you can improve the names of user screens and chronicle user flows within a business context.
The following are common use cases for the
- One screen performs multiple functions and you want more granular tracking of the individual functions.
- A user flow spans multiple screens or user interactions. For example, you could use the API to create the session frames "Login", "Product Selection", and "Purchase" to chronicle the user flow for purchases.
- You want to capture dynamic information based on user interactions to name session frames, such as an order ID.
The table below lists the two methods and one property you can use with session frames. In short, you start a session frame with
StartSessionFrame and then use the returned
ISessionFrame object to rename and end the session frame.
Use this to start and name your session frame.
Rename the session frame name.
End the session frame.
Session Frame Example
In the following example, the
ISessionFrame API is used to track user activity during the checkout process.
Add User Data
You can set a key/value pair of strings to record important events or information. Below is the method signature for setting user data:
For example, you might want to log the user ID when the method for logging in the user is called:
This information is available in Network Request Analyze and is added to any crash snapshots that may be taken. Keys and values are limited to 2048 characters each.
You can also set user data with values of other types (long, boolean, double, DateTime) using the following methods:
To remove user data, use the following methods:
Set the Logging Level (Optional)
You can set the logging level with the configuration
LoggingLevel as part of the class AgentConfiguration.
You can set
LoggingLevel to one of the levels listed in the table below.
|Agent will emit no messages at all.|
|Only show errors and initial banner.|
This is the default.
|Warning level messages and above.|
|Information level messages and above|
May be useful to the developer.
|Debug level messages and above.|
Useful for support personnel and developers.
Verbose level messages and above.
Use verbose logging only for troubleshooting. Be sure to disable for production.
For the complete SDK API documentation, see the latest Xamarin SDK documentation or the previous versions listed below: After 4.5.6, the Xamarin Agent started using a version number different from that of the Controller and the other AppDynamics platform components. See Mobile Agent Version and Deployment Support Matrix for the minimum version of the Controller and the EUM Server required for complete support of all the Xamarin Agent features.
Xamarin SDK Documentation
For the complete SDK API documentation, see the latest Xamarin SDK documentation or the previous versions listed below:
After 4.5.6, the Xamarin Agent started using a version number different from that of the Controller and the other AppDynamics platform components. See Mobile Agent Version and Deployment Support Matrix for the minimum version of the Controller and the EUM Server required for complete support of all the Xamarin Agent features.