Archive for the ‘mobile apps’ Category

Construction of a Native Mobile User Interface

April 5th, 2022 by Ishan Geeganage

More 6.64 billion people across the globe are using smart phones (and the apps on them). The majority of people use mobile applications for banking, searching for and ordering from restaurants, health, news, email and engaging on social media platforms.

A mobile user interface is the graphical and usually touch-sensitive display on a mobile device, such as a smartphone or tablet, which allows the users to interact with the device’s apps, features, content and functions.

In a mobile app, the icon is the first thing people see. The app icon design should aim to entice users to download the app, as well as help people quickly find the app on their device screen. Research has shown that an app icon can be a significant factor in the success or failure of an app.

App Design Considerations

Aside from the icon, when designing a mobile app, it is important to consider the following:


Successful navigation is simple and intuitive, providing an obvious way to move between screens and functions. As many apps are used on very small screens, the effective use of screen real estate is very important.

Large touch area

Allowing sufficient space around controls will ensure that buttons, links etc are easy to tap using the thumb or finger.  Insufficient space and smaller controls will annoy a user and potentially cause them to make mistakes.


It is not necessary to display every possible piece of information on the interface. Organising content in a way that provides the user with a clear understanding of information, and allows them to drill down when they need more will allow you to reduce clutter and make using your app easier.

Larger text

It is important to keep text size in mind when designing for a mobile screen.  Designers work on a desktop computers to create app designs; it is important to constantly check that the text size will be easily readable once it is being seen on a mobile.

Use Native Controls

Many so-called native mobile controls are available to use within your app design.  These are controls, such as switches, list choices, buttons etc.  One of the benefits of building a native mobile app is that you have access to the native controls.  It is not a good idea to use simple web controls instead, as these are more difficult for the user to interact with, and the native controls are more expected by the user.

Available Components

Apple, unlike Android, does not have a dedicated “back” button.  When we are designing the user interface for a native Apple app, we need to address the Back button functionality.

In Messages, Mail and even Safari, a simple swipe right from the edge of the screen will navigate the user back to the previous window. This gesture also works in some third-party apps like Instagram.

Similarly, when we using the common screen elements like the Date Picker, Time Picker and Dropdown, we cannot produce the same look and feel for both iOS and Android apps. This is because these default components render a different look and feel in iOS and Android.

Use Simple Forms

Keep forms for user data entry to the simplest possible set of fields and options.  Use form controls to keep the need to type text to a minimum.  When building forms, there are various ways to help the user enter data, but keeping the design to the simplest possible in the first place is paramount.

Consistent Experience

If your site/app is present on both web and mobile, provide a consistent experience to the user.

Screen Structure

We need to consider the screen layout when designing the app. Apps can have different layouts, but there are many common screens which will usually have a layout something like the following:

mobile app layout

Images and Gradients

Wherever possible, instead of using images or image gradients, use colours and colour gradients to create in the same effect. Doing so will reduce the usage of complex images and therefore reduce the operational complexity of the app, thus improving performance of the app.

Building an App User Interface

Planning is very important before we write any code in order to convert an app design, into an actual functioning app.  The following activities are involved in building the design for a native mobile app.

Cutting up images


A standard-resolution display has a 1:1 pixel density (or @1x), where one pixel is equal to one point. High-resolution displays have a higher pixel density, offering a scale factor of 2.0 or 3.0 (referred to as @2x and @3x). As a result, high-resolution displays demand images with more pixels.

For example, suppose you have a standard resolution (@1x) image that’s 100px × 100px. The @2x version of this image would be 200px × 200px, and the @3x version would be 300px × 300px.


To provide good graphical qualities on devices with different pixel densities, we need to include multiple versions of each image in your app—one for each density bucket, at a corresponding resolution. Otherwise, Android will scale your image so it occupies the same visible space on each screen, potentially resulting in scaling artifacts such as blurring.

For example, if you have a image that’s 48×48 pixels for medium-density screens, the following size images need to be included within the app:
• 36×36 (0.75x) for low-density (ldpi)
• 48×48 (1.0x baseline) for medium-density (mdpi)
• 72×72 (1.5x) for high-density (hdpi)
• 96×96 (2.0x) for extra-high-density (xhdpi)
• 144×144 (3.0x) for extra-extra-high-density (xxhdpi)
• 192×192 (4.0x) for extra-extra-extra-high-density (xxxhdpi)

app development

Using default icons

iOS and Android provide access to a small number of system icons. These built-in icons are available for common tasks and types of content. Every system-provided image has a specific, well-known meaning. To avoid confusing users, it’s essential that these system icons are used in accordance with its meaning and recommended usage.


standard app icons when building a mobile app


Android standard app icons app development

Layout Construction


Auto Layout is a development tool for constructing adaptive interfaces. Using Auto Layout, we can define rules (known as constraints) that govern the content in an app. For example, we can constrain a button so it’s always horizontally centered and positioned eight points below an image, regardless of the available screen space.

Auto Layout automatically re-adjusts layouts according to the constraints we specify for certain environmental variations, known as traits. We can code an app to dynamically adapt to a wide range of traits.

auto layout use when building a mobile app


Android provides an XML vocabulary for ViewGroup and View classes, which means that most of the user interface of an Android app is defined in XML files. The Android Studio’s Layout Editor is used to assist in the creation of the user interface; it writes the XML as the programmer drags and drops views to build out an app layout.  Fine adjustments can then be made within the XML if required.

building an Android mobile app interface

Code Manipulation of the user interface


The Interface Builder editor within Xcode makes it relatively simple to design a full user interface without writing any code. Simply drag and drop windows, buttons, text fields, and other objects onto the design canvas creates a functioning user interface.

We can independently design interfaces, separate from their implementations. User interfaces are actually archived Cocoa or Cocoa Touch objects (saved as .nib files), and iOS will dynamically create the connection between UI and code when the app is run.  It also assist developers to re-use common design elements.


The Layout Editor enables us to quickly build layouts by dragging UI elements into a visual design editor instead of writing layout XML by hand. The design editor can preview a layout on different Android devices and versions, and we can dynamically resize the layout to be sure it works well on different screen sizes.

Supporting Libraries

We can develop custom screen designs without using third-party libraries, but certain libraries are very beneficial for efficiently building highly customised designs.

For both iOS and Android there are numerous libraries we can use for custom components like alert, popup, chat and animation.

iOS examples:
• LoadingShimmer
• ViewAnimator
• AnimatedCollectionViewLayout

Android examples:
• GarlandView
• InfiniteCards
• SparkButton


Once we have completed the build of an app – that’s implementing both the design and the required functionality – then it is imperative that we undertake thorough testing.  As a developer, I will thoroughly test my app, but it is also important that an end user tests it as well, as they are likely to uncover issues that I have considered.

Mobile application testing is very different from software testing and website testing. We need to consider the following before performing mobile application testing:

  • Screen resolution (different screen sizes in both iOS and Android)
  • Screen orientation (landscape, portrait)
  • Different devices’ manufacturers (only for Android phones)
  • Different operating system versions in both iOS and Android can have an impact
  • Changing a system settings like font size, themes and dark mode
  • Turning on/off GPS and incoming calls

This article provides a simple overview of what’s involved in building a design into a functioning mobile app. If you have questions, please don’t hesitate to get in touch.

Facebooktwitterredditpinterestlinkedinmailby feather

An Update on React Native – the cross platform app Javascript framework of choice

February 25th, 2022 by Ishan Geeganage

What is React Native?

React Native is a popular JavaScript-based mobile app framework that allows an app developer to build a natively rendered mobile app for iOS and Android.  The framework lets us create an application for various platforms (Apple, Android and more) by using the same codebase.  This reduces the cost of development for our clients, because we don’t need to build to same app twice; once for iOS and once for Android.

In early 2015, Facebook first launched React Native, a framework for building native apps using the React Javascript library.  Since its initial release it has become one of the most popular solutions used for mobile app development.  React Native is used to power some of the world’s most used mobile apps, including the mobile apps for Facebook, Instagram, Shopify and Skype.

What’s in the latest version of React Native?

React Native is aiming to provide more frequent releases of new features and fixes, and engaging more regularly with the developer community.  Upcoming product releases will focus on fixes and as well as improvements.

The latest version of React Native is 0.67.  Below are some notable changes and fixes provided in this latest version:

  • Removed DatePickerAndroid – the component to interact with the selection of date and time is now the same for both Android and iOS.
  • Various 3rd party components used by React Native have been updated, including Kotlin, Gradle.
  • Various issues that were present in the previous version of React Native have been corrected, including bug fixes for animations in specific scenarios, as well as:
    • Android specific fixes: alignment of screen elements along the baseline, scrolling to a particular screen element checks the current position before scrolling, ability to trigger an event when a number pad button is pressed, text input field selection and an issue selecting the last item in a list, and much more.
    • iOS specific fixes including corrections to the behaviour of scrolling to a particular screen location, correcting the movement of the cursor for multi-line text boxes, handling all font family names, and more.
  • Added new features:
    • Android specific: ACCESS_MEDIA_LOCATION permission now available, meaning that an app can be given access to media files on the local mobile device, support for Android 11 which includes a new Locale API, and more features which are specific to the development environment.
    • iOS specific: ability to change the colour of a cancel button, additional control over progress bars, and more features for specific 3rd party software.
  • Removed unnecessary files and global variables.

Why is it important to maintain your React Native app?

Upgrading React Native to its latest version improves performance and security of your apps, as well as ensuring that your app supports the latest changes in the operating systems running of your customer’s Apple and Android devices.

The JavaScript ecosystem is particularly interesting in this aspect as it changes very quickly.  If your app is not kept up to date on a regular basis, it is likely that your app codebase will end up being so far behind that upgrading it will become much more difficult, time-consuming and therefore costly.

How to improve the performance of a React Native app?

To ensure that your React Native app performs well, performance requires careful attention.  Performance is one of the main reasons why we sometimes recommend that our client’s build their apps natively rather than using cross platform languages such as React Native.

One of the changes in the latest release of React Native is the removal of the Android specific component for allowing a user to choose date and time, in favour of utilising the same component for both iOS and Android.  While this may be annoying from the viewpoint of app functionality, it will help the performance of the app by reducing the size of the codebase.

During development of a React Native app, we ensure that we focus on the following to help deliver a high performing app:

  • Provide appropriate navigation strategies – code re-use and minification are important here, as well as usability.
  • Avoid rendering overhead and unnecessary renders – rendering is where the screen is “re-drawn” to refresh information shown to the user.
  • Avoid use of ScrollView to render huge lists. There are several ways to display items within scrollable lists in React Native; two of the most common ways are use ScrollView and FlatList components.  When implementing very long lists (or lists that might grow to be very long), is better to paginate, splitting up the call for information to manageable smaller collection of information and using the FlatList method.
  • Scale and resize images.  The following improvements can be applied to optimize images in a React Native app:
    • Using PNG format instead of JPG.
    • Using smaller-resolution images.
    • Using WEBP format for images – this can help reduce the images’ binary size on iOS and Android by nearly a third of the original size.
  • Cache images – using cache speeds up the display of images that are already in the device local cache.
  • Avoid arrow functions. Arrow functions reduce the number of lines of code required to achieve a particular app behaviour, but slows performance of the app.  This is a bit technical, but to explain further, the arrow function causes each render to generate a new instance of that particular function.  React Native needs to reconcile the function instances, finds a difference due to the use of the Arrow method, and therefore cannot re-use old references.
  • Avoid passing inline functions as properties. Similar to the above, while this coding style achieves the required functionality, it does so at the expense of app performance.
  • Use style references correctly. Similar to the problem caused by arrow functions, when we use object or arrays for styling, React creates new instances with each new render.  Instead we use a Style Sheet in React Native, which always passes a reference instead of a new object or array.
  • Remove console statements – console statements are used to help us test the application during development. These are removed prior to publishing the app; even though they are unseen by the end user, if left in place they impact upon the speed of the app.

The above strategies are also applied during maintenance of our client’s apps.

If your mobile app is built in React Native, and hasn’t been updated recently, we strongly recommend that you take corrective action as soon as possible.

Facebooktwitterredditpinterestlinkedinmailby feather

Technology updates for mobile apps

June 25th, 2021 by Ishan Geeganage

The iOS operating system for Apple devices, and the Android operating system for Samsung and many other brands of mobile devices, are constantly being updated to provide tools to allow developers to implement new features supported by new hardware, and to improve the performance and security of apps on iTunes and the Google Play store.

This article provides an overview of some recent enhancements to the operating systems and developer environments, which will flow through to app features and opportunities for your future mobile apps.


Both Apple and Google have recently enhanced the libraries and opportunities available for developers to provide richer experiences on wearables, such as the Galaxy watch and the Apple iWatch. This is in response to the increase in proliferation of wearables (watches, rings, fitbits etc) and the internet of things, whereby devices such as TVs, motor vehicles, gas meters, watering systems and the like are internet enabled.

Now 3rd party apps are able to add tiles to the watches bringing to the front of the user experience information from your app, where that was previously only available to proprietary apps. In addition, 3rd party apps have more access to notifications, including the ability to break through “do not disturb” features. However, we need to bear in mind that, particularly in the case of Apple, the review process is very stringent and Apple will be guarding the use of these features very carefully to ensure that they are only used in the most appropriate circumstances.

App Store Promotion

Apple, which lags behind Android with regard to the ease with which apps can be promoted, have announced that they are improving the Apple Store Connect to allow app owners to test images used within the app store, to select those that attract the most downloads, and promote events related to their apps also from within the app store.

Apple are now supporting promotion codes to be used by app purchasers in order for app owners to run promotions to provide a discount or free app usage for a period of time. However, Apple and Google continue to have differences in the way promotions run (Google being more flexible) which ultimately constrains the marketing of apps particularly when you want to be “fair” to all segments of the market. Google Play Store’s promotion code and discount functionality offers more flexibility than iTunes, and in fact Apple will no longer allow you to build in your own promotion code facility, even when all payment for the app is taking place via the Apple payment system.

Apple do like to promote their own ecosystem at the expense of others – not surprising really! Another example of this is if you allow users to sign in to your app using a 3rd party authentication mechanism such as a Google account or Facebook account, you must also allow them to use their Apple ID to login. This means that you require custom code in your cross platform app to remove the Apple ID login for Android users, and you need to support Apple ID login even if you aren’t expecting many users to want to login this way.

Google are also planning improvements to the Google Play Store with regard to promoting apps for wearables, and making it easier for people with wearables to install apps on their watch or other devices.


Both Apple and Google are focusing on enforcing privacy for users of apps. We discuss the privacy changes on the Apple platform in another blog post about the launch of iOS version 14.5. Google’s Android version 12 (still in beta) is also giving privacy a boost in what it calls “Private by Design”. A few of the changes include Bluetooth scanning for nearby devices no longer requiring location services to be switched on, and where location services are required, allowing the user to only report an “approximate location”. In addition, users will be able to permit an app to take an action “this time only” instead of for all time.

Concurrency Supported Natively

Apple have released an updated version of Swift – the language in which developers now build iOS Apps – which allows concurrency (the app executing more than one command simultaneously) within the language. This is a big win for future app performance, for example, depending on your app concurrency could allow the user interface to continue to present new information to the user, while their previously submitted information is being processed. Kotlin – the language of choice for native Android development – has supported concurrency and threading for some time.

Compiling iOS Apps in the Cloud

Another important step forward in the iOS app development ecosystem is the announcement of XCode Cloud. Whilst still in beta, Xcode Cloud will facilitate continuous integration and continuous delivery for building apps and automatically send notifications to testers. This will be possible when XCode Cloud is used in conjunction with a git source code repository. It will also allow developers to compile the app in the cloud, rather than taking minutes / hours to compile on the developer’s computer, effectively preventing them from doing any work while that is happening.

Both Apple and Google are improving developer tooling to help developers test parts of their application through better emulators e.g. the new CarPlay simulator for Mac, and the new virtual heart rate sensor in the Google emulator.

Better support for Augmented Reality (‘AR’)

Google announced in March an overhaul of their Google Maps functionality, including the improvement of their Live View Augmented Reality feature which allows you to point your phone at the surrounding buildings (in large cities that have been mapped) or within buildings (such as inside airports) in order to figure out where you are, and get live on screen directions pointing you to where you need to go.

Apple has recently launched the RealityKit 2 library, in order to allow the creation of high-quality, photo-realistic 3D models of real-world objects in minutes by taking photos shot on iPhone, iPad, or DSLR and transforming them into 3D models optimized for AR. Google also has made recent improvements to the app developer environment for easier implementation of AR within Android apps.

AR is clearly an area where both platforms are keen to press forward and provide richer user experiences, and not just for gaming!


With the release of foldable mobile devices such as the Galaxy Z Fold 2, the Android development libraries have been enhanced to allow developers to customise the user interface in different ways for foldable devices, and mobile devices with larger screen sizes.

All the above changes are welcome enhancements, but many of the features rely on users updating their phone operating systems or hardware. Still it is good to keep the above improvements in mind when considering functionality for your new app, or upgrades to an existing app.

If you would like to discuss your app idea, don’t hesitate to get in touch.

Facebooktwitterredditpinterestlinkedinmailby feather

Adding Voice Control to your Mobile App

February 11th, 2020 by Ishan Geeganage

Allowing the user of your mobile app to instruct it via Google Voice Assistant or Siri is a great way of making it easier for your user to get on with their day, and get the answers or action they need to accomplish done quickly, or when their hands aren’t free or glasses nowhere in sight.

Access to Google Voice Assistant (Android) or Siri (Apple) are governed by the methods available to interact with these APIs, and that means voice control is constrained to very particular functions – although the available functions has been significantly extended since we last wrote on this topic back in 2016. Below is a list of the areas in which we can currently use voice activation / control:

Google Voice Assistant

Domain Supported Actions
Alarm Set Alarm
Set Timer
Communication Initiate a phone call
Fitness Start/Stop a bike ride
Start/Stop a run
Start/Stop a workout
Show heart rate
Show step count
Location Book a Cab
Media Play music from search
Take a picture
Record a video
Open Open URL
Open App
Productivity Take a Note
Search Search using a specific app


Domain Supported Actions
VoIP calling Initiate Call
Search the call history
Messaging Send Message
Payments Send payments.
Request payments.
Pay bills.
Search for bills.
Search for and view account information, including balances, points, and miles.
Transfer money between accounts.
Photos management Search for photo and show them in the app
Fitness activities Start, pause, resume, end and cancel workout
Ride Booking Book rides
Provide ride status information
CarPlay integration (not supported on watchOS) Activate and save a drivers setting
Change the cars audio source
Change the cars climate
Change the cars defroster settings.
Change the cars seat settings.
Change the cars radio station.
Vehicle integration Activate hazard light or honk the horn
Lock and unlock the doors.
Check the current fuel or power level.
List and Notes Create to-do lists and items.
Search for to-do lists and items.
Mark to-do list items as complete.
Create reminders based on a date, time, and/or location.
Create notes.
Search for notes.
Modify notes.
Media Search for and play music, audiobooks, and podcasts.
Like or dislike items.
Add items to a library or playlist
Restaurant Reservation Create and manage restaurant reservations
Visual Codes Show a visual code, like a QR code or bar code

In every main OS version release, we expect there will be new opportunities added into these services. This blog was written based on:

  • Sirikit support iOS version 10.0
  • Google Voice Action support version 21

It is also important to note that some actions can only be implemented in either Android or Apple, but not both e.g. search can only be carried out in your Android app not in your iOS app. In iOS you can scan a QR code with your voice, but in Android you cannot.

How is Voice Control added to my App?
In order to allow voice control of your app, the app must be programmed specifically to be accessible by voice control and particular Actions listed above. When a person downloads your app and installs it on their device, they must agree to voice control being allowed. Then when a voice command is received by your phone that relates to one of the domains & supported actions listed above, and which has a responding activity within your app, then the functionality of your app can be triggered.

What Can I Make My App Do After Receiving a Voice Command?
If your app wants to access any of the standard apps that can be controlled by voice, then your app can be programmed to interact with those standard apps upon receiving a voice command. For example, in your custom app, if you wanted to take a piece of content from that app and save it to a Note (in-built device app), that can be achieved using voice commands.

You can’t talk to your app about something entirely outside the voice controls mentioned above. For example, you can’t say “Hey Google, in >mobile app name< open my transaction history.”

In some cases, your app will ask for confirmation before taking an action e.g. making payments, confirming you would like to make a particular booking, and so on. This is to ensure that the voice interpretation has correctly understood your request.

What Happens if there are Multiple Options?
Just say your mobile app contains a search feature, and you want to allow the user to use a voice command such as “Hey Siri, search for xyz”. Simultaneously of course your phone will also have at least one other search application. When your phone receives a search command, it will then ask you which app would you like to use for your search: x or y? Once you have answered that question, your search will be performed via the selected app. Alternatively, you could ask “Hey Siri, search >mobile app name< for xyz”.

Can I add a Custom Voice Command?
You might be tempted to try and work around the limited number of voice commands currently available e.g. “oh, I will use the ‘Book a Cab’ voice command, and have that do something completely different instead”. Both Google and Apple check your app before publishing it in the app stores, and we expect that they will reject your app if it has been programmed in this manner. In addition, if your app is not in the category of ride sharing, your app will not be accepted if it contains voice controls in the Ride Sharing App domain.

If you are looking to add voice control to your app, let’s have a chat!

Facebooktwitterredditpinterestlinkedinmailby feather

What’s Coming for Mobile Apps?

October 22nd, 2019 by Heather Maloney

Over the past 6-12 months you may have noticed the following trends in mobile apps, and mobile devices:

  1. Biometric capability has improved and become more frequently incorporated into the hardware and operating systems of mobile devices, including unlocking through face recognition.
  2. Improved recommendations supported by artificial intelligence (‘AI’) – Spotify suggested music is an obvious example, but the AI used to analyse the vast amount of data gathered by the tech giants is leading to greater accuracy across a whole range of applications; we will be oblivious to many of these.
  3. Increased in-app advertising, including at the start and in the middle of video content in the YouTube app (although you can pay to go ad-free) and in amongst search results in the Google Search app. In addition, the ads presented to you will have been more relevant, including closely tied to your previous online activities – this is another outcome of AI.
  4. Reduced access to free games; increasingly the free component of a game is very basic.
  5. Two-factor authentication is being insisted upon by a greater number of apps. Bottom line; it is more secure.
  6. Increased support for Apple Pay and Google Wallet.
  7. Dark Mode – the ability to change the look of your application to a dark background with light text over top – has become broadly available due to it causing less eye strain (in darker environments) and also because it reduces energy use (if your screen is OLED or AMOLED technology).
  8. Proliferation of betting apps.

And of course, the 5G network and 5G devices became available in major Australian cities.

So what is next? We expect the following features to be added or improved in mobile apps over the short to medium term:

  • Biometric Authentication – we expect it to become more commonplace that authenticating into an app will support face or fingerprint recognition, using these settings already present on your smart phone. In addition, we expect that more apps will not require any authentication if a recent biometric authentication has taken place.
  • Improved Graphics and Faster Processing – the standard chipset in Android mobile phones (and Windows laptops) is moving away from ARM to Cortex-A76 which the manufacturers expect will increase the performance of the devices by 30 – 50%, and mean that they will be faster than Apple devices, with better battery performance. This will allow support for improved graphics to be incorporated into mobile apps. Improved performance is also necessary to run apps which provide virtual reality and augmented reality. We expect to see more apps incorporating augmented reality such as product visualisation for consumers, learning a new task for students, and immersive navigation supported by Apple’s patented augmented reality mapping system.
  • In-app Advertising will grow with more apps utilising this revenue model, or providing a subscription option to switch off ads.
  • Beacons will be increasingly used to advertise to nearby customers when sales and customer-specific offers are available. (For more details about bluetooth beacons).
  • Wearables – more apps will be built to enable use of the apps on wearables such as smart watches, including more apps which function standalone, that is, without needing to have a smart phone nearby operating as the hub. This is to meet the demands of the growing wearables market. (“Shipments of wrist-worn wearables, inclusive of smartwatches, basic watches, and wrist bands, reached 34.2 million units, up 28.8% year over year during the second quarter of 2019 (2Q19), according to new data from the International Data Corporation”).
  • Health Apps – more apps will be launched which have the aim of improving monitoring of the health and vital signs of individuals. We expect the information gathered as part of these apps will fuel AI learnings about particular health conditions, which will provide a feedback loop into the search for cures and improved quality of life for sufferers of common diseases.
  • AI will be used to achieve more common tasks, and will continue to improve upon the user experience with the likes of chatbots implemented within apps. By definition, the more these features are used the better they become.
  • Increase in things controlled by Apps (IoT) – more and more things will be able to be controlled by apps, or report their status to apps such as the PlumbGuard app designed and built by Contactpoint.
  • Financial Apps – we expect to see many more apps that address the financial needs of customers; whether that’s banking facilities, budgeting, or payment. Payments via peer-to-peer solutions and using Google Wallet and Apply Pay are likely to increase.
  • Accessibility will be given greater attention. Human-centric design asks not just how would the average user achieve something, but how would a person with a disability carry out the required task?
  • Improved Access to Device Temperature – Android have recently added to the APIs available to apps on its platform the ability to keep track of the heat of the device. This will allow app developers to take action if the device is over heating and therefore improve the user experience.

What would you add to this list?

Facebooktwitterredditpinterestlinkedinmailby feather

The Evolution of Cross Platform App Languages

September 12th, 2019 by Ishan Geeganage

Contactpoint has been designing and developing mobile apps for our clients for over 8 years. The languages used to build apps have changed significantly over that time – both within a particular platform (aka “native apps“), as well as the languages used to build what was first known as “cross-platform” apps, which are now differentiated by the labels “hybrid” and “cross-platform”.

Native apps are so-called because they are written in the language that is native-to-the-operating-system of the destination device. Apple (and the iOS operating system) originally required apps to be built in Objective C, however in the last 3 years Swift, Apple’s replacement language, has overtaken Objective C. Both Objective C and Swift started out being proprietary languages; Swift is now open source. Android apps have always been built in the Java programming language, however, more recently Google now also supports the Kotlin langugage. The IDEs that programmers use to build Android mobile apps have changed significantly over the years, which also impacts on the method and efficiency of programming. Eclipse was the IDE of choice for several years. Android Studio has taken over as the tool of choice, providing a much more “drag and drop” style IDE.

The term “hybrid app” refers to apps that are written in HTML, CSS and Javascript, and then rendered within the native WebView component. That means the resulting apps perform much more like websites. Access to hardware components such as GPS and cameras is limited, and requires that the native platform has provided a plugin allowing the WebView to access that particular component.

The goal of hybrid apps was to reduce the time and cost of development, by reducing the need to code your application twice – once for iOS, and again for Android. In reality, depending on the functionality required for an app, even the simplest would often require customisations for a particular native platform, so perhaps 80% of the app was written in the cross-platform language, and the balance was added in native code instead. In addition, the resulting app will be larger and slower than a native app, and the look and feel, being the same for all platforms, will lack the distinctive and standard user interface features that you would expect on an Apple device or Android device.

Over the last year or two, the programming languages landscape has changed significantly with regard to the development of what is now labelled “cross-platform” apps. Cross-platform apps are built in a particular language, and then compiled directly into the native code of the destination platform. In addition, a cross-platform app can usually also be deployed for desktop operating systems (Mac, Windows and Linux), providing even greater opportunities for deployment of your solution. These new languages include ReactNative and DART. The Flutter software development kit (SDK) is used along with DART to compile an app. Flutter is an open-source SDK created by the team at Google, and being the youngest option on offer is still gaining widespread use i.e. it will be more difficult to hire a developer with DART and Flutter skills.

Some functionality still cannot be developed in these newer cross-platform tools. Interacting with another device over bluetooth, for example, requires that portion of the app to be developed in the native language, and the end result may not perform as well as a native app.

Whilst cross-platform apps perform much better than Hybrid apps, in comparison with native apps cross-platform apps:
– are 50-60% larger than native apps
– use approximately 30% more memory than native apps
– use the CPU less efficiently

At Contactpoint we continue to build both cross-platform and native apps. An important part of the app planning process is to help our clients to choose the best platform for the development of their desired app, having regard for:

  • functionality, and in particular what hardware elements are to be utilised by that functionality
  • target audience
  • budget
  • time to market
  • long term goals

Please get in touch to discuss your app idea, and which style of development will be best for your solution.

Facebooktwitterredditpinterestlinkedinmailby feather

Battery Life Management and Bluetooth in Mobile App Development

August 26th, 2019 by Ishan Geeganage

Apple’s newest iPhones promise improved battery life. However, much of the improvement has been achieved through constraining background processes, rather than improvement in hardware. The implications on app development has been significant. This article discusses battery life management in light of recent mobile apps we have designed and built for our clients, which connect to IoT (internet-of-things) devices via Bluetooth.

Bluetooth Connectivity
Bluetooth is a great option for communication between devices because it requires very little energy in the process. However, the downside is that it only works for short range communication, and can lose connection in certain conditions e.g. low battery, issues on the device.

Different Bluetooth Profiles
There are many different profiles associated with bluetooth connectivity – it is all bluetooth, but the profile will have implications for the functionality that can be achieved for your mobile app. The available options are governed by the hardware and software in the device to which your app is connecting. We regularly work closely with the IoT equipment designer, so can have an influence on the selected profile and information delivered between the device and the mobile app, but this is not obviously possible when your app is connecting to a device with a previously established bluetooth profile.

There are many different bluetooth profiles – below is a list of those more likely to be involved in a mobile application:

  • Bluetooth Low Energy (BLE). An even lower power consumption protocol, natively supported by Apple, Android, Linux, Windows and Mac operating systems.
  • Bluetooth A2DP – Advance Audio Distribution Profile. Used for streaming audio from one device to another over a Bluetooth connection.
  • Bluetooth HFP – Hands-Free Profile. Used to allow car hands-free kits to communicate with mobile phones in the car.
  • Bluetooth HDP – Health Device Profile. Facilitates the transmission and reception of Medical Device data including heart rate monitors and temperature monitors such as that collected on a smart watch or fitbit style device.
  • Bluetooth HSP – Headset Profile. Used to interact with the user via a headset.
  • Bluetooth MESH – Mesh Profile. Used for efficient smart lighting systems and IoT networks.
  • Bluetooth SPP – Serial Port Profile. Allows setting up virtual serial ports and connecting two Bluetooth enabled devices.
  • Bluetooth VDP – Video Distribution Profile. Allows the transport of a video stream.

Two examples of recent apps we have designed and built for our clients, utilising bluetooth technology, are described below.

Travel Dua App

For this app we used Bluetooth A2DP profile to the play a sound file over a car audio system (most recent motor vehicles which provide bluetooth connectivity support the A2DP protocol). Before playing the audio, the mobile device (smart phone) with the app installed must be paired with the car via bluetooth. The app we designed and built for our client continually checks for any paired A2DP devices, so that when a driver gets into their vehicle and starts their car, when the paired device is found the app immediately plays the sound file embedded within the app using the vehicle’s audio system.

It is also possible that the user would like to play the prayer sound file at other times, so the app allows the user to also manually play the sound file, at which point the sound will play over the mobile phone’s speaker instead.

PlumbGuard – Plumbing Safety Device App

The purpose of the HLP Control’s PlumbGuard app is to provide an additional way to alert a plumber when a hazardous risk is present. Designed and built by Contactpoint, the app scans for and receives data from plumbing safety devices within range, which use beacon technology to advertise their current status. Without pairing to the device, the app can read the advertising packet broadcast by the device.

The app on the plumber’s mobile phone shows the status of all the devices being monitored as reported by the received data set, including the presence of any hazards, the current mode of the device (charging, self-test etc), and battery level.

If the device is low power mode or hazard status, the app will alert the user by playing the relevant warning sound and vibrating.

Battery Management

Battery life is a very important aspect of mobile app development. A device without power offers no functionality at all, and users will notice if a particular app drains their battery more quickly than normal and will likely remove it.

In addition, smart phones are judged by consumers, among other things, on the average time their battery lasts before it needs to be re-charged. For this reason, both Google (Android) and Apple (iOS) provide several external APIs for use within mobile apps, and they employ several internal mechanisms to help conserve battery life which are partly dependent on the platform and device speed. As app developers, we must work within these constraints to deliver the required functionality.

App States
When developing a mobile app, we have to consider each of the following app states, to achieve the most efficient use of memory and battery life, whilst delivering the required functionality:

  • Not Running – the app has not started yet, or was running and has been terminated by the system.
  • Foreground:
    • In-active – the app is running in the foreground but not presently receiving any event. This could happen for example when an inbound call event occurs or a message is received. In this state we can’t interact with app UI.
    • Active – the app is running in the foreground and receiving events. This is the normal mode of an app.
  • Background – an app is running in the background and executing its normal function. Freshly launched apps commence in an in-active state and then to active state (there platform specific differences in this behaviour).
  • Suspended – an app is in the background and is not executing the code. The system moves the application to this state automatically and does not notify. This usually occurs in the situation where the device has low available memory, and is also platform specific.

Background services
It is also possible in very specific states to program an app to perform certain functions within background services. Background services operate without direct interaction by the user. A background service has no user interface and is not bound to the life cycle of activity. Background services are used for repetitive and potentially long running operations such as checking for new data, connection management, data processing etc.

Apple has significant restrictions in place for the use of background services, in an effort to improve user experience and extend battery life.


Depending on the functionality of your app, you may need to specifically program for different states of operation (aside from the suspended state which is controlled by the platform).

As part of building the two apps mentioned above, we utilised local notifications for the Apple versions to ensure that the app is woken up at the appropriate time, in response to the likelihood that the app would be moved by Apple to the background. Local notifications effectively bring information into the foreground to make it easy for the user to bring the app back into an active state by pressing on the notification. Local notifications are triggered at the point that the app goes into the background, and therefore are available from the app lock screen when the user is ready to resume use of the app.

Facebooktwitterredditpinterestlinkedinmailby feather

Cloud does not equal the Internet

November 13th, 2018 by Heather Maloney

Cloud does not equal the internet
People frequently use the term “cloud” or “in the cloud” to simply mean located on the internet or their private intranet. I’ve done it myself, for the sake of expedience. However, they aren’t the same thing, and it’s important to understand why so that you can wisely choose the internet services you are accessing for your business or in your personal life. For example, cloud hosting is not the same as shared web hosting, for the hosting of your organisation’s website.

The internet is the connection of computers around the globe using TCP/IP protocol to manage the connections, and participating in the sharing of information using the HTTP protocol (the worldwide web).

The term “Cloud” or “Cloud Computing” refers to technology services, usually delivered over the internet, which are characterised by:

  • Distribution of a system (program and its data) across many servers and locations, to provide for greater performance, but still providing up to date and correct data.
  • Automatic provisioning (addition of greater capacity via more CPUs, memory and disk space) to meet minute-by-minute requirements.

Applications embodying cloud computing are often further labelled as SaaS (software as a service), PaaS (platform as a service), IaaS (infrastructure as a service), and other ‘…aaS’ names. These labels draw attention to which part of the abstraction of the technology is controlled by the buyer compared to the service provider. However, not all applications given these labels actually provide the two main characteristics that I am asserting differentiates cloud computing ? distribution across many servers, and automatic provisioning. Instead, software delivered as a service via logging into a web application may in fact be stored on one server, in one location, with one database, and require the service provider to manually procure and set up new servers when usage demands the additional resources.

The characteristics of cloud technology provide advantages and disadvantages which I will discuss in a moment, but let’s first consider the technological challenge cloud technology is trying to solve.

As you can imagine, there’s an awful lot of information contained within Facebook. Millions of users each adding several posts, and making hundreds of comments, on a daily basis, adds up very, very quickly. Not only is there a lot of data being stored and accessed by users of Facebook, people are posting and reading comments from all around the globe; some on their phones while riding on a train, others are sitting at their desktop computer in the back of beyond, and everything in between. No one will use Facebook if it takes more than a few seconds for the content to appear on their screen, and Facebook is used by people all around the globe. Facebook is just one example of an application which handles vast amounts of data and serves vast numbers of people.

To make Facebook possible, as well as other applications like it, the underlying technology has to be distributed across multiple servers and locations – a distributed system. There are numerous technical models used to achieve a distributed system. Below are brief descriptions of just a few of the techniques to give you a feel for the complexities involved.


Sharding. A term allowing a single database to be stored across multiple servers by allocating logical portions of the data onto different servers. A very rudimentary example would be determining which server to store the data based on a range of identifiers such as in the case of user accounts the decision could be made to store all data with a user ID between 1 and 100,000 on server 1, between 100,001 and 200,000 on server 2, and so on. The application retrieving the data would send the query to the application server, and then the database server would work out which server to get the data from based on the user ID, get that data and return it back to the user. There are many options for the way that a database may be divided; the right way for a particular application will need to consider the way current data is spread across it’s attributes as well as how future data may grow.

NOSQL. The example given above for sharding described separation of data contained within a relational database; the most common database architecture up until very recently, which as the name suggests relates tables of information to one another by linking IDs. A person’s record in a database may contain an ID to another table storing the details of the school they attend (name, address, phone number etc) – hence being called a relational database. NOSQL or Document Databases have become more popular recently as they can be spread more easily across multiple servers because all the data associated with the person in the sharding example would be stored in one document rather than spread amongst related tables. Document databases often come with functionality built into them to manage distributing documents in the collection across multiple servers.

Caching. Storing data located near to users, providing faster access particularly for commonly used information is referred to as caching. Facebook makes heavy use of memcache to store recently accessed Facebook information in memory, which is much faster to read than from the Facebook MySQL database which is housed on hundreds of thousands of servers. Content Delivery Networks (‘CDN’) are an example of caching of web content to ensure it is closer to your website visitor.

Other concepts such as virtualization, utility computing, and grid computing are also key in the implementation of cloud computing particularly with regard to auto-provisioning of additional computing resources.


We have touched on some of the advantages of cloud computing in relation to the problems it is trying to solve. The advantages can be summarised as:

  • Security. A cloud solution must be focused on security in order to have success over the long term, and they usually have significant resources at the ready to keep security up to date, and respond quickly when a new threat arises. Look for:
    • End-to-end encryption which ensures the encryption of all data in-transit across the Internet and stored at-rest in the cloud, with the encryption keys held by you and used to encrypt the data before it leaves your computer.
    • Sophisticated access controls allowing you to set role-based authentication to control what exact data each user can and cannot view, edit or share.
  • Performance. Because there is likely a server nearby to the user, rather than the user’s request needing to travel half way around the world and back, you can expect the speed of cloud systems to be significantly better. Performance is a key factor for organisations with a workforce distributed around the globe.
  • Scale. The ability to distribute an application and/or its data across multiple servers and locations removes or significantly reduces the constraints on how large an application can grow or how many customers it can efficiently serve.
  • Cost. Another key benefit of cloud is that usually someone else is responsible for concerns such as installation of software and purchase of licenses, management of software patches, backups, hardware upgrades and repairs, anti-virus and protecting against malicious attacks, all handled by the provider of cloud computing rather than the organisation requiring the technology. When comparing the cost of cloud and non-cloud you must take into consideration the total cost of ownership of the alternatives. Auto-scaling (also referred to as elastic computing) is a factor in both cost and performance, as it allows systems to scale up (additional costs) when demand increases, and scale back (reduce costs) when demand is low, allowing the owner of the system to only pay for resources when they are required.


It is important to also be aware of the potentially significant disadvantages of cloud computing:

  • Data ownership / sovereignty. Where is your data really? Who has access to it? Have you read the terms and conditions with respect to the ownership of the data? Can you remove your data permanently, or will it still be accessible by the cloud provider even after your account is closed? Often the owner of the data you place into a cloud computing solution is actually the cloud provider, not you. To help mitigate this issue, some cloud providers are implementing servers in additional countries including Australia, to help organisations to use cloud services without moving their data overseas, but you need to check where your data is stored; often such storage choice will increase the cost of the solution. NB: even if your data starts out being stored in Australia, if the data is owned by a US company, they may be forced to move the data back to the US for scrutiny by American law enforcement agencies – this has already happened in the case of Google in February 2017.
  • Privacy. Facebook has been criticised at the highest levels of American government, and by governments around the world, for the way in which the data it gathers (albeit via their free service) has been used and sold on to 3rd parties. The situation with Facebook and other cloud solutions has been a factor in leading to the new European privacy legislation (GDPR). When you utilise cloud platforms, are you comfortable with manner in which they use the data that you are storing within it (read their terms and conditions)? Can you trust the organisation to abide by their promises?
  • Control. Can you create the functionality you need to support your particular processes, or are you now constrained by the services provided by the cloud platform? Using a cloud service to remove the need to create that service constrains you to the functionality the service offers. The more you depend on a 3rd party service, the less likely you are to be able to innovate in that area of your business on application, which may well slow your organisation down and remove your opportunity to create competitive advantage.
  • Cost. Whilst being able to pay per second for your application using cloud technologies may sound like it is going to reduce your cost, if your application isn’t built to take advantage of cloud technologies, the opposite may occur and your costs can be significantly more than using simpler internet technologies. Cost can also be significantly greater if you use the wrong technology on the wrong cloud provider. For example, whilst the major suppliers of cloud technology usually allow you to run any type of application on their cloud servers, the cost of running those different types may be very different. Running a MS SQL database on Google Cloud is extremely expensive, for example, compared to running it in the Microsoft Azure platform. You need to choose your technology wisely.
  • Skills. Not everyone developing applications is experienced in working on large scale applications, and the implementation of applications using cloud technologies is relatively new, so finding personnel with the required skills can be very challenging.

Whilst I have primarily been discussing cloud computing from the point of view of building an application such as Facebook, cloud computing underpins solutions such as Office365, DropBox and GSuite. These applications allow users all over the world, sometimes the one person in different parts of the world in one day, to access their data – emails and files for example – and programs such as GSuite and Word Online, with great performance, and without the data being [noticeably] out of date, most of the time. Such applications are also increasingly providing users with the capability to collaborate on files e.g. contributing to an online document simultaneously, again while located in different cities and countries.

For such commodity type applications, where easy access from anywhere, across multiple devices, makes business much easier, the decision to sign up for cloud computing may feel like a no-brainer. But you still need to consider the disadvantages discussed above.

In summary, not all internet applications are using cloud computing technologies. Cloud computing is a complex area, utilising multiple strategies aimed at providing up to date information, to mass users all around the world, with great speed. It is important that you way up the advantages and disadvantages of cloud computing for both your commodity technology needs (email, file sharing, file storage, and other operational systems) as well as when developing your own applications.

If you would like to read more:
Use of Memcache by Facebook:

Facebooktwitterredditpinterestlinkedinmailby feather

Technology Predictions for 2018 around online tech

December 11th, 2017 by Heather Maloney

2018 Tech Predictions

As we wrap up the last 2 weeks of 2017, we have been considering what we are likely to see in 2018 technology. You might like to mull over this with your mulled wine and Christmas pudding (or beer and BBQ). Better still; give it some thought as you carry out new year planning.

The Top 8 things we expect to see around online technologies during 2018:

  1. Increased pressure on smaller online retailers. If you don’t provide a very niche product or experience, that is, if the products you are selling online have many competitors, then your customers are likely to migrate to the larger online retailers including Amazon. The winners will be those with the most products, with the more consistently lower price, providing an easy shopping experience, and fast low-cost delivery.
  2. Increased percentage of market share to smart phones running the Android operating system, particularly due to the uptake of Google pixel, but also lower cost Android smart phones.
  3. Increased automation of homes using internet-connected devices due to the major marketing push of Google Home.
  4. Increased integration between apps to make completing the jobs you need to get done even easier.
  5. Increased specialisation of apps for niche markets, again with the intention of making it super easy for people carrying out a task in a well-defined category, to achieve that task as efficiently as possible.
  6. Increased online shopping and therefore parcel delivery into homes; delivery costs paid by the consumer will continue to fall.
  7. Increased use of Apple Pay and Android Pay as more and more people use their smart phones as their payment device.
  8. Increased development of apps that utilise AI / machine learning, making decisions on behalf of organisations in order to more rapidly provide a personalised experience for individual app users.

Feel free to contribute your thoughts!

Facebooktwitterredditpinterestlinkedinmailby feather

Controlling my App using Voice

October 15th, 2017 by Heather Maloney

Adding voice recognition to my mobile app
In order for the apps on your smartphone to be voice controlled, they need to be specifically programmed that way.

Some of the more common voice-enabled apps you are likely to find on your smartphone are:

  • Calendar – ask your smartphone the time of your next / first appointment, on a particular day, and it will tell you the answer and automatically show your calendar appointments for that day on screen
  • Phone – tell your smartphone to call person X, or send a text message to person Y, and it will take care of these tasks, prompting you for the details as required
  • Alarm – set an alarm to go off at a particular date and time
  • Search – ask your phone to search for a topic, and it will display a clickable list of search results

Voice recognition technologies have improved significantly over the last few years, providing numerous options with regard to voice enabling mobile apps, including:

  1. The Android operating system for wearables (e.g. Galaxy watch), smart phones and tablets includes in-built voice control actions for carrying out commonly used tasks such as writing a note. It also comprises the ability for an app to include its own “intents” which listen for voice activation once the user has launched the app. Finally it includes methods for allowing the user to enter free form text for processing by your app.
  2. Google Voice Interactions API – a code library provided by Google which allows an app to be triggered via the Google Now interface – that’s what you’re using when you say ‘Okay Google’ and then say a command.
  3. Apple devices (iPhones, iPads, iWatch) are built on the iOS operating system. Native iOS apps are written in either Objective C or Swift (a more recent language). With the launch of iOS 10, the Swift programming language included a Speech framework to allow developers to more easily implement listen for voice commands, and manipulate voice into text for use within apps.
  4. SiriKit was released in 2016, providing a toolkit for iOS developers to add voice interaction through Siri into their iOS 10 apps.

  5. Cross platform apps need to use 3rd party libraries to interface with the native speech recognition functions.

It’s important to know that the speech of the user is processed by Apple’s servers or Google’s servers, and then returned to the mobile device, so some lag may be noticed particularly when dealing with longer bursts of voice. It may also have privacy considerations for your users.

3rd party APIs exist which are completely contained within the mobile device, meaning that the user doesn’t need to have an internet connection to use them, and the privacy issues are reduced. An example of such a 3rd party API is the CMU Sphinx – Speech Recognition Toolkit. The downside of using such a library is that you can’t avail yourself of the amazingly accurate voice recognition the large players have developed over time, including for many different languages.

Obvious apps which provide the user with significant benefit from the use of voice control include:

  • An app which improves or assists the job of a hands-on task e.g. chefs, surgeons, artists, hairdressers …
  • An app which is needed while a person is driving e.g. navigation, finding locations, dictating ideas on-the-go …
  • An app needed by a person with disability.
  • An app which involves the entry of lots of text.

We expect to see more and more support for voice in all sorts of applications in future. What would you like to be able to achieve through voice commands?

Facebooktwitterredditpinterestlinkedinmailby feather

Subscribe to our monthly

Contactpoint Email News

Our enews is sent out approximately monthly, and contains information on latest digital technologies, and how these can be used to help your organisation grow.

To subscribe, simply fill in your details below: