The community has spoken and one kind individual (I think it's this one) has contributed this gist back to the community with an extended Flurry API covered:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
using Android.App; | |
using Android.Content; | |
using Android.OS; | |
using Android.Runtime; | |
using Android.Views; | |
using Android.Widget; | |
using System.Threading; | |
using Android.Util; | |
using Tasty; | |
namespace WebserviceClients.Tasty.WSClients.Flurry | |
{ | |
public class FlurryClient | |
{ | |
public const string ApiKeyValue = WSConstants.FLURRY_API_KEY; | |
private readonly IntPtr _flurryClass; | |
// SESSIONS | |
private readonly IntPtr _flurryOnStartSession; | |
private readonly IntPtr _flurryOnEndSession; | |
private readonly IntPtr _flurrySetContinueSessionMillis; | |
// SIMPLE EVENTS | |
private readonly IntPtr _flurryLogEvent; | |
private readonly IntPtr _flurryLogEventMap; | |
// TIMED EVENTS | |
private readonly IntPtr _flurryLogTimedEvent; | |
private readonly IntPtr _flurryLogTimedEventMap; | |
private readonly IntPtr _flurryEndTimedEvent; | |
// ADDITIONAL USER INFORMATION | |
private readonly IntPtr _flurrySetUserId; | |
private readonly IntPtr _flurrySetAge; | |
private readonly IntPtr _flurrySetGender; | |
// LOCATION | |
private readonly IntPtr _flurrySetReportLocation; | |
// ERROR / LOG | |
private readonly IntPtr _flurrySetLogEnabled; | |
private readonly IntPtr _flurryOnError; | |
// CONTINUE SESSION MILLIS | |
public FlurryClient() | |
{ | |
_flurryClass = JNIEnv.FindClass("com/flurry/android/FlurryAgent"); | |
// SESSIONS | |
_flurryOnStartSession = JNIEnv.GetStaticMethodID(_flurryClass, "onStartSession", "(Landroid/content/Context;Ljava/lang/String;)V"); | |
_flurryOnEndSession = JNIEnv.GetStaticMethodID(_flurryClass, "onEndSession", "(Landroid/content/Context;)V"); | |
_flurrySetContinueSessionMillis = JNIEnv.GetStaticMethodID(_flurryClass, "setContinueSessionMillis", "(J)V"); | |
// SIMPLE EVENTS | |
_flurryLogEvent = JNIEnv.GetStaticMethodID(_flurryClass, "logEvent", "(Ljava/lang/String;)V"); | |
_flurryLogEventMap = JNIEnv.GetStaticMethodID(_flurryClass, "logEvent", "(Ljava/lang/String;Ljava/util/Map;)V"); | |
// TIMED EVENTS | |
_flurryLogTimedEvent = JNIEnv.GetStaticMethodID(_flurryClass, "logEvent", "(Ljava/lang/String;Z)V"); | |
_flurryLogTimedEventMap = JNIEnv.GetStaticMethodID(_flurryClass, "logEvent", "(Ljava/lang/String;Ljava/util/Map;Z)V"); | |
_flurryEndTimedEvent = JNIEnv.GetStaticMethodID(_flurryClass, "endTimedEvent", "(Ljava/lang/String;)V"); | |
// ADDITIONAL USER INFORMATION | |
_flurrySetUserId = JNIEnv.GetStaticMethodID(_flurryClass, "setUserId", "(Ljava/lang/String;)V"); | |
_flurrySetAge = JNIEnv.GetStaticMethodID(_flurryClass, "setAge", "(I)V"); | |
_flurrySetGender = JNIEnv.GetStaticMethodID(_flurryClass, "setGender", "(B)V"); | |
// LOCATION | |
_flurrySetReportLocation = JNIEnv.GetStaticMethodID(_flurryClass, "setReportLocation", "(Z)V"); | |
// ERRROR / LOG | |
_flurrySetLogEnabled = JNIEnv.GetStaticMethodID(_flurryClass, "setLogEnabled", "(Z)V"); | |
_flurryOnError = JNIEnv.GetStaticMethodID(_flurryClass, "onError", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); | |
} | |
#region SESSIONS | |
public void OnStartActivity(Activity activity) | |
{ | |
ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurryOnStartSession, new JValue(activity), new JValue(new Java.Lang.String(ApiKeyValue)))); | |
} | |
public void OnStopActivity(Activity activity) | |
{ | |
ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurryOnEndSession, new JValue(activity))); | |
} | |
public void setContinueSessionMillis(long millis) | |
{ | |
ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurrySetContinueSessionMillis, new JValue(millis))); | |
} | |
#endregion | |
#region SIMPLE EVENTS | |
public void LogEvent(string eventName) | |
{ | |
ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurryLogEvent, new JValue(new Java.Lang.String(eventName)))); | |
} | |
public void LogEvent(string eventName, Dictionary<string,string> parameters) | |
{ | |
JavaDictionary<string,string> actualParams = new JavaDictionary<string,string>(parameters); | |
ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurryLogEventMap, new JValue(new Java.Lang.String(eventName)), new JValue(actualParams))); | |
} | |
#endregion | |
#region TIMED EVENTS | |
public void LogTimedEvent(string eventName, bool timed) | |
{ | |
ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurryLogTimedEvent, new JValue(new Java.Lang.String(eventName)), new JValue(timed))); | |
} | |
public void LogTimedEvent(string eventName, Dictionary<string,string> parameters, bool timed) | |
{ | |
JavaDictionary<string,string> actualParams = new JavaDictionary<string,string>(parameters); | |
ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurryLogTimedEventMap, new JValue(new Java.Lang.String(eventName)), new JValue(actualParams), new JValue(timed))); | |
} | |
public void EndTimedEvent(string eventName) | |
{ | |
ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurryEndTimedEvent, new JValue(new Java.Lang.String(eventName)))); | |
} | |
#endregion | |
#region ADDITIONAL USER INFORMATION | |
public void setUserId(string userId) | |
{ | |
ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurrySetUserId, new JValue(new Java.Lang.String(userId)))); | |
} | |
public void setAge(int age) | |
{ | |
ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurrySetAge, new JValue(age))); | |
} | |
public void setGender(byte gender) | |
{ | |
ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurrySetGender, new JValue(gender))); | |
} | |
#endregion | |
#region LOCATION | |
public void setReportLocation(bool enabled) | |
{ | |
ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurrySetReportLocation, new JValue(enabled))); | |
} | |
#endregion | |
#region ERROR / LOG | |
public void setLogEnabled(bool enabled) | |
{ | |
ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurrySetLogEnabled, new JValue(enabled))); | |
} | |
public void onError(string errorId, string message, string errorClass) | |
{ | |
ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurryOnError, new JValue(new Java.Lang.String(errorId)), new JValue(new Java.Lang.String(message)), new JValue(new Java.Lang.String(errorClass)))); | |
} | |
#endregion | |
#region HELPERS | |
private static void ExceptionSafe(Action action) | |
{ | |
try | |
{ | |
action(); | |
} | |
catch (ThreadAbortException) | |
{ | |
throw; | |
} | |
catch (Exception exception) | |
{ | |
Log.Info("FlurryClient", "Exception seen in calling Flurry through JNI {0}", exception.ToString()); | |
} | |
} | |
#endregion | |
~FlurryClient() | |
{ | |
JNIEnv.DeleteGlobalRef (_flurryClass); | |
} | |
} | |
} |
Excellent stuff - thanks "anonymous" :)
Do you have any examples of this being used in an application? Thanks.
ReplyDelete