Challenge
Develop an Android app that would provide a touchless car wash process during the Covid 19 Pandemic.
Outcome
Provided a seamless, reliable mobile application that could be customized for individual car wash clients.
Client
WashCard
Industry
Loyalty
# of Employees
10-20
Architecture Solution
What we built
WashCard had envisioned a new mobile application that would allow car wash operators to automate their service. The new app would allow users to purchase a car wash in a completely touch free process while introducing valuable features such as a fleet services and customer loyalty programs. Washcard had some iOS development capability in house and they approached Build Labs to build the Android version of the application from scratch. After a full feature analysis, Build Labs recommended using Kotlin (Google’s preferred Android development language) with a MVVM architecture (model-view-viewmodel) to provide increased stability and flexibility moving forward.
Android
API Driven
Consumer Facing
GitHub API
Kotlin
Location Services
Map Integration
Payment Integration
Postman
Rewards
Our Technical Solution
We selected a model–view–viewmodel (MVVM) architecture, which facilitates the separation of the development of the graphical user interface from the development of the business and back-end logic (the model). We chose Android Studio as the integrated development environment (IDE) and Kotlin as the programming language. For interacting with the back-end API we selected a type-safe REST client for Android called Retrofit. The Retrofit library was developed by Square and utilizes OkHttp for network requests. For user authentication, we chose Firebase which is owned by Google and used on many popular Android applications. For payment processing, we selected Stripe because it offers a flexible payment system that is widely supported in Android and iOS development. Stripe provides a secure environment that can be used for a variety of transactions including major credit cards, Apple Pay and Google Pay.
Solving the Limited Connectivity Puzzle
The application interacts with the back-end API to display available services and prices and to start and stop individual pieces of equipment at the selected car wash. Since Internet connectivity can vary by location and surroundings (for instance, it can be lower inside a cement block wash bay), it was desirable to limit the overall number of connectivity requests. After a discovery phase, Build Labs recommended using localized database using a Room persistence library. Room is an ORM, Object Relational Mapping library, which provides an abstraction layer over SQLite to allow fluent database access.
The Room implementation allowed a local database to be updated at infrequent intervals and then accessed repeatedly for common queries. An example would be an API call that provided a directory of all the services available at a specific car wash which could then be accessed repeatedly during the customer’s visit at that specific location. In addition to the Room library implementation, a small collection of key-value pairs was identified that could be stored locally and designated for extremely fast access. This was achieved by utilizing the Android SharedPreferences API. A SharedPreferences object points to a file containing key-value pairs and provides simple methods to read and write them. It also provides the security protocols so that variables designated as private can only be accessed via a specific application and user.
An example of a SharedPreference implementation would include key customer data variables, such as a user name, unique user UUID and preferred car wash location. Finally, the application helped reduce the size of the necessary API calls, by utilizing Google’s location services. In the event that the user enabled location services on their phone and provided permission for the app to use those services, some of the API calls could be streamlined to include only information for the relevant location. For example, with location services enabled and geofencing, the available car wash services and prices that were downloaded could be limited to the specific location that the customer was currently visiting.