Mobile Analytics Platform Amplitude (YC W12) Takes On Flurry and Mixpanel
techcrunch.com
techcrunch.com
You took a file that could be visible on my 13" and made it huge and bloated.
Still going through the implementation but there are a few flags. (Will do issues or PRs)
Yes I am bored and caffeinated at 11 pm.
Sorry for being overly negative, you did actually have cool stuff that Mixpanel missed out on. Like giving actual readable device names.
1) Extract all network layer into its own stuff. We built an SDK recently, and I decided to make three layers out of it. SDK -> OAuth2 -> Networking
2) Separate that 1000 lines of code into several classes (check #1)
3) Update your device naming https://github.com/seivan/mixpanel-iphone/blob/feature/prope...
You guys will run into a case where your users will pollute their tracking with unknown model names because your SDK was outdated on the naming.
Even if they do update the SDK, the users will have ton of data with the old naming.
I'd probably store the device naming map on the server side in case of new devices without having to update the SDK.
Also, write tests, add a sample app, add your cocoapod spec file to your repo as well - etc.
We're on cocoapods, have tests, and a sample app locally but haven't pushed all that to Github to keep things simple for everyone looking at the source.
Model name tracking is an issue- we've fixed it in our backend so we can remap unknown names to display the correct thing on our website interface. We just haven't yanked the code from the SDK.
Agree on rearchitecting it with separation of concerns. We have to be very careful with any changes we push. The code's already running successfully on 10MM phones without any issues and we have to make sure not to introduce any new ones- so that process takes a while. Thanks again!
Question: do you store events that could be not send in a persistent store to retry at a later stage ?
You're angry about this? https://github.com/amplitude/Amplitude-iOS/blob/master/Ampli...
Selector naming isn't a replacement for documentation, unless you happen to know how to express invariants like these entirely through naming and the type system:
"Property keys must be <code>NSString</code> objects and values must be serializable."
Also, I think the problem you might be having is that you're trying to hold other people's software to the constraints of your particular way of using a 13" consumer laptop.
We do custom app development for a variety of large companies, so do hear "analytics, analytics, analytics" all the time. But I would just hear "go with Google Analytics" at those prices.
1. Sending requests every 10 seconds (and/or at every onPause) is no-good for battery life. Please, let the radio power down once in a while!
2. Using DefaultHttpClient with no connection pooling
3. It's doing a ton of work, allocating objects, logging events, in every onResume/onPause...I don't like this design. That includes when I get a pop-up message from another app, even if I dismiss it immediately.
4. Would be nice to register for activity lifecycle callbacks for api level >= 14, so people can't screw up the implementation.
Android has 80% of the world market so it's tough to know where iOS has significant market share.