We all know about Flurry Analytics, and we know how we can use this with Xamarin in iOS and Android, as well as on Windows Phone.
Well, now there is a portable version that allows the analytics to be implemented in portable class libraries! The portable API abstracts away all the platform differences, but keeps all the power of the Flurry!
This can be found on NuGet and on GitHub.
Features
The features of the portable API are the same as the native API’s, as the portable is more of an abstraction than anything else. So along with all the native features, there are a few nice new once that make the API easier to use.
This is the primary advantage of this library, it allows the analytics to be implemented in portable projects. This is especially useful if you are using a cross-platform framework, such as MvvmCross. There is a sample that you can check out that makes use of all the features.
Starting Sessions
Although the library is portable, each platform needs to start the analytics session natively/differently:
For iOS, it is very simple call StartSession
from the AppDelegate
:
AnalyticsApi.StartSession("[API KEY]");
For Android, there are two ways to do this. Either by overriding the OnStart
and OnStop
methods from each Activity
:
// in OnStart AnalyticsApi.StartSession(this, "[API KEY]"); // in OnStop Analytics.EndSession(this);
Or, by using the IActivityLifecycleCallbacks
for the Application
. This way allows you to start and end the session without having to implement the logic in each Activity
. However it is only available from API Level 14 / Android 4.0 / Ice Cream Sandwich.
For Windows Phone, starting the session is done by attaching the StartSession
method call to the Launching
and Activated
events:
PhoneApplicationService.Current.Launching += (sender, args) => AnalyticsApi.StartSession(); PhoneApplicationService.Current.Activated += (sender, args) => AnalyticsApi.StartSession();
For each of the platforms, there is also a way to pass the key in to the API, but only start the session later:
// somewhere in the code AnalyticsApi.ApiKey = "[API KEY]"; // and then a little later AnalyticsApi.StartSession();
There is also a boolean property, IsSupported
, that will return true
if the platform supports Flurry Analytics:
if (!Analytics.IsSupported) Debug.WriteLine("PLatform does not support Flurry, nothing will be tracked.");
Setting Up Analytics
There are a few methods that hide the platform differences. Some examples of this are in the setting of user details, such as SetAppVersion
, SetUserId
, SetLocation
, SetAge
and SetGender
.
Not only that, there are a few methods that specify how Flurry should communicate, such as SetSessionContinueTimeout
and EnableSecureTransport
.
Usually these methods should be called before starting the session.
Logging Events & Errors
Along with tracking basic analytics, events and errors can be tracked. There are a few methods that support this: LogPageView
, LogEvent
, LogTimedEvent
, EndTimedEvent
and LogError
.
Logging timed events has been made much easier by implementing a new pattern for doing this. By calling LogTimedEvent
in a using
block, you can end the event in case of any exceptions as well as removing an extra call:
using (AnalyticsApi.LogTimedEvent("EventId")) { // perform a long running task }
Before, you would have to ensure that you called EndTimedEvent
to avoid any problems:
try { AnalyticsApi.LogTimedEvent("EventId"); // perform the long running task } finally { AnalyticsApi.LogTimedEvent("EventId"); }
Parameters can also be passed with the events using a simple Dictionary
:
var parameters = new Dictionary<string, string> { {"ParameterKey", "ParameterValue"} {"AnotherParameterKey", "AnotherParameterValue"} }; AnalyticsApi.LogEvent("EventId", parameters);