Latest news about Bitcoin and all cryptocurrencies. Your daily crypto news habit.
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.
Some Background
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 App
- iOS App
- Amazon App (yap, it’s a decent platform to be on in the USA)
- MacOS App (Apple has announced that users can bring their iOS app to mac, soon, in 2019, very soon)
- Window App
- Website (Desktop/Mobile)
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
Building on
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
body[data-twttr-rendered="true"] {background-color: transparent;}.twitter-tweet {margin: auto !important;}
Working with the appstores has been great mostly. Working with @GooglePlayDev has been an absolute pleasure, like a cake walk. While with @Apple appstore it was like walking in a busy park. With @AmazonAppDev it was like walking in a desert literally, your worst nightmare https://t.co/UxtyQp0hnL
— @1HaKr
function notifyResize(height) {height = height ? height : document.documentElement.offsetHeight; var resized = false; if (window.donkey && donkey.resize) {donkey.resize(height); resized = true;}if (parent && parent._resizeIframe) {var obj = {iframe: window.frameElement, height: height}; parent._resizeIframe(obj); resized = true;}if (window.location && window.location.hash === "#amp=1" && window.parent && window.parent.postMessage) {window.parent.postMessage({sentinel: "amp", type: "embed-size", height: height}, "*");}if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.resize) {window.webkit.messageHandlers.resize.postMessage(height); resized = true;}return resized;}twttr.events.bind('rendered', function (event) {notifyResize();}); twttr.events.bind('resize', function (event) {notifyResize();});if (parent && parent._resizeIframe) {var maxWidth = parseInt(window.frameElement.getAttribute("width")); if ( 500 < maxWidth) {window.frameElement.setAttribute("width", "500");}}
Crucial things needed
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!
- Notifications
- Subscriptions
- Referral
- Reviews
- Data Caching
- App Update
1. Notifications:
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 Shinning!
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
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🏆 : AndroidProTip ✨: Use this cloud function for sending push notification to all 3 platforms https://gist.github.com/1hakr/8a69b04cd0d2e556fececb5ccebebb5c
2. Subscriptions:
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
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.
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
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🏆 : AndroidProTip ✨: 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
3. Referral:
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.
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🏆 : AndroidProTip ✨: 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
4. Reviews:
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
Amazon: No built-in mechanism. We used the same thing as Android
Winner🏆 : AppleProTip ✨: 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.
5. Data Caching:
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.
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.
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🏆 : AndroidProTip ✨: 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 💲
6. App update:
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.
Apple: Similar thing exists for iOS. You can use this library in with few line of code.
Amazon: Same as Android.
Winner🏆 : AndroidProTip ✨: 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
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.
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 .
You can also follow me on Twitter / GitHub.
What it’s like building an app for multiple mobile platforms was originally published in Hacker Noon on Medium, where people are continuing the conversation by highlighting and responding to this story.
Disclaimer
The views and opinions expressed in this article are solely those of the authors and do not reflect the views of Bitcoin Insider. Every investment and trading move involves risk - this is especially true for cryptocurrencies given their volatility. We strongly advise our readers to conduct their own research when making a decision.