-
Notifications
You must be signed in to change notification settings - Fork 80
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
App usage analytics #174
Comments
I never even realize this existed, not sure if the guys will be interested in implementing this into MetaStone, but I am definitely interested in learning more about it, and implementing it to other projects. I am also curious about how many people actually play/use MetaStone. |
App Analytics would be cool, and I'd definitely use it as a learning opportunity. As for the number of people that use MetaStone... Maybe 200-300 people? It's a guess based on traffic here. However, I'm sure the lack of a public release might've decreased the number of users recently. I'd really like one so that I can get some people that make custom cards involved again. |
I've got a preliminary Analytics implementation up and running. I further built out the simple GoogleAnalytics library I mentioned above and turned it into a separate project. https://github.com/akoscz/GoogleAnalytics I didn't want to pull it into the Metastone code base since it heavily relies on Lombok for code generation which would add unnecessary complexity especially when building from an IDEA. I have a temporary GoogleAnalytics tracker ID set up for testing. We would need to create an official Metastone GoogleAnalytics account if we decide to go with this analytics approach. Feel free to fork and build my analytics branch. I can also send out some invites for the GoogleAnalytics dashboards if you want to check them out. |
Thanks for the research regarding this topic. This is certainly an interesting topic, especially once we got a larger user base. However, for now, I don't think we should implement this. There are several reasons for this:
|
Yeah absolutely we would need a disclaimer. It's actually part of the ULA of Google Analytics which says that you must allow the user to opt-out of participating in gathering tracking data. The motivation for looking into this topic initially was pure curiosity to answer the question of I wholeheartedly agree with your points 2 and 3. There's no rush to get this into the codebase, hence the Now about point number 1. Hmm... I have to disagree. Increased code complexity, minimal. Adding analytics tracking events is as simple as calling the builder methods on the GoogleAnalytics.Tracker object, then build() and send(). Can't get any simpler than that. As for build complexity, there is none. Just drop in a GoogleAnalytics jar file into the lib dir and your done. Heck we can even add a gradle dependency to have the jar downloaded automatically so we do not have to bundle it with our codebase. Now if you're speaking to the build complexity of the GoogleAnalytics library I wrote, that's a different story. It's not rocket science, but it does take a little bit of reading to learn about how the Lombok annotation library code generator works. So to bring this full circle, the PR above is a Proof of Concept and should not be merged into our upcoming release. Obviously it's not ready and we have yet to identify questions that the analytics implementation could help us answer. I would like to turn this topic in that direction. That is to ask _What questions would we like to get answers to if we were to implement an analytics solution?_ The first question I propose is: |
I'm actually kinda siding with @akosc here. It would be great if we knew what users were using in the program, so that we could focus on either what we can improve or what we're missing. Things I would like to answer:
I think it'd be cool to have this information, especially if we add features, so we can see how often they're used (How often are arbitrary decks made now? What if we add a custom card creator, anyone? Eh?) |
I'm not even sure the userbase is large enough to justify this at the moment. Since custom card creation is by far the most useful application of Metastone, and with all the instability around making custom cards lately, I suspect many may be looking elsewhere. Once that is stable, and @webadict starts marketing on reddit and elsewhere again, then maybe analytics will be of more use. |
@kairos4242 Custom card building instability has been resolved. You can make custom cards to your hearts content by editing the json files. As for how many users we might have lost due to bugs in an internal release, we may never know because we don't have any app usage data :) Hence why this thread exists. As for marketing on reddit and elsewhere that's great and all. But... without having analytics capability in the code BEFORE advertising there's no way to tell how many users you have attracted to the platform. Not to mention the ability to measure how many you have retained over time. |
@akoscz Oh, okay, I was unaware all the custom card issues had been resolved. The more I think about this, the more I'm starting to switch sides. This seems fairly simple to implement, and the data gained from doing so before advertising could actually allow us to see where advertising is the most effective easily. And a disclaimer isn't a big deal at all. My one remaining qualm: Could we allow users to opt out of tracking? How easy is that to do? |
That's a necessary part of implementing this change. If users do not wish
|
That's really small, and black on dark gray is not the best. Like, I know
|
Also 'Disclaimer' not really suggests that it contains an option to turn off tracking. It doesn't even look like a clickable element. I am no expert regarding the legal stuff, but I don't think you can hide the option to disable tracking in the darkest corner of your UI hoping that no user finds it. Regarding the technical implementation using the metastone.properties file: I like it. |
Yep, I hear ya. A more prominent visual component is necessary. Are you suggesting that we call it something else other than "Disclaimer" ? Also I added a analytics_disclaimer.txt to the resource folder. This file will hold the text that we want to use for our analytics disclaimer verbiage. |
That actually looks pretty good. It's noticeable, explains what's happening, and has the opt-out. |
Ok, so I've added analytics tracking of the main screens in the app with commit: 29ac36b Take a look to see if this is the right place to track navigation in the app. I put the tracking in the Mediator classes right after SHOW_VIEW is broadcast. I also added tracking of when users opt out of analytics tracking so that we have an idea of how many people are choosing to opt out. 39a350e |
Here are the various
Here's the full set of Google Analytics Measurement Protocol parameters https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters |
The other day I was wondering if we have an idea of the size of our user base. Which lead me to start thinking about how we could add some analytics to the app to track the number of users that use Metastone along with some other useful data, such as how many people use the deck builder, simulation and sandbox mode.
I did a bit of reading about Analytics libraries/services for Java apps but I didn't find any free ones other than Google Analytics. So I whipped up a quick proof of concept using the Google Analytics Measurement Protocol web api to see how difficult it would be for us to build it into the Metastone app. Turns out that it's not all that difficult.
Here's a quick and dirty GoogleAnalytics.java impl that uses the Lombok annotation library to generate a bunch of boiler plate code to create a builder used to create the analytics requests.
This is what an example usage would look like for tracking the application startup event:
So back to the question of Analytics. Wanted to get a conversation going on this topic to see if this something that we would find useful, or is it just me :) If so, what are some other things that we could track other than application startup?
The text was updated successfully, but these errors were encountered: