Daniel Hindrikes
Developer and architect with focus on mobile- and cloud solutions!
Developer and architect with focus on mobile- and cloud solutions!
I Think it's really important to monitor apps. Of course the most important part is to log errors in the app. But I also like to track how my users uses my apps. For the lastest app I have built I have used a monitoring tool from Xamarin called Insights, http://xamarin.com/insights.
While I alwas have crossplatform and testability in mind when I buildning apps I first create a logger interface.
public interface ILogger
{
Task InitializeAsync();
//Log exceptions
void LogException(Exception ex);
//Log information about events, for example view navigation
Task TrackAsync(string identifier, Dictionary details = null);
//Log information about a user
Task Identify(string userId, Dictionary details = null);
}
While Xamarin Insights is compatible with Portable Class Library I writing the implementation in a project that I can share between platforms.
public class InsightsLogger : ILogger
{
public virtual Task InitializeAsync()
{
}
public void LogException(Exception ex)
{
Insights.Report(ex, ReportSeverity.Error);
}
public Task TrackAsync(string identifier, Dictionary details = null)
{
Insights.Track(identifier, details);
}
public Task Identify(string userId, Dictionary details = null)
{
Insights.Identify(userId, details);
}
}
The InitializeAsync method is virtual so it can be overridden, when using Xamarin Insights each platform has to have the Initialize code. Because of that I also need to create a logger class for each platform.
While I don't want errors from development together with production data I use to create two apps in Insights, one for development and one for production. I using conditional compile for to initialize with the right app key.
public class WinPhoneInsightsLogger : Logging.InsightsLogger
{
public override async Task Initialize()
{
#if DEBUG
Insights.Initialize("key for debug use");
#else
Insights.Initialize("key for production use");
#endif
}
}
if you want to read more about Xamarin Insights you can do it here, http://xamarin.com/insights