Softphone for Android: technologies we use
Recently announced softphone for Android is a logical development and long-awaited extension of our product range: now it includes not only Win and Mac solutions but mobile versions as well.
Meanwhile, the general logic is still the same, it's a two-tier client-server architecture. There is also no crucial changes in how we organize our development process: we store and maintain the code as well as test builds before releases to ensure quality.
Here we talk how it goes in our team.
Development approach
In working on the Android app we follow MVVM (Model-View-ViewModel) and separate development of a graphical user interface (GUI) from the development of the business logic or back-end logic. It implies module testing (unit tests), and this is a big plus. MVVM is acknowledged as one of the most popular approaches to client application design especially in situations which suggest Model-View-Controller (MVC) or Model-View-Presenter (MVP, do not confuse with minimum viable product 🙂).
Hopefully, our readers will pardon us if we make a small lyrical digression and tell in a nutshell what the components are and what they are responsible for.
Model:
It takes over content and business logic.
View:
This component is for interaction with a user and visualization of content mentioned above and provided by the Model.
ViewModel:
It's an intermediary between Model and View: it transforms data from Model into format for the further visualization in View and handles user interaction (sends them to Model).
Read more here.
Now get back to the topic.
This is how MVVM looks like
Long story short, it results in better code readability and scaling possibilities, and this is why MVVM-approach is widely used for developing programs with GUI such as web apps and desktop/mobile apps (our case!).
Client side, server side
Client side of Softphone.Pro is written in Kotlin. It's a statically typed and object-oriented programming language running on top Java Virtual Machine (JVM). So Kotlin is fully compatible with Java; moreover, Kotlin and Java classes can easily get along in one package, and it's cool.
A funny fact: the Kotlin language is named in honor of the Kotlin island located in the Finnish bay. We, as true-programmers, love easter eggs like this (it is said that the Java language also was named in the honor of the eponymous island). Perhaps, one day there will be an island in the name of us. Why not? :)
As for the server side, we'd say that there are two... yes, it may sound surprising. The matter is in fact the softphone requires an alarm clock (PUSH) to wake up in the time of inbound call otherwise the call gets missed and there is no point in mobility per se. Besides, there is an a supervisor's dashboard (Team) where they can analyse calls and monitor what goes on realtime.
Both Team and PUSH are written on Go (also known as GoLang, do not confuse with Go!) — compiled multithreaded language developed by Google. Go supports both object-oriented and functional styles. We like Go for simplicity, multithreaded programming, cross-platform, and fast compile speed — and this is what unites us with Uber, Dropbox, American Express, BBC... enough big names :)
So briefly client and server sides can be described just by several words — Java, Kotlin, Go. Sounds like a life-affirming motto! And looks too.
The Three Graces. Great classic!
Testing and maintaining
We've already mentioned module testing in the first part of the article — in our case it runs using WinAPI driver and Python scripts. This is a three-step process: commit, autotests, notifications.
Side-by-side with that goes regression testing (to get insured that everything is still OK after new feature added or bug fixed). And, of course, integration testing and system testing are also applied: the first is needed for module interation check, the second is for checking how the app interacts with its environment (operating system, network, etc.).
Like any other developers' code, ours looks like a spreading tree: of course we cannot do without version control system. In our case this is Git with a graphical interface TortoiseGit (though there are oldschools who prefer bash). For the storage purposes we use Redis and PostgreSQL.
As you see, technologies are worthy, so the product is good to. And, by the way, is 100% ready for while labelling — your brand name, you colors, your logo. So if you looked for a Whitelabel softphone for Android, that's it. If you need it, you know what to do. (Just let us know and send a message to info@softphone.pro 😉)
Good code and smooth run to everyone 📱
YOU MAY ALSO LIKE
Blog
Softphone for Android: let sleep or sleep deprivation?
Blog
Mobile softphone, fit for White Label: how we did it
Blog
Softphone actually: what people say
Help
How to improve SIP call quality