Major mobile platforms
In this article, I have tried to point out what was good or great and what was bad or horrible while working on a single product across these app stores. I hope this will be of help some of you who might be like me building for these platforms.
As part of my second microstartup, I decided that in order to maximize the reach of what I was building, Cryptocurrency tracking tool ACrypto, it should be available through as many channels as possible. In today’s world, any digital product is available in
Android development is my forte and so I choose the first 3 channels. The web is something I would love to take a shot when I’m free as it’s all about how fast you can validate your product in today’s world. So sorry web but you have to wait.Just a background, Android has 87% market share, iOS has 12 %. Source
It was very natural that I start with android, take some time to get it ready for Amazon as it’s just a fork of android and you just need to do very small changes. Then I would build for iOS. Hopefully if this was successful, would see if I could bring them to Mac and windows OS as in trading world people like desktop apps a lot.
So my journey began and finished all of it and if I had to summarise it, this tweet will cover it all
summarising working with different app stores
I wont be discussing the publishing part for now instead i would focus on whats important for developers to easily get apps out and test their Product Market Fit (PMF) instead of struggling with the bare necessities of mobile app world.
Android is a platform that I love a lot. It’s the first thing I learned when I started my career. The community and open source projects and libraries are amazing and a little bit overwhelming to be true. But if you learn it properly, you would have a blast building any product on Android.
One of the easiest ways to use a bootstrapped project which has all the navigation, the different types of screens like a list with search, sort, tab screen, settings, payments, push notifications, local storage. Unfortunately, there is none, so I decided to build from scratch, so I can reuse this template later and if there is enough demand, I will opensource the entire code which can get people who have similar need started in minutes and save at least two months of time.
The following are 6 things that i have realised are crucial and important and I believe should be made as easy as possible for devs. Yes, I’m talking about you, Apple and Amazon!
Android: Android was simplest of all when it comes to sending notifications among the there and has lot of use-cases builtin. Still building your own notifications was a pain unit Firebase Cloud Functions came to the rescue
Apple: I don't event want to go near how to send it in apple recommended way. Trust me its scarier than The Shining!
Amazon: Amazon has copied Google when it forked Android OS. It works but they haven't changed anything from last 5 years.
Cloud Functions for Firebase | Firebase_In many cases, developers prefer to control application logic on the server to avoid tampering on the client side…_firebase.google.com
To send notifications from the server used to be a pain especially if you are a mobile developer and are not familiar with backend much. Cloud functions are easily one of the easiest ways to send notifications for Android, iOS and even for Amazon Devices. Notifications are very simple with firebase, with little boilerplate code. Topic notifications are also very easy to implement for both iOS and Android. For Amazon, you have to use something basic as firebase is not supported. More effort for Amazon.
Winner🏆 : Android
ProTip ✨: Use this cloud function for sending push notification to all 3 platforms https://gist.github.com/1hakr/8a69b04cd0d2e556fececb5ccebebb5c
Android : Subscription is very complex of a feature to add. Most of the subscription details can change like trial days, introductory fee and the actual all have to be fetched dynamically. And if you have more than 1 subscription then you end up doing this asynchronously from main application and cache it till application is restarted. To make it easy use anzlab library which implements most of the boiler plate code and gives simple ways to do both subscription and in app purchases.
anjlab/android-inapp-billing-v3_android-inapp-billing-v3 - A lightweight implementation of Android In-app Billing Version 3_github.com
Apple: Its equally hard to implement using the documentation provided by apple. Fear not we have an Amazing this library which doesn’t a great job of simplify subscription and purchases similar to android. You also need an actual physical device to test this, so unless you have lot of money, my suggestion would be to borrow a device like i did from a friend.
bizz84/SwiftyStoreKit_SwiftyStoreKit - Lightweight In App Purchases Swift framework for iOS 8.0+, tvOS 9.0+ and macOS 10.10+_github.com
Amazon: You are sure to hit a roadblock. luckily I found only one library which incidentally is a common library for both Amazon and Google play subscriptions. In App Payments by EggheadGames. One good thing about amazon is they have a companion app to test in app purchases which makes it easy to test.
eggheadgames/android-in-app-payments_android-in-app-payments - Support Android Google Play and Amazon in-app billing (IAP) payments with one API_github.com
One thing to note is Google play in app purchases are not available in china which has a huge user base. By default your app is not available in this country if you have in app purchases in Google Play Developer Console. I suggest you turn it on from App> Store Presence > Pricing & Distribution > Countries. See the usage and if users give feedback and are asking for it, you can implement AliPay, which is again a pain in the ass, but you can do it with Stripe easily.Screenshot
Winner🏆 : Android
ProTip ✨: Put the subscription logic inside your Application Class (Android) or App (iOS), so you can handle from access subscription info from anywhere in your app
App referral is a very common functinality now a days every company is adopting, be it startup or an MNC. But there isnt a all-in-one solution for all platforms.
Android: No builtin functionality but as the subscriptions support extending the end date, you can easily built this. Its been made dead simple to implement with firebase. In android it was straight forward with server check aswell.
Reward referrals | Firebase_One way to keep track of this information is sign in the user anonymously and store the data in the anonymous account's…_firebase.google.com
Apple: The problem was with iOS which doens’t support extend susbcription. Everything is simple and straight forward with iOS except this. So unless you have in app credits or that sort of thing, it would be a breeze to use firebase.
Amazon: Same as Android.
Winner🏆 : Android
ProTip ✨: Use cloud functions to reward users on referral and send a notification everytime a referral has been added to up to enthu for users. https://gist.github.com/1hakr/4ce1ea08119fb21a764a454b26e3cdde
Easily one of the most important part of user growth and also the most neglected one. Many variants have been implemented over the course of many years but 95% of them arent effective as they intrusive to the users. So finding a right balance is the key here.
Android: No built in functionality here but the best way to do this is implement a in app banner or snackbar which asks for feedback in a subtle and non intrusive way.
Subtle App review banner which comes after certain usage
Apple: Apple has built in functionality which can ask the users to rate the app. Unfortunately its not subtle but its the default way and apple has stricly prohibited from using any other means from iOS 10.3 onwards. Unless you want to face the wrath of Apple, i strongly recommend to stick with it.
if #available(iOS 10.3, *) {SKStoreReviewController.requestReview()} else {//Use your custom review view.}
Dont worry there is this amazing library which takes care of this for devices with iOS 10.3 below. So all cases encapsulated within the library
takecian/SwiftRater_SwiftRater - A utility that reminds your iPhone app's users to review the app written in pure Swift._github.com
Amazon: No built-in mechanism. We used the same thing as Android
Winner🏆 : Apple
ProTip ✨: When users report bugs and issues, after fixing, reply to them and politely ask them to give your app a review, if they like your app.
Aa great way to create and wonderful experience for your users is to cache data intelligently so you don’t show progress bar every single time. This will make your app experience very smooth.
Android: By default, there is no baked in functionality but Volley is one amazing networking library which can be customized to anyone’s liking. But the problem is that you have to write all the mundane logic you want to support. Luckily for me, I wrote this library working for a startup, Practo in India. It has built-in support for all sorts of things. I would definitely suggest you try this one.
DWorkS/VolleyPlus_VolleyPlus - 🏐 Volley library : make everything faster . Its an improvements for Volley by Google for Android…_github.com
iOS: If you came from Objective C phase of iOS development, i cant image all the horrors you went though using the native NSURLConnection. Luckily there is an amazing library called Alamofire.
Alamofire/Alamofire_Alamofire - Elegant HTTP Networking in Swift_github.com
Its works pretty great but doesnt support bootstrapping of data and custom caching of network data though. Fear not though, as i have written simple code to tackle this.
https://gist.github.com/1hakr/6e7efcd72a0fa5d5dbebc3ab62972d3c
Amazon: Same as Android.
Winner🏆 : Android
ProTip ✨: You can also bootstrap data into the app and update it over the network only when it changes. This can be used to save thousands of extra calls for to your API which can save a lot of 💲
This one of the most painful thing for any mobile developer who wants their users to be on the latest app version almost immediately but it rarely happens for a lot of reasons. You might have added new permission and it then auto update doesn’t work. To tackle all these and keep the user informed about the latest app update, we need a way to notify the user every time there is an amazing new feature which has been added to the app.
Android: One of the ways I found to help a lot in this aspect is to use an in-app version updater. All you have to do is give the app package to it and everything else is taking care of this small library. It even has options of how to tell the user about the update like push notification or in-app dialog.
javiersantos/AppUpdater_AppUpdater — A library that checks for your apps’ updates on Google Play, GitHub, Amazon, F-Droid or your own server…_github.com
Apple: Similar thing exists for iOS. You can use this library in with few line of code.
ArtSabintsev/Siren_Siren — Notify users when a new version of your app is available and prompt them to upgrade._github.com
Amazon: Same as Android.
Winner🏆 : Android
ProTip ✨: Remember to test this correctly as once this is out and if there is unchecked piece of code which can crash, all hell will break loose. Trust me!
The app that i made and published into these appstores is
Cryptocurrency Bitcoin Price, News, Alerts & Portfolio_ACrypto app is a Bitcoin / Altcoin price checker using which you can track the latest prices, news, find arbitrage…_acrypto.io
So in conclusion, I would say, its a mobile developers dream come true with Google, as they make it so easy and simple to do lots of stuff by providing most of them out of the box. Apple comes second but its nowhere near Google. Amazon could have become the second but they won’t really care about devs that much. I would strongly suggest staying away from Amazon.
I hope you liked this small perspective of mine. What about you? What’s your set of things which you think are most important as a dev? Let me know in the comments. I want to do another article on design aswell, so if you want to read that, let me know in the comments.
to the moon!
That all folks! This is HaKr signing off. Thanks for reading. If you enjoyed reading do click 👏 to recommend this article to others so they can enjoy .