WinAnalytics library

A light-weight android library that can be quickly integrated into any app to use analytics tools.

Custom adapters for support all analytical tools.

Annotations based.

Support Retrofit calls for log events automatically.

Support log events when user clicks on views.

Support screens events.

Null safety.

Contributing:

If you’d like to contribute, please take a look at the Contributing page on the Wiki.

Example WinAnalytics:

Application class

public class MyApplication extends Application { @Override public void onCreate () { super . onCreate (); WinConfiguration configuration = WinConfiguration . builder () . registerAdapter ( new MixpanelAdapter ( this , "token" )) . registerAdapter ( new FirebaseAdapter ( this )) . registerAdapter ( new FabricAdapter ( this )) ... . debugMode ( BuildConfig . DEBUG ) . build (); WinAnalytics . init ( configuration ); } }

Analytics interfaces

@Analytics ( events = { @Data ( value = @Value ( "post.title" ), key = @Key ( "title" )), @Data ( value = @Value ( "post.body" ), key = @Key ( "body" )) }, timestamp = true ) public interface MainActivityAnalytics { // This event will override class @Analytics events @Event ( value = "Success get posts" , events = { @Data ( value = @Value ( "post.title" ), key = @Key ( "title" )), @Data ( value = @Value ( "otherParam" ), key = @Key ( "otherParam" )) } ) void successGetPosts ( Post post , String otherParam ); // This event will inherit values from class @Analytics annotation @Event ( value = "Failed get posts" ) void failedGetPosts ( Post post ); // This event will inherit values from class @Analytics annotation @Event ( value = "Failed get posts1" ) void failed1GetPosts ( Post post ); }

Analytics wrapper

@AnalyticsWrapper public interface MyAnalyticsWrapper { // This method will be return MainActivityAnalytics implementation MainActivityAnalytics mainActivityAnalytics (); }

Access MyAnalyticsWrapper

public class MainActivity extends AppCompatActivity { private JavaMyAnalyticsWrapper wrapper ; private JavaMainActivityAnalytics mainActivityAnalytics ; @Override protected void onCreate ( Bundle savedInstanceState ) { super . onCreate ( savedInstanceState ); wrapper = WinAnalytics . create ( JavaMyAnalyticsWrapper . class ); mainActivityAnalytics = wrapper . mainActivityAnalytics (); Post post = new Post (); post . setTitle ( "title" ); post . setBody ( "body" ); mainActivityAnalytics . failedGetPosts ( post ); } }

Example analytics when user clicks on button:

Analytics interface

@Analytics public interface JavaMainActivityAnalytics { @Event ( value = "Failed get posts" , events = { @Data ( value = @Value ( "post.title" ), key = @Key ( "title" )) }, timestamp = true ) void failedGetPosts ( /* This name for WinAnalytics know whitch object will bind here */ @Name ( "post" ) Post post ); }

MainActivity

public class MainActivity extends AppCompatActivity { private Destroyable destroyable ; @Name ( "post" ) @Bind ( R . id . btn_login ) Post post ; @Override protected void onCreate ( Bundle savedInstanceState ) { super . onCreate ( savedInstanceState ); setContentView ( R . layout . activity_main ); // Don't forget add this line to bind clicks listeners to views destroyable = WinAnalytics . bind ( this ); } @EventOnClick ( value = R . id . btn_login , event = "Failed get posts" ) void onLoginClicked () { // Do what you want here after user clicks on button and WinAnalytics will log event automatically for you } @Override protected void onDestroy () { super . onDestroy (); destroyable . destroy (); } }

Network analytics

What if you want log events based on retrofit call success or failure, WinAnalytics already supports this type of analytics.

Http client

public interface HttpClient { // This for tell WinAnalytisc this call supports analytics @AnalyticsCall @GET ( "posts" ) Call < List < Post >> getPosts (); }

then after add @Analytics for your call you need to specify what event you want to call when this call response success or failure

Analytics interface

@Analytics public interface JavaMainActivityAnalytics { // That means this analyics will fire after "posts" api response success and "name" means you should use call arguments which named with "getPostsSuccess" @CallSuccess ( value = "posts" , name = "getPostsSuccess" ) @Event ( value = "Failed get posts" , events = { @Data ( value = @Value ( "post.title" ), key = @Key ( "title" )) }, timestamp = true ) void failedGetPosts ( @Name ( "post" ) Post post ); }

Now in your activity or whatever you want to log events you need to add this code.

public class MainActivity extends AppCompatActivity implements View . OnClickListener { // value means your api, and names means name whitch you specifyed in `@CallSuccess` @CallArgument ( value = { "posts" }, names = "getPostsSuccess" ) Post post ; @Override protected void onCreate ( Bundle savedInstanceState ) { super . onCreate ( savedInstanceState ); setContentView ( R . layout . activity_main ); // You need register and unregister your call arguments and binds WinAnalytics . getInstance (). register ( this ); findViewById ( R . id . btn_login2 ). setOnClickListener ( this ); } // this method will return api response for log initialize your variable before log event @BindCallArguments ( value = { "posts" }) void init ( Response < List < Post >> response ) { post = response . body (). get ( 0 ); } @Override protected void onDestroy () { super . onDestroy (); WinAnalytics . getInstance (). unregister ( this ); } @Override public void onClick ( View v ) { HttpHelper . getHttpClient (). getPosts (). enqueue ( new Callback < List < Post >>() { @Override public void onResponse ( @NonNull Call < List < Post >> call , @NonNull Response < List < Post >> response ) { // Do what you want after response and let WinAnalytics log network events for you } @Override public void onFailure ( @NonNull Call < List < Post >> call , @NonNull Throwable t ) { } }); } }

The last thing you want to add is indexing interface like this

@AnalyticsIndex public interface MyAnalyticsIndex { }

Now WinAnalytics will log events automatically for you in a background thread, But you need to register WinAnalytics call adapter factory when you initialize retrofit like this

public static HttpClient getHttpClient () { return new Retrofit . Builder () . addConverterFactory ( GsonConverterFactory . create ()) . addCallAdapterFactory ( new AnalyticsFactory ( BASE_URL )) . baseUrl ( BASE_URL ) . build () . create ( HttpClient . class ); }

Log screens opens events

For log screen events you just want to annotate your class with @Screen like this

@Screen ( value = "Main activity" , timestamp = true ) public class JavaMainActivity extends AppCompatActivity { @Override protected void onCreate ( Bundle savedInstanceState ) { super . onCreate ( savedInstanceState ); setContentView ( R . layout . activity_main ); // Don't forget to add this line for log event and bind other cliks if you have. WinAnalytics . bind ( this ); } }

Download

dependencies { // if you want log retroift calls events you need to add this dependency implementation 'com.winfooz:winanalytics-retroft:1.0.0' // but if you want just log clicks events or manually events you need to add this dependency implementation 'com.winfooz:winanalytics:1.0.0' // Always you need to add this dependency. kapt 'com.winfooz:winanalytics-compiler:1.0.0' // If you want use firebase analytics implementation 'com.winfooz:adapter-firebase:1.0.0' // If you want use mixpanel analytics implementation 'com.winfooz:adapter-mixpanel:1.0.0' }

Support annotations

@Analytics @AnalyticsCall @AnalyticsIndex @AnalyticsWrapper @Bind @BindCallArguments @CallArgument @CallFailure @CallSuccess @Event @EventOnClick @Name @Screen

License

WinAnalytics is released under the MIT license. See LICENSE for details.